数据结构示例之用数组实现圆形队列

以下为“使用数组实现圆形队列”的简单示例

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");
}
运行结果如下图所示:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值