/*顺序存储实现队列*/
#include<stdio.h>
#define MaxSize 10
typedef struct
{
int data[MaxSize];
int front,rear;
}SqQueue;
void InitQueue(SqQueue &Q);
bool QueueEmpty(SqQueue Q);
bool EnQueue(SqQueue &Q,int x);
int DeQueue(SqQueue &Q,int &x);
int GetHead(SqQueue Q,int &x);
//初始化队列
void InitQueue(SqQueue &Q)
{
//初始化时队头,队尾指针指0
Q.rear=Q.front=0;
}
bool QueueEmpty(SqQueue Q)
{
if(Q.rear==Q.front)
return true;
else
{
return false;
}
}
//入队
bool EnQueue(SqQueue &Q,int x)
{
if((Q.rear+1)%MaxSize==Q.front) //队满则报错
{
return false;
}
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
return true;
}
//出队(删除一个队头元素,并用x返回)
int DeQueue(SqQueue &Q,int &x)
{
if(Q.rear==Q.front)
{
return 9999; //判断队空,若队空则返回9999
}
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return x;
}
//获得队头元素的值,用x返回
int GetHead(SqQueue Q,int &x)
{
if(Q.rear==Q.front)
{
return 9999; //判断队空,若队空则返回9999
}
x=Q.data[Q.front];
return x;
}
int main(void)
{
SqQueue Q;
int x=0;
InitQueue(Q);
QueueEmpty(Q);
EnQueue(Q,3);
EnQueue(Q,4);
EnQueue(Q,5);
printf("%d\n",DeQueue(Q,x));
printf("%d\n",DeQueue(Q,x));
printf("%d\n",DeQueue(Q,x));
GetHead(Q,x);
return 0;
}