详细见代码:
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct ElemType
- {
- int data;
- ElemType *next;
- }ElemType; // next 是 元素的指针 指向下一个元素的位置
- typedef struct
- {
- ElemType *front;
- ElemType *rear;
- }Queue,*PsQueue; // 队列头指针 和 队列尾指针
- void initQueue(Queue * sq); // 初始化
- void DestoryQueue (Queue * sq); //销毁队列
- void EnQueue (Queue * sq,int e); //进队列
- void DeQueue (Queue * sq); //出队列
- void GetHead (Queue * sq); //取队头元素值
- bool QueueEmpty (Queue sq); //判队列空否
- void DisQueue(Queue * sq); // 遍历队列中元素
- void main()
- {
- int size = 0;
- char choice = '\0';
- Queue sQueue = {0,};
- PsQueue PsQueue = &sQueue;
- initQueue(PsQueue);
- while (choice != 'q')
- {
- printf("******************************\n");
- printf("--- 1 元素进队 --- \n");
- printf("--- 2 队头出队 --- \n");
- printf("--- 3 遍历队中元素 --- \n");
- printf("--- 4 判队列空否 --- \n");
- printf("--- 5 取队头元素值 --- \n");
- printf("--- 6 销毁队列 --- \n");
- printf("--- q 退出 --- \n");
- printf("******************************\n");
- scanf("\n%c",&choice);
- switch (choice)
- {
- case '1':
- printf("输入进栈元素个数:");
- scanf("%d",&size);
- for (int i = 0; i < size; i++)
- EnQueue (&sQueue,i+1) ; //进队列
- break;
- case '2':
- DeQueue(&sQueue);
- break;
- case '3':
- DisQueue(&sQueue);
- break;
- case '4':
- QueueEmpty(sQueue);
- break;
- case '5':
- GetHead(&sQueue);
- break;
- case '6':
- DestoryQueue(&sQueue);
- break;
- case 'q':
- return;
- }
- }
- }
- void initQueue(Queue * sq) // 初始化
- {
- sq->rear = sq->front = (ElemType *)malloc(sizeof(ElemType)); // 指向同一处内存空间
- }
- void DestoryQueue (Queue * sq) //销毁队列
- {
- while (sq->front->next != NULL)
- {
- ElemType *p = sq->front->next;
- sq->front->next = sq->front->next->next;
- free(p);
- }
- free(sq->front);
- }
- void EnQueue (Queue * sq,int e) //进队列
- {
- sq->rear->next = (ElemType *)malloc(sizeof(ElemType));
- sq->rear = sq->rear->next;
- sq->rear->data = e;
- sq->rear->next = NULL;
- }
- void DeQueue (Queue * sq) //出队列
- {
- // 队头出队
- if (sq->front == sq->rear)
- {
- printf("队列为空,不能出队~\n");
- return;
- }
- else
- {
- ElemType *p =sq->front->next;
- printf("出队元素为 %d\n",p->data);
- sq->front->next = sq->front->next->next;
- free(p);
- }
- }
- void GetHead (Queue * sq) //取队头元素值
- {
- printf("队头元素为 %d\n",sq->front->next->data);
- }
- bool QueueEmpty (Queue sq) //判队列空否
- {
- if (sq.front == sq.rear)
- {
- printf("队列为空~\n");
- return true;
- }
- else
- {
- printf("队列不为空~\n");
- return false;
- }
- }
- void DisQueue(Queue * sq) // 遍历队列中元素
- {
- ElemType * p = sq->front;
- while (p->next != NULL)
- {
- p = p->next;
- printf("%d\t",p->data);
- }
- printf("\n");
- }