循环队列的实现

循环队列实现与应用
本文介绍了一种基于数组的循环队列实现方法,并通过具体的C语言代码展示了如何进行初始化、判断空满状态、入队出队等操作,最后通过一个简单的字符读取示例演示了循环队列的应用。
#include<stdio.h>
#define size 10  //最大队列长度,实际上只能存入(size-1)个数据
typedef char DataType;
//循环队列可以解决顺序队列的假满现象
//循环队列的类型定义
typedef struct 
{
	DataType data[size];//存储队列的数据空间
	int front,rear;//队头和队尾指针
}circleQueue;

//初始化队列
void init(circleQueue * q)
{
	q->front=q->rear=0;
}

//判断队列是否为空
int isEmpty(circleQueue *s)
{
	return s->front==s->rear;
}

//判断队列是否为满
int isFull(circleQueue *q)
{
	return (q->rear+1)%size==q->front;
}

//元素入队,rear所指的单元始终未空
void inQueue(circleQueue *q,DataType e)
{
	if(isFull(q))
	{
		printf("Over Flow !");
	}
	else
	{
		q->data[q->rear]=e;
		q->rear=(q->rear+1)%size;//队尾指针上移一位
	}
}

//元素出队
DataType outQueue(circleQueue *q)
{
	DataType x;
	if(isEmpty(q))
	{
		printf("Under Flow !");
		return NULL;
	}
	else
	{
		x=q->data[q->front];
	    q->front=(q->front+1)%size;//队头指针上移一位
		return x;
	}
}

//打印队列
void printQueue(circleQueue q)
{
	while(q.front!=q.rear)
	{
		printf("%c ",q.data[q.front]);
		q.front=(q.front+1)%size;
	}
	printf("\n");
}

//取得队头元素
DataType getFirst(circleQueue q)
{
	if(isEmpty(&q))
	{
		printf("Under Flow !");
		return NULL;
	}
	else
	{
		return q.data[q.front];
	}
}
void main()
{
	circleQueue q;
	DataType c;
	init(&q);
	while((c=getchar())!='\n')
	{
		inQueue(&q,c);
	}
	printf("出队顺序为:");
	printQueue(q);

	outQueue(&q);
	printf("出队顺序为:");
	printQueue(q);

	printf("队头元素为:%c",getFirst(q));
	printf("\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值