
循环队列的顺序存储
代码如下:
#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("%dn",IsEmpty(Q)); // int x; // scanf("%d",&x); // Push(Q,x); Push(Q,150); Push(Q,500); Push(Q,985); printf("%dn",IsEmpty(Q)); int y; Pop(Q,y); printf("当前出队的队首元素为%dn",y); int z1,z2; GetTop(Q,z1); GetTail(Q,z2); printf("队首元素为%dn",z1); printf("队尾元素为%dn",z2); printf("当前队列的队长是%dn",LenQueue(Q)); return 0; }