以下为“使用数组实现圆形队列”的简单示例
1. 用c语言实现的版本
#include<stdio.h>
#include<stdlib.h>
#define QueueSize 10 /* 假定预分配的队列空间最多为10个元素 */
typedef int DataType;/* 假定队列元素的数据类型为整型 */
typedef struct {
DataType data[QueueSize];
int front;/*头指针*/
int rear;/*尾指针*/
} CirQueue;
/*初始化队列,将圆形队列置空*/
void Initial(CirQueue *Q)
{
Q->front = Q->rear = 0;
}
/* 判断队列是否为空 */
int IsEmpty(CirQueue *Q)
{
return Q->front == Q->rear;
}
/* 判断队列是否已满 */
int IsFull(CirQueue *Q)
{
return (Q->rear + 1) % QueueSize == Q->front;
}
/* 进入队列 */
int EnQueue(CirQueue *Q, DataType x)
{
if (IsFull(Q))
{
printf("队列上溢"); /*上溢,退出运行*/
return -1;
}
Q->data[Q->rear] = x; /*新元素插入队尾*/
Q->rear = (Q->rear + 1) % QueueSize; /*循环意义下将尾指针加1*/
return x;
}
/* 弹出队列 */
DataType DeQueue(CirQueue *Q)
{
DataType temp;
if (IsEmpty(Q))
{
printf("队列为空"); /*下溢,退出运行*/
return -1;
}
temp = Q->data[Q->front];
Q->front = (Q->front + 1) % QueueSize; /*循环意义下的头指针加1*/
return temp;
}
/* 获取队列顶元素 */
DataType Front(CirQueue *Q)
{
if (IsEmpty(Q))
{
printf("队列为空"); /*下溢,退出运行*/
return -1;
}
return Q->data[Q->front];
}
/* 获取队列长度 */
DataType Length(CirQueue *Q)
{
return (Q->rear - Q->front + QueueSize) % QueueSize;
}
void main()
{
CirQueue s;
DataType first, value;
int select;
Initial(&s);
printf("(1)Input a queue data.\n");
printf("(2)Output a queue data.\n");
printf("(3)Get first queue data.\n");
printf("(4)Get queue length.\n");
printf("(5)Exit.\n");
printf("Please select your choice: ");
scanf("%d", &select);
do
{
switch (select)
{
case 1:
printf("Please input the digit(n is positive): ");
scanf("%d", &value);
value = EnQueue(&s, value);/* 进入队列 */
if (value != -1)
{
printf("[%d]已进入队列\n", value);
}
else
{
printf("队列已满\n");
}
break;
break;
case 2:
value = DeQueue(&s); /* 弹出队列 */
if (value != -1)
{
printf("弹出值是: [%d]\n", value);
}
else
{
printf("队列为空\n");
}
break;
case 3:
first = Front(&s); /* 获取首元素 */
if (first != -1)
{
printf("首元素是: [%d]\n", first);
}
else
{
printf("未能获取首元素,队列为空\n");
}
break;
case 4:
value = Length(&s); /* 获取队列长度 */
printf("队列长度为:[%d]\n", value);
break;
default:
printf("Please input the right choice !\n");
break;
}
printf("\n(1)Input a queue data.\n");
printf("(2)Output a queue data.\n");
printf("(3)Get first queue data.\n");
printf("(4)Get queue length.\n");
printf("(5)Exit.\n");
printf("Please select your choice: ");
scanf("%d", &select);
} while (select != 5);
printf("\n");
}
运行结果如下图所示: