首页天道酬勤循环队列原理图,简要叙述循环队列的数据结构

循环队列原理图,简要叙述循环队列的数据结构

张世龙 05-06 11:54 90次浏览

数据结构-循环队列操作和实现(C/C )文章目录数据结构-循环队列操作和实现(C/C ) ) )。 1.0初始化定义1.1循环队列结构定义1.2循环队列初始化1.3循环队列长度1.4循环队列入队操作1.5循环队列出队操作1.6循环队列取首元素1.7循环队列函数1.8 C主函数代码1.9 C主函数代码2.0 C完整代码

1.0初始化定义# include iostream # includecstdlib # define maxsize 1000//定义数组的最大长度# defineo k1 # define overflow-1 # define error-1类型//上同using namespace std; 1.1循环队列结构定义typedef struct{QElemType* base; //存储空间的基址int front; //头指针int rear; //尾指针} sq队列; 1.2初始化循环队列statusinitqueue(sqqueue*q ) q-base=newqelemtype(maxsize ); //为队列分配最大大小的数组空间if (! Q-base )//判断分配空间失败状况的exit(overflow ); Q-front=Q-rear=0; //清空头部指针和尾部指针,队列为空return OK; } 1.3求循环队列长度的statusqueuelength(sqqueue*q ) {coutendl; cout '当前队列长度: '; 返回(q-rear-q-front maxsize ) % MAXSIZE; //循环队列长度的表达式(1.4循环队列入队操作statusenqueue(sqqueue*q,QElemType e ) if ) (q-rear1) %maxsize==) q-front //进入讲述元素团队末尾的q-rear=(q-rear1) %MAXSIZE; //小组指针1返回确定; } 1.5循环队列出队操作statusdequeue(sqqueue*q,QElemType *e ) if ) q-front==q-rear团队领导是否等于团队领导return ERROR *e=Q-base[Q-front]; //队列外元素值q-front=(q-front1) %MAXSIZE; //在小组头指针上添加1return OK; //出队列要素(1.6循环队列取头要素statusgethead(sqqueue*q,QElemType *e )//个人用e值表示{coutendl; cout '当前团队领导要素: '; if (q-front==q-rear ({ returnerror; }else{return *e=Q-base[Q-front]; }} 1.7输出循环队列函数statusprintqueue(sqqueue*q ) {coutendl; cout '当前队列为'; for(intI=q-front; i Q-rear; I ) ) /团队头至团队端cout'(40'q-base[I]; 返回确定; } 1.8 C主函数代码int main () {int n,m,t; QElemType e; sq队列q; initqueue(q; printf ('请输入需要入队的次数:'); scanf('%d ',n ); for(intI=1; i=n; I ) printf ('请输入第d个元素的值。' ,I ); scanf('%d ',m ); 枚举(q,m ); (打印队列) q; printf('%d ',GetHead(Q ) ) q,e ); printf('%d ',队列长度(q ) ) q ); printf((n ); printf((n ); printf ('请输入退出团队的次数:'); 扫描(' % d ',t ); for(intI=1; i=t; I ) dequeue(q,e ); (打印队列) q; printf('%d ',队列长度(q ) ) q ); 返回0; } 1.9 C主函数代码int main () {int n,m,t; QElemType e; sq队列q; initqueue(q; 出局了

