C语言实现循环队列
来源:互联网 发布:自制mac安装盘 编辑:程序博客网 时间:2024/05/21 09:53
循环队列常用于已知数据存储的大致数量的场合,使用之前需要事先申请好空间,使用期间不得释放。
它的数据结构可如下表示:
#define MAXQSIZE 100 /*设置队列可以存储99个数据, 因为为了区别队满有一个不能用*/typedef int QElemType;/*循环队列数据结构*/typedef struct{ QElemType *base; int front; int rear;}SqQueue,*SqQueuePtr;SqQueuePtr InitQueue_Sq();int Push_Sq(SqQueuePtr Q,QElemType data);QElemType DeSqueue_Sq(SqQueuePtr Q);int QueueLength_Sq(SqQueuePtr Q);
基本的入队和出队函数:
/*功能:初始化一个循环队列 返回值:指向循环队列的一个指针*/SqQueuePtr InitQueue_Sq(){ SqQueuePtr Q; Q=(SqQueuePtr)malloc(sizeof(SqQueue));//为队列结构分配内存 Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));//为队列的数据存储空间分配内存 if(Q->base==NULL) { printf("there is not enough memory aviable\n"); exit(0); } else Q->front=0; Q->rear=0; return Q;}/*功能:将数据压入堆栈 返回值:0:压入成功*/int Push_Sq(SqQueuePtr Q,QElemType data){ if((Q->rear+1)%MAXQSIZE==Q->front)//判断队列是否已经满了 { printf("the queue is full\n"); exit(0); } else Q->base[Q->rear]=data;//数据存入队列 Q->rear=(Q->rear+1)%MAXQSIZE;//队尾后移 return 0;}/*功能:出队,数据从队头出队 返回值:队头的数据*/QElemType DeSqueue_Sq(SqQueuePtr Q){ QElemType data; if(Q->front==Q->rear)//判断队列是否是空的 { printf("the queue is empty\n"); exit(0); } else data=Q->base[Q->front];//获取队头的数据 Q->front=(Q->front+1)%MAXQSIZE;//队头后移一位 return data;}/*功能:获得队列当前存储的长度 返回值:当前长度值*/int QueueLength_Sq(SqQueuePtr Q){ return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE;}
检测验证:
void main(){ /*队列的测试*/ SqQueuePtr Q; QElemType data,dat; int length=0,i; data=10; Q=InitQueue_Sq(); printf("push data to queue\n"); while(data>0) { printf("%d\t",data); Push_Sq(Q,data); data--; } printf("\n"); length=QueueLength_Sq(Q); printf("the length of queue is %d\n",length); printf("the datas go out of queue is\n"); for(i=0;i<length;i++) { dat=DeSqueue_Sq(Q); printf(" %d\t",dat); } printf("\n");}
结果如下:
0 0
- 循环队列C语言实现
- c语言实现循环队列
- C语言实现循环队列
- C语言实现循环队列
- C语言实现循环队列
- 数据结构(C语言)实现循环队列
- 循环队列的实现(C语言)
- 数据结构C语言实现之循环队列
- 数据结构.循环队列(C语言实现)
- c语言循环线性队列的实现
- 数据结构:循环队列(C语言实现)
- 循环队列的实现(C语言)
- 顺序循环队列的c语言实现
- 数据结构:循环队列(C语言实现)
- 数据结构C语言实现之循环队列
- C语言-循环队列的简单实现
- 数据结构之---C语言实现循环队列
- 循环队列-顺序存储-c语言实现
- Windows和Linux下安装JDK
- C# 学习之旅(二)简单的继承多态介绍
- maomao
- 【JAVA开发】JadClipse安装和配置
- 2017.01.16 学习日记-享元模式
- C语言实现循环队列
- 第一个Qt应用的实现-QT4.8.5移植到S3C2440
- Android 回调接口是啥,回调机制详解
- 继承+关键字(static+const+instanceof+final+)+protected
- Chapter 5:关联式容器之 map 和 multimap
- Jenkins(十)配置文件分析
- 聚合 耦合
- AngularJS 基础入门
- java基础3