#include "stdio.h"
#include "stdlib.h"
#define MaxSize 20 //指定队列的容量
typedef int ElemType;
typedef struct
{ ElemType data[MaxSize]; //保存队中元素
int front,rear; //队头和队尾指针
} SqQueue;
void InitQueue(SqQueue *&sq) //初始化队列,其中sq为引用型参数
{
sq=(SqQueue *)malloc(sizeof(SqQueue));
sq->rear=sq->front=0; //队列指针初始化
}
void DestroyQueue(SqQueue *&sq)//销毁队列
{
free(sq);
}
bool EnQueue(SqQueue *&sq,ElemType x)//入队
{ if ((sq->rear+1) % MaxSize==sq->front) //队满上溢出
return false;
sq->data[sq->rear]=x;
sq->rear=(sq->rear+1) % MaxSize; //队尾循环进1
return true;
}
bool DeQueue(SqQueue *&sq,ElemType &x)//出队
{ if (sq->rear==sq->front) //队空下溢出
return false;
x=sq->data[sq->front];
sq->front=(sq->front+1) % MaxSize; //队头循环进1
return true;
}
bool GetHead(SqQueue *sq,ElemType &x)//获取队首元素
{ if (sq->rear==sq->front) //队空下溢出
return false;
x=sq->data[sq->front+1];
return true;
}
bool QueueEmpty(SqQueue *sq)//判断是否队空
{ if (sq->rear==sq->front)
return true;
else
return false;
}
int main()
{
SqQueue *S;
ElemType e;
InitQueue(S);//初始化测试
EnQueue(S,10);//入队测试
EnQueue(S,20);//入队测试
EnQueue(S,30); //入队测试
DeQueue(S,e);//出队测试
printf("出队值为%d\n",e);
GetHead(S,e);//获取队首元素测试
printf("队首值为%d\n",e);
DestroyQueue(S);//销毁队列测试
}