再回首,数据结构——循环队列上的常见操作

循环队列详解
本文深入介绍了循环队列的数据结构,包括其类型定义、初始化方法、判断空队列、获取队列长度、获取队首元素、元素入队及出队等核心操作,并提供了详细的代码实现。

       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。

 

      希望这些能提供给初学者一些参考。


//循环队列的类型描述
#define MaxSize N
typedef struct 
{
	ElementType elem[MaxSize];
	int front, rear;
}CirQueue;

//初始化队列
CirQue InitQueue()
{
	CirQue q;
	q.front = q.rear = 0;
	return (q);
}

//判断队列 q 是否为空 QueueEmpty(q)
int QueueEmpty (CirQueue q)
{
	return (q.front == q.rear);
}

//求队列q的长度 QueueLength(q)
int QueueLength(CirQueue q)
{
	return ((q.rear - q.front + MaxSize)%MaxSize);
}

//获取队列 q 队首元素的值 GetHead(q)
ElementType GetHead(CirQueue q)
{
	if (QueueEmpty(q))
		return (nil);
	return q.elem[(q.front+1)%MaxSize];
}

//将元素 e 入队列 AddQueue(q, e)
void AddQueue (CirQueue *q, ElementType e)
{
	if (q->front == (q->rear+1)%MaxSize)
		printf ("Full");
	else
	{
		q->rear = (q->rear+1)%MaxSize;
		q->elem[q->rear] = e;
	}
}

//删除队首元素 DeleteQueue(q)
ElementType DeleteQueue (CirQueue *q)
{
	if (EmptyQueue(*q))
		return nil;
	else
	{
		e = q->elem[(q->front+1)%MaxSize];
		q->front = (q->front+1)%MaxSize;
		return e;
	}
}

//双端队列的队首插入
void AddQueueInFront(CirQueue *q, ElementType e)
{
	if (q->front == (q->rear+1)%MaxSize)
		printf ("Full");
	else
	{
		q->elem[q->front] = e;
		q->front = (q->front-1+MaxSize)%MaxSize;
	}
}
//双端队列的队尾删除
ElementType DeleteQueueInRear(CirQueue *q)
{
	if (q->front == q->rear)
		return nil;
	else
	{
		e = q->elem[q->rear];
		q->rear = (q->rear+1)%MaxSize;
		return e;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值