循环队列

来源:互联网 发布:java方法名命名规则 编辑:程序博客网 时间:2024/05/05 02:52

复习吧算是……

参考:《大话数据结构》程杰


#include<stdio.h>#define N 30struct Queue{int front,rear;int QueueSize;int data[N];void InitQueue(){front = rear = 0;QueueSize = N;for(int i=0;i<QueueSize;data[i++]=0);}void ClearQueue(){while(QueueLength()>0){DeQueue();}}int QueueEmpty(){if(QueueLength()==0)return 1;return 0;}int GetHead()//取队首{return data[front];}int EnQueue(int e)//队尾入队{if( (rear + 1)%QueueSize == front )return -1;data[rear] = e;rear = (rear + 1)%QueueSize;return 1;}int DeQueue()//队首出队{if(front == rear)return -1;front = (front + 1)%QueueSize;return 1;}int QueueLength(){return (rear - front + QueueSize)%QueueSize;}};int main(){int n,i,x;while(~scanf("%d",&n)){Queue fuck;fuck.InitQueue();for(i=0;i<n;i++){scanf("%d",&x);fuck.EnQueue(x);}//fuck.ClearQueue();//printf("The length of the Queue: %d\n",fuck.QueueLength());while(!fuck.QueueEmpty()){puts("");printf("The head of the Queue: %d\n",fuck.GetHead());printf("The length of the Queue: %d\n",fuck.QueueLength());puts("");fuck.DeQueue();}}return 0;}