<<"请输入需要入队的次数:";cin>>n;for(int i=1 ;i<=n;i++){cout<<"请输入第"<<i<<"个元素的值:";cin>>m;EnQueue(&Q, m);}PrintQueue(&Q);cout<<GetHead(&Q,&e);cout<<QueueLength(&Q);cout<<endl<<endl;cout<<"请输入需要出队的次数:";cin>>t;for(int i=1;i<=t;i++){DeQueue(&Q,&e);}PrintQueue(&Q);cout<<QueueLength(&Q);return 0;} 2.0 C完整代码 #include<stdio.h>#include<stdlib.h>#define MAXSIZE 1000 //定义数组的最大长度#define OK 1#define OVERFLOW -1#define ERROR -1typedef int QElemType; // 自己定义的类型typedef int status; // 上同 //队列的顺序存储结构typedef struct{QElemType* base; //存储空间的基地址int front; //头指针int rear; //尾指针}SqQueue;//循环队列的初始化status InitQueue(SqQueue *Q){Q->base =(QElemType*)malloc(MAXSIZE*sizeof(QElemType)); //为队列分配一个容量为MAXSIZE的数组空间if(!Q->base) //判断分配空间失败情况exit(OVERFLOW);Q->front = Q->rear=0; //将头指针和尾指针置空,队列为空return OK;}//求队列的长队status QueueLength(SqQueue *Q){printf("\n");printf("当前队列长度:");return (Q->rear - Q->front + MAXSIZE) % MAXSIZE;//求循环队列的长度公式}//循环队列入队status EnQueue(SqQueue*Q, QElemType e) {if((Q->rear+1)%MAXSIZE==(Q->front))//判断队尾指针是否等于队头指针return ERROR; Q->base[Q->rear]=e; //讲元素进入队尾Q->rear=(Q->rear+1)%MAXSIZE; //队尾指针+1return OK;}//循环队列的出队status DeQueue(SqQueue *Q,QElemType *e){if(Q->front==Q->rear) //判断队尾头是否等于队尾return ERROR;*e=Q->base[Q->front]; //保存出队的元素值Q->front=(Q->front+1)%MAXSIZE; //队头指针加1return OK; //返回出队元素}//取队头元素status GetHead(SqQueue *Q,QElemType *e) //个人习惯用e值带回{printf("\n");printf("当前队头元素:");if(Q->front==Q->rear) {return ERROR;}else{return *e=Q->base[Q->front];}}//输出队列元素status PrintQueue(SqQueue *Q) {printf("\n");printf("当前队列为:"); for (int i = Q->front; i < Q->rear; ++i) //从队头打印到队尾 printf("%4d",Q->base[i]); return OK;}int main(){int n,m,t;QElemType e;SqQueue Q;InitQueue(&Q);printf("请输入需要入队的次数:");scanf("%d",&n);for(int i=1 ;i<=n;i++){printf("请输入第%d个元素的值:",i);scanf("%d",&m);EnQueue(&Q, m);}PrintQueue(&Q);printf("%d",GetHead(&Q,&e));printf("%d",QueueLength(&Q));printf("\n");printf("\n");printf("请输入需要出队的次数:");scanf("%d",&t);for(int i=1;i<=t;i++){DeQueue(&Q,&e);}PrintQueue(&Q);printf("%d",GetHead(&Q,&e));printf("%d",QueueLength(&Q));return 0;} 2.1 C++完整代码 #include<iostream>#include<cstdlib>#define MAXSIZE 1000 //定义数组的最大长度#define OK 1#define OVERFLOW -1#define ERROR -1typedef int QElemType; // 自己定义的类型typedef int status; // 上同 using namespace std;//队列的顺序存储结构typedef struct{QElemType* base; //存储空间的基地址int front; //头指针int rear; //尾指针}SqQueue;//循环队列的初始化status InitQueue(SqQueue *Q){Q->base = new QElemType[MAXSIZE]; //为队列分配一个容量为MAXSIZE的数组空间if(!Q->base) //判断分配空间失败情况exit(OVERFLOW);Q->front = Q->rear=0; //将头指针和尾指针置空,队列为空return OK;}//求队列的长队status QueueLength(SqQueue *Q){cout<<endl;cout<<"当前队列长度:";return (Q->rear - Q->front + MAXSIZE) % MAXSIZE;//求循环队列的长度公式}//循环队列入队status EnQueue(SqQueue*Q, QElemType e) {if((Q->rear+1)%MAXSIZE==(Q->front))//判断队尾指针是否等于队头指针return ERROR; Q->base[Q->rear]=e; //讲元素进入队尾Q->rear=(Q->rear+1)%MAXSIZE; //队尾指针+1return OK;}//循环队列的出队status DeQueue(SqQueue *Q,QElemType *e){if(Q->front==Q->rear) //判断队尾头是否等于队尾return ERROR;*e=Q->base[Q->front]; //保存出队的元素值Q->front=(Q->front+1)%MAXSIZE; //队头指针加1return OK; //返回出队元素}//取队头元素status GetHead(SqQueue *Q,QElemType *e) //个人习惯用e值带回{cout<<endl;cout<<"当前队头元素:";if(Q->front==Q->rear) {return ERROR;}else{return *e=Q->base[Q->front];}}//输出队列元素status PrintQueue(SqQueue *Q) {cout<<endl; cout<<"当前队列为:"; for (int i = Q->front; i < Q->rear; ++i) //从队头打印到队尾 cout<<"\40"<<Q->base[i]; return OK;}int main(){int n,m,t;QElemType e;SqQueue Q;InitQueue(&Q);cout<<"请输入需要入队的次数:";cin>>n;for(int i=1 ;i<=n;i++){cout<<"请输入第"<<i<<"个元素的值:";cin>>m;EnQueue(&Q, m);}PrintQueue(&Q);cout<<GetHead(&Q,&e);cout<<QueueLength(&Q);cout<<endl<<endl;cout<<"请输入需要出队的次数:";cin>>t;for(int i=1;i<=t;i++){DeQueue(&Q,&e);}PrintQueue(&Q);cout<<QueueLength(&Q);return 0;} 2.2运行截图

2.3参考书籍

《数据结构》(C语言版)(第2版)—舒适的航空 精明的灰狼 wndqyg 编著

2.4总结

多多关注留言!

数据结构选择排序,循环队列和顺序队列区别