首页 > 代码库 > 循环队列
循环队列
#include<stdio.h>#include<stdlib.h>typedef int QEleType;typedef int Status;#define OK 1#define ERROR 0#define OVERLOW -2#define TRUE 1#define FALSE 0//#define Qsize 100 如果写了就错了一定要注意//#define size 100 //不能随便宏定义typedef struct{ QEleType *base;//QEleType为队列元素类型,base为表示循环队列空间的动态数组 int front,rear;//队列指针front 指示队列元素的位置,队尾指针rear指示下一次入队位置 int queuesize;//循环队列存储空间大小}CirQueue;//循环队列类型Status InitCirQueue(CirQueue &Q,int Qsize){//构造一个空间大小为Qsize的初始空队列Q Q.base=(QEleType *)malloc(Qsize*sizeof(QEleType)); if(!Q.base)return OVERLOW; Q.queuesize=Qsize; Q.front=Q.rear=0;//置为空队列 return OK;}Status queueIsEmpty(CirQueue &Q){ if(Q.front==Q.rear) return TRUE;//队列为空 else return FALSE;//队列非空}void clearQueue(CirQueue &Q){ //将循环队列Q清空 Q.front=Q.rear=0;}Status insertQueue(CirQueue &Q,QEleType &e){ if((Q.rear+1)%Q.queuesize==Q.front)return OVERLOW;//队满,空间溢出,入队失败 Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%Q.queuesize;//队尾指针后移一个位置 return OK;}Status deleteQueue(CirQueue &Q,QEleType &e){ if(Q.front==Q.rear)return ERROR;//队空,操作出错 e=Q.base[Q.front]; Q.front=(Q.front+1)%Q.queuesize;//队头指针后移一个位置 return OK;}Status getFront(CirQueue &Q,QEleType &e){ //取队列Q的队头元素值 if(Q.front==Q.rear)return ERROR;//队空,操作出错 e=Q.base[Q.front]; return OK;}int queueLength(CirQueue &Q){ return(Q.rear-Q.front+Q.queuesize)%Q.queuesize;//返回队长}int main(){CirQueue Q; int e; int size=100; InitCirQueue(Q,size); queueIsEmpty(Q); clearQueue(Q); insertQueue(Q,e); deleteQueue(Q,e); getFront(Q,e); queueLength(Q); return 0;}
循环队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。