#include<stdio.h>
#define MaxSize 10
typedef int ElemType;
/* 结构体定义 */
typedef struct{
ElemType data[MaxSize];
int front;//队头指针
int rear;//队尾指针
}SqQueue;
/* 初始化操作 */
void init(SqQueue *Queue)
{
Queue->front = 0;
Queue->rear = 0;
}
/* 销毁操作 */
void destory(SqQueue *Queue)//顺序表自动回收。只需要将队头、队尾指针指向初始位置即可
{
Queue->front = 0;
Queue->rear = 0;
}
/* 判空操作 */
int isempty(SqQueue Queue)
{
if (Queue.rear == Queue.front)
return 1;//队列为空
else
return -1;//队列非空
}
/* 判满操作 */
int isfull(SqQueue Queue)
{
if ((Queue.rear+1)%MaxSize == Queue.front)
return 1;//队列已满
else
return -1;//队列不满
}
/* 输出操作 */
void display(SqQueue Queue)
{
if (Queue.rear == Queue.front) //队列为空
{
printf("队列为空,不能进行输出操作\n");
return;
}
else{
int i = Queue.front;
printf("队列元素:\n");
while (i != Queue.rear)
{
printf("Queue[%d] = %d\n",i,Queue.data[i]);
i = (i+1)%MaxSize;
}
}
printf("\n");
}
/* 入队操作 */
int push(SqQueue *Queue,int x)//队尾入队
{
if ((Queue->rear + 1)%MaxSize == Queue->front)//判断队列是否已满
return -1;
else{
Queue->data[Queue->rear] = x;
Queue->rear = (Queue->rear+1)%MaxSize; //逻辑上的循环队列,重复利用出队后的空间
}
return 1;
}
/* 出队操作 */
int pop(SqQueue *Queue,int *popNum)//队头出队
{
if (Queue->rear == Queue->front) // 队列为空
return -1;
else{
*popNum = Queue->data[Queue->front];
Queue->front = (Queue->front+1)%MaxSize;//队头指针后移
}
return 1;
}
/* 取队头元素操作 */
int peek(SqQueue Queue,int *num)
{
if (Queue.rear == Queue.front)//空队
return -1;
else
*num = Queue.data[Queue.front];
return 1;
}
/* 主函数 */
int main()
{
SqQueue Queue;
init(&Queue);
int flag = 1;//循环变量
while (flag != -1)
{
printf("\n");
printf("---------------请选择你的操作-----------------\n");
printf("\n");
printf("1.元素入队\n");
printf("2.元素出队\n");
printf("3.取队头元素\n");
printf("4.判空操作\n");
printf("5.判满操作\n");
printf("6.输出操作\n");
printf("7.销毁操作\n");
printf("8.退出\n");
printf("\n");
printf("--------------------------------------------\n");
int a = 0;
scanf("%d",&a);
//入队所需参数
int x = 0;
int pushflag = 0;
//出队所需参数
int popNum = 0;
int popflag = 0;
//取队头所需参数
int peekNum = 0;
int peekflag = 0;
//判空所需参数
int isemptyflag = 0;
//判满所需参数
int isfullflag = 0;
switch (a)
{
case 1: printf("请输入你想入队的元素:\n");
scanf("%d",&x);
pushflag = push(&Queue,x);
if (pushflag == 1)
printf("入队成功\n");
else
printf("入队失败\n");
break;
case 2: popflag = pop(&Queue,&popNum);
if (popflag == -1)
printf("出队失败,队列为空\n");
else
printf("出队成功,出队的元素为:%d\n",popNum);
break;
case 3: peekflag = peek(Queue,&peekNum);
if (peekflag == -1)
printf("取队头元素失败,队列为空\n");
else
printf("取队头元素成功,队头元素为:%d\n",peekNum);
break;
case 4: isemptyflag = isempty(Queue);
if (isemptyflag == 1)
printf("队列为空\n");
else
printf("队列非空\n");
break;
case 5: isfullflag = isfull(Queue);
if (isfullflag == 1)
printf("队列已满\n");
else
printf("队列非满\n");
break;
case 6: display(Queue);
break;
case 7: destory(&Queue);
break;
case 8: flag = -1;break;
default:flag = -1;
break;
}
}
}
运行结果如下图所示: