数据结构——循环队列——2016_12_28
循环队列源代码(C语言版)
/*******简单实现了插入,删除,长度,退出等功能********/
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 //定义队列结构 typedef struct Queue{ int * base; int front; int rear; }SQueue; //初始化100个数字的队列 void InitQueue(SQueue * Q){ Q->base=(int *)malloc(MAXSIZE*sizeof(int)); Q->front=Q->rear=0; } //返回队列长度 void QueueLength(SQueue * Q){ printf("此队列的长度为:%d\n",(Q->rear-Q->front+MAXSIZE)%MAXSIZE); } //插入节点 void InsertQueue(SQueue * Q,int e){ if((Q->rear+1)%MAXSIZE==Q->front) printf("队列已满!\n"); else { Q->base[Q->rear]=e; Q->rear=(Q->rear+1)%MAXSIZE; } } //删除节点 DeleteQueue(SQueue * Q){ if(Q->rear==Q->front) printf("队列已空!\n"); else{ Q->front=(Q->front+1)%MAXSIZE; printf("删除完成!\n"); } } //打印队列 void PrintQueue(SQueue Q){ printf("________________________________________________________\n"); while(Q.front!=Q.rear){ //此处留了一个标志位,所以不用再打印最后一个数。 printf("%d ",Q.base[Q.front]); Q.front=(Q.front+1)%MAXSIZE; } printf("\n————————————————————————————\n"); } //主函数 int main(){ SQueue M;int i,x,v; InitQueue(&M); for(i=1;i<=12;i++){ InsertQueue(&M,i); } printf("十二个数字的队列已经建立完成!\n"); PrintQueue(M); printf("请输入序号进行操作:1.插入 2.删除 3.长度 4.退出\n"); scanf("%d",&x); while(x!=0){ switch(x){ case 1:printf("请输入要插入的值:"); scanf("%d",&v); InsertQueue(&M,v); PrintQueue(M); break; case 2:DeleteQueue(&M); PrintQueue(M); break; case 3:printf("正在计算长度......\n"); QueueLength(&M); break; case 4:exit(0); default:printf("输入有误,请重新输入!\n"); } printf("请输入序号进行操作:1.插入 2.删除 3.长度 4.退出\n"); scanf("%d",&x); } return 0; }