标签:style blog color io ar sp div on c
#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; }
标签:style blog color io ar sp div on c
原文地址:http://www.cnblogs.com/leijiangtao/p/3995491.html