循环队列的顺序存储
代码如下:
#include<stdio.h>
#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
*/