循环队列

来源:互联网 发布:win10电脑动态桌面软件 编辑:程序博客网 时间:2024/06/05 18:26


     循环队列的实现,本人语文表达能力有限,但写的代码简单易懂,这就不做更多的解释,直接看代码。

1:头文件:#include"DQueue.h"
#pragma once#include<stdio.h>#include<stdlib.h>#define ElemType int#define SizeFull 20typedef struct Queue{ElemType *data;int sizefull;int front;int rear;}Queue;void Show();  //显示菜单void InitQueue(Queue *Q);//初始化队列void DestoryQueue(Queue *Q);//摧毁队列void ClearQueue(Queue *Q);//清除队列bool IsFull(Queue *Q);//判空bool IsEmpty(Queue *Q);//判满int QueueLength(Queue *Q);//求队列长度void EnQueue(Queue *Q,ElemType x);//入队列void DeQueue(Queue *Q);//出队列void ShowQueue(Queue *Q);//显示队列
2:功能实现DQueue.cpp:
<pre name="code" class="cpp">#include"DQueue.h"void InitQueue(Queue *Q){Q->data=(ElemType*)malloc(sizeof(ElemType)*SizeFull);if(Q->data==NULL){printf("开辟内存失败\n");return;}Q->sizefull=SizeFull;Q->front=Q->rear=0;}void Show(){printf("************************************************\n");printf("*[1]: 入栈                   [2]: 出栈         *\n");printf("*[3]: 栈长度                 [4]: 摧毁栈       *\n");printf("*[5]: 清理栈                 [6]: 显示栈       *\n");printf("*[0]: 退栈                                     *\n");printf("************************************************\n");printf("请选择:");}void DestoryQueue(Queue *Q){free(Q->data);Q->front=Q->rear=Q->sizefull=0;}void ClearQueue(Queue *Q){Q->front=0;Q->rear=0;}bool IsFull(Queue *Q){return (Q->rear+1)%Q->sizefull==Q->front;}bool IsEmpty(Queue *Q){return Q->rear%Q->sizefull==Q->front;}int QueueLength(Queue *Q){return Q->rear%Q->sizefull;}void EnQueue(Queue *Q,ElemType x){if(IsFull(Q)){printf("空间已满\n");return;}Q->data[Q->rear]=x;Q->rear=(Q->rear+1)%Q->sizefull;}void DeQueue(Queue *Q){if(IsEmpty(Q)){printf("队列为空,无法删除\n");return;}Q->front=(Q->front+1)%Q->sizefull;}void ShowQueue(Queue *Q){for(int i=Q->front;i!=Q->rear;i=(i+1)%Q->sizefull){printf("%d ",Q->data[i]);}printf("\n");}

3:主函数main.cpp
<pre name="code" class="cpp">#include"DQueue.h"void main(){Queue Q;InitQueue(&Q);ElemType x;int Length;int pos=1;while(pos){Show();scanf("%d",&pos);switch(pos){case 1:printf("请输入数据,以-1结束:");while(scanf("%d",&x),x!=-1){EnQueue(&Q,x);}break;case 2:DeQueue(&Q);break;case 3:Length=QueueLength(&Q);printf("Length=%d\n",Length);break;case 4: DestoryQueue(&Q);break;case 5:ClearQueue(&Q);break;case 6:ShowQueue(&Q);break;default :break;}}}





0 1