赞
踩
目录
本帖可以实现的功能
- void pro()
- {
- printf("0.退出\n");
- printf("1.建立一个新队列\n");
- printf("2.按照输出方式打印队列信息\n");
- printf("3.求队列长度\n");
- printf("4.获取对头元素\n");
- printf("5.获取队尾元素\n");
- printf("6.删除对头元素\n");
- printf("7.判断队列是否为空\n");
- printf("8.在队尾插入一个数\n");
- printf("9.清空一个队列\n");
- printf("10.摧毁一个队列\n");
- }
- void InitQueue(LinkQueue &Q)
- {
- //建立链队列
- Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
- Q.front = Q.rear;
- if (!Q.front)
- printf("开辟空间失败\n");
- Q.front->next = NULL;
- printf("链式队列存储空间开辟完成\n");
- // Q.front->next=Q.rear->next;
- }
- Status EnQueue(LinkQueue &Q, int e)
- {
- //在队列的尾部插入元素
- QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
- p->data = e;
- p->next = NULL;
- Q.rear->next = p;
- Q.rear = p;
- }
- void print(LinkQueue Q)
- {
- //打印对列信息,按照输出方向
- QueuePtr p;
- p = Q.front->next;
- while (p != NULL)
- {
- printf("%d ", p->data);
- p = p->next;
- }
- printf("\n");
- }
- void QueueEmpty(LinkQueue Q)
- {
- //判断是否为空队列
- if (Q.front == Q.rear)
- {
- printf("空\n");
- }
- else
- {
- printf("不空\n");
- }
- }
- void QueueLength(LinkQueue Q)
- {
- //求队列的长度
- int length = 0;
- QueuePtr p, q;
- p = Q.front->next;
- while (p != NULL)
- {
- p = p->next;
- length++;
- }
- printf("长度为%d\n", length);
- }
- void QueueRear(LinkQueue Q)
- {
- //求队尾
- printf("队尾元素是:%d\n", Q.rear->data);
- }
- Status DeQueue(LinkQueue &Q)
- {
- int e;
- if (Q.front == Q.rear)
- {
- printf("这个队列为空\n");
- }
- QueuePtr p = Q.front->next;
- e = p->data;
- Q.front->next = p->next;
- if (Q.rear == p)
- {
- Q.rear = Q.front;
- }
- free(p);
- return e;
- }
- void QueueFront(LinkQueue Q)
- {
- //求对头
- printf("对头元素为:%d\n", Q.front->next->data);
- }
- Status CreatQueue(LinkQueue &Q)
- {
- //输入队列元素
- printf("请输入队列里面的元素\n");
- int e;
- scanf("%d", &e);
- while (e != -1)
- {
- EnQueue(Q, e);
- scanf("%d", &e);
- }
- }
- Status DestoryQueue(LinkQueue &Q)
- {
- QueuePtr p;
- while(!p)
- {
- p=Q.front;
- Q.front=Q.front->next;
- free(p);
- }
- printf("摧毁队列完成\n");
- }
- Status ClearQueue(LinkQueue &Q)
- {
- Q.rear=Q.front->next=NULL;
- printf("清空操作已经完成\n");
- }
- void swi(LinkQueue Q)
- {
- int num;
- pro();
- printf("请输入功能数字:");
- scanf("%d", &num);
- while (num)
- {
- switch (num)
- {
- case 0:
- num = 0;
- break;
- case 1:
- printf("建立一个新队列\n");
- InitQueue(Q);
- printf("\n\n");
- CreatQueue(Q);
- printf("建立成功\n");
- break;
- case 2:
- if (Q.rear == NULL)
- {
- printf("在进行操作二时,需要进行操作一\n");
- }
- else
- {
- printf("队列信息如下:\n");
- print(Q);
- }
- break;
- case 3:
- if (Q.rear == NULL)
- {
- printf("在进行操作三时,需要进行操作一\n");
- }
- else
- {
- printf("队列");
- QueueLength(Q);
- }
- break;
- case 4:
- if (Q.rear == NULL)
- {
- printf("在进行操作四时,需要进行操作一\n");
- }
- else
- {
- printf("获取对头元素\n");
- QueueFront(Q);
- }
- break;
- case 5:
- if (Q.rear == NULL)
- {
- printf("在进行操作五时,需要进行操作一\n");
- }
- else
- {
- printf("获取队尾元素\n");
- QueueRear(Q);
- }
- break;
- case 6:
- if (Q.rear == NULL)
- {
- printf("在进行操作六时,需要进行操作一\n");
- }
- else
- {
- printf("删除对头元素,");
- int e;
- e = DeQueue(Q);
- printf("删除的对头元素是:%d\n", e);
- }
- break;
- case 7:
- if (Q.rear == NULL)
- {
- printf("在进行操作七时,需要进行操作一\n");
- }
- else
- {
- printf("判断队列是否为空\n");
- QueueEmpty(Q);
- }
- break;
- case 8:
- if (Q.rear == NULL)
- {
- printf("在进行操作八时,需要进行操作一\n");
- }
- else
- {
- printf("在队尾插入一个数\n");
- int n;
- printf("请输入一个数字:");
- scanf("%d", &n);
- printf("\n");
- EnQueue(Q, n);
- printf("插入成功\n");
- }
- break;
- case 9:
- if (Q.rear == NULL)
- {
- printf("在进行操作九时,需要进行操作一\n");
- }
- else
- {
- ClearQueue(Q);
- }
- break;
- case 10:
- if (Q.rear == NULL)
- {
- printf("在进行操作十时,需要进行操作一\n");
- }
- else
- {
- DestoryQueue(Q);
- Q.rear=NULL;
- }
- break;
- default:
- printf("输入错误,请重新输入\n");
- }
- printf("\n\n");
- pro();
- printf("请输入功能数字:");
- scanf("%d", &num);
- }
- }
- // define区
- #define Stack_Init_Size 100
- #define Stack_Increment 10
- #define OK 1
- #define OVERFLOW -2
- #define ERROR 0
-
- //预处理
- #include <stdio.h>
- #include <stdlib.h>
-
- //typedef
- typedef int Status;
- typedef struct QNode
- {
- int data;
- struct QNode *next;
- } QNode, *QueuePtr;
- typedef struct
- {
- QueuePtr front;
- QueuePtr rear;
- } LinkQueue;
-
- //函数区声明
- void InitQueue(LinkQueue &Q); //建立链队列
- Status EnQueue(LinkQueue &Q, int e); //在队列的尾部插入元素
- void print(LinkQueue Q); //打印对列信息,按照输出方向
- void QueueEmpty(LinkQueue Q); //判断是否为空队列
- void QueueLength(LinkQueue Q); //求队列的长度
- void QueueRear(LinkQueue Q); //求队尾
- Status DeQueue(LinkQueue &Q); //求对头
- void QueueFront(LinkQueue Q); //输入队列元素
- Status CreatQueue(LinkQueue &Q); //创建队列
- Status DestoryQueue(LinkQueue &Q); //摧毁队列
- Status ClearQueue(LinkQueue &Q); //请空队列
- void pro(); //功能
- void swi(LinkQueue Q); //switch
-
- //主函数
- int main()
- {
- LinkQueue Q;
- Q.rear = NULL;
- swi(Q);
- }
-
-
- void InitQueue(LinkQueue &Q)
- {
- //建立链队列
- Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
- Q.front = Q.rear;
- if (!Q.front)
- printf("开辟空间失败\n");
- Q.front->next = NULL;
- printf("链式队列存储空间开辟完成\n");
- // Q.front->next=Q.rear->next;
- }
-
- Status EnQueue(LinkQueue &Q, int e)
- {
- //在队列的尾部插入元素
- QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
- p->data = e;
- p->next = NULL;
- Q.rear->next = p;
- Q.rear = p;
- }
-
- void print(LinkQueue Q)
- {
- //打印对列信息,按照输出方向
- QueuePtr p;
- p = Q.front->next;
- while (p != NULL)
- {
- printf("%d ", p->data);
- p = p->next;
- }
- printf("\n");
- }
-
- void QueueEmpty(LinkQueue Q)
- {
- //判断是否为空队列
- if (Q.front == Q.rear)
- {
- printf("空\n");
- }
- else
- {
- printf("不空\n");
- }
- }
-
- void QueueLength(LinkQueue Q)
- {
- //求队列的长度
- int length = 0;
- QueuePtr p, q;
- p = Q.front->next;
- while (p != NULL)
- {
- p = p->next;
- length++;
- }
- printf("长度为%d\n", length);
- }
-
- void QueueRear(LinkQueue Q)
- {
- //求队尾
- printf("队尾元素是:%d\n", Q.rear->data);
- }
-
- Status DeQueue(LinkQueue &Q)
- {
- int e;
- if (Q.front == Q.rear)
- {
- printf("这个队列为空\n");
- }
- QueuePtr p = Q.front->next;
- e = p->data;
- Q.front->next = p->next;
- if (Q.rear == p)
- {
- Q.rear = Q.front;
- }
- free(p);
- return e;
- }
-
- void QueueFront(LinkQueue Q)
- {
- //求对头
- printf("对头元素为:%d\n", Q.front->next->data);
- }
- /*
- int DeQueue(LinkQueue &Q)
- {
- //删除对列的对头元素
- QNode *p;
- p = Q.front->next;
- int e = p->data;
- Q.front->next = p->next;
- free(p);
- return e;
- }*/
-
- Status CreatQueue(LinkQueue &Q)
- {
- //输入队列元素
- printf("请输入队列里面的元素\n");
- int e;
- scanf("%d", &e);
- while (e != -1)
- {
- EnQueue(Q, e);
- scanf("%d", &e);
- }
- }
-
- Status DestoryQueue(LinkQueue &Q)
- {
- QueuePtr p;
- while(!p)
- {
- p=Q.front;
- Q.front=Q.front->next;
- free(p);
- }
- printf("摧毁队列完成\n");
- }
-
- Status ClearQueue(LinkQueue &Q)
- {
- Q.rear=Q.front->next=NULL;
- printf("清空操作已经完成\n");
- }
-
- void pro()
- {
- printf("0.退出\n");
- printf("1.建立一个新队列\n");
- printf("2.按照输出方式打印队列信息\n");
- printf("3.求队列长度\n");
- printf("4.获取对头元素\n");
- printf("5.获取队尾元素\n");
- printf("6.删除对头元素\n");
- printf("7.判断队列是否为空\n");
- printf("8.在队尾插入一个数\n");
- printf("9.清空一个队列\n");
- printf("10.摧毁一个队列\n");
- }
-
- void swi(LinkQueue Q)
- {
- int num;
- pro();
- printf("请输入功能数字:");
- scanf("%d", &num);
- while (num)
- {
- switch (num)
- {
- case 0:
- num = 0;
- break;
- case 1:
- printf("建立一个新队列\n");
- InitQueue(Q);
- printf("\n\n");
- CreatQueue(Q);
- printf("建立成功\n");
- break;
- case 2:
- if (Q.rear == NULL)
- {
- printf("在进行操作二时,需要进行操作一\n");
- }
- else
- {
- printf("队列信息如下:\n");
- print(Q);
- }
- break;
- case 3:
- if (Q.rear == NULL)
- {
- printf("在进行操作三时,需要进行操作一\n");
- }
- else
- {
- printf("队列");
- QueueLength(Q);
- }
- break;
- case 4:
- if (Q.rear == NULL)
- {
- printf("在进行操作四时,需要进行操作一\n");
- }
- else
- {
- printf("获取对头元素\n");
- QueueFront(Q);
- }
- break;
- case 5:
- if (Q.rear == NULL)
- {
- printf("在进行操作五时,需要进行操作一\n");
- }
- else
- {
- printf("获取队尾元素\n");
- QueueRear(Q);
- }
- break;
- case 6:
- if (Q.rear == NULL)
- {
- printf("在进行操作六时,需要进行操作一\n");
- }
- else
- {
- printf("删除对头元素,");
- int e;
- e = DeQueue(Q);
- printf("删除的对头元素是:%d\n", e);
- }
- break;
- case 7:
- if (Q.rear == NULL)
- {
- printf("在进行操作七时,需要进行操作一\n");
- }
- else
- {
- printf("判断队列是否为空\n");
- QueueEmpty(Q);
- }
- break;
- case 8:
- if (Q.rear == NULL)
- {
- printf("在进行操作八时,需要进行操作一\n");
- }
- else
- {
- printf("在队尾插入一个数\n");
- int n;
- printf("请输入一个数字:");
- scanf("%d", &n);
- printf("\n");
- EnQueue(Q, n);
- printf("插入成功\n");
- }
- break;
- case 9:
- if (Q.rear == NULL)
- {
- printf("在进行操作九时,需要进行操作一\n");
- }
- else
- {
- ClearQueue(Q);
- }
- break;
- case 10:
- if (Q.rear == NULL)
- {
- printf("在进行操作十时,需要进行操作一\n");
- }
- else
- {
- DestoryQueue(Q);
- Q.rear=NULL;
- }
- break;
- default:
- printf("输入错误,请重新输入\n");
- }
- printf("\n\n");
- pro();
- printf("请输入功能数字:");
- scanf("%d", &num);
- }
- }
在没有建立队列时:
建立队列
打印队列
求长度
获取对头元素
获取队尾元素
删除对头元素
队尾插入一个数字
验证
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。