赞
踩
运行的结果
运行结果说明:
1.为了清清楚楚的表示队首队尾,我设置的打印函数把对应的队头队尾进行了打印
2.按照循环队列的知识,少使用一个位置,通过(q.rear+1)%MAXQSIZE==q.front来判断是否满,因此系统第一次插入的时候最后一个位置随机了一个大数
- //循环队列的基本操作模拟实现
- #include<stdio.h>
- #include<stdlib.h>
- #define MAXQSIZE 10
- typedef struct {
- int *base;
- int front;
- int rear;
- }SqQueue;
-
- //队列初始化
- int InitQueue(SqQueue &q){
- q.base=(int*)malloc(MAXQSIZE*sizeof(int));
- if(!q.base){
- exit(-1);
- }
- q.rear=q.front=0;
- }
-
- //入队的操作
- int EnQueue(SqQueue &q,int e) {
- //判断是否满
- if((q.rear+1)%MAXQSIZE==q.front){
- printf("当前的队列已满");
- return 0;
- }
- //入队
- q.base[q.rear]=e;
- //修改队尾坐标
- q.rear=(q.rear+1)%MAXQSIZE;
- return 1;
- }
-
- //出队的操作
- int DeQueue(SqQueue &q,int &e){
- //判断是否空
- if(q.rear==q.front){
- return 0;
- }
- //接收出队元素
- e=q.base[q.front];
- //修改队头坐标
- q.front=(q.front+1)%MAXQSIZE;
- }
-
- //队列的长度计算
- int QueueLength(SqQueue q){
- return (q.rear-q.front+MAXQSIZE)%MAXQSIZE;
- }
-
- //从头至尾打印元素
- void print(SqQueue q){
- printf("\n");
- for(int i=0;i<MAXQSIZE;i++){
-
- printf("%d",q.base[i]);
- if(i==q.rear){
- printf("队尾");
- }
- if(i==q.front){
- printf("队头");
- }
- printf("\n");
- }
- }
- int main(){
- SqQueue q;
- InitQueue(q);
- for(int i=0;i<9;i++){
- EnQueue(q,i);
- }
- printf("当前的队列长度为:%d",QueueLength(q));
- print(q);
- int e;
- DeQueue(q,e);
- DeQueue(q,e);
- DeQueue(q,e);
- EnQueue(q,11);
- EnQueue(q,12);
- EnQueue(q,13);
- EnQueue(q,13); //队列已满,失败
-
- print(q);
- return 0;
-
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。