循环队列的顺序存储
代码如下:
- #include
- #define Maxsize 20
-
- typedef struct
- {
- int data[Maxsize];
- int front,rear;
- }SqQueue;
-
- void InitQueue(SqQueue &Q)
- {
- Q.front=1;
- Q.rear=1;
- }
-
- bool IsEmpty(SqQueue Q)
- {
- if(Q.front==Q.rear) return true;
- else return false;
- }
-
- void Push(SqQueue &Q,int x)
- {
- if(Q.front==(Q.rear+1)%Maxsize)
- {
- printf("队满了\n");
- }
-
- Q.data[Q.rear]=x;
- Q.rear=(Q.rear+1)%Maxsize;
- }
-
- void Pop(SqQueue &Q,int &y)
- {
- if(Q.front==Q.rear)
- {
- printf("队空了\n");
- }
- y=Q.data[Q.front];
- Q.front=(Q.front+1)%Maxsize;
- }
-
- void GetTop(SqQueue Q,int &z1)
- {
- z1=Q.data[Q.front];
- }
-
- void GetTail(SqQueue Q,int &z2)
- {
- z2=Q.data[Q.rear-1];
- }
-
- int LenQueue(SqQueue Q)
- {
- // int len;
- // len=(Q.rear-Q.front+Maxsize)%Maxsize;
- // return len;
-
- return (Q.rear+Maxsize-Q.front)%Maxsize;
- }
-
- int main()
- {
- SqQueue Q;
- InitQueue(Q);
-
- printf("%d\n",IsEmpty(Q));
-
- // int x;
- // scanf("%d",&x);
- // Push(Q,x);
-
- Push(Q,150);
- Push(Q,500);
- Push(Q,985);
-
- printf("%d\n",IsEmpty(Q));
-
- int y;
- Pop(Q,y);
- printf("当前出队的队首元素为%d\n",y);
-
- int z1,z2;
- GetTop(Q,z1);
- GetTail(Q,z2);
- printf("队首元素为%d\n",z1);
- printf("队尾元素为%d\n",z2);
-
- printf("当前队列的队长是%d\n",LenQueue(Q));
-
- return 0;
- }
-
- /*
- 150 500 985
- */