数据结构之队列--第一篇

本文介绍了数据结构中的队列,将其比喻为饭堂的排队,阐述了队列只能在队头出队、队尾入队的特性。文章详细说明了队列的实现需要一个元素数组和两个指针,分别表示队头和队尾,并讨论了入队和出队操作。此外,提出了使用环形结构解决连续可用空间的问题,以避免空间浪费,并提供了相应的代码实现和运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说到队列,就经常会想起饭堂的“排队长龙”。

队列,也是一种特殊的被限定的数据结构。

特殊在于队列只能在队头取元素,只能在队尾进元素。

实现队列需要三个元素:

 即

①用来存放元素的数组。

②两个指针。其中头指针指向队头元素(下标不一定为0哦),尾指针指向队尾元素+1的那个位置。

队列有两种操作:

①入队操作:

即把元素放到队尾指针所指位置,而后队尾指针往下一个位置移动。(这里为什么不是tail++稍后会讲)

 ②出队操作:

即取出队头指针所指元素而后队头指针往下一个位置移动。 (这里为什么不是head++稍后会讲)

从外面上述的两种操作,我们很容易想到这种情况:

经过一系列入队出队操作,在队头指针前面,会造成连续的可利用空间,

于是,聪明的前人就说啊,我们可以把队列在逻辑上看成一个环:

 

这样子,只要还有空间,就可以一直入队,不会造成空间上的浪费;

代码实现起来也很简单,头指针和尾指针在移动到下一个元素的时候,不要直接++,而是+1后取模:

 完整代码:

#include<iostream>
using namespace std;


const int maxn=1000;
int a[maxn];

int head;//头指针
int tail;//尾指针

//基本操作1-进队列
void enqueue(int x)
{
	a[tail]=x;
	tail=(tail+1)%maxn;//而不是tail++
}

//基本操作2-出队列
int dequeue()
{
	int x=a[head];
	head=(head+1)%maxn;//而不是head++;
	return x;
}

int main()
{
	//队列:1,2,3,4,5,7,8,9,10
	head=tail=0;//初始化队列为空。
	for(int i=1; i<=10; i++)
	{
		enqueue(i);
	}
	while(head!=tail)
	{
		cout<<dequeue()<<" ";
	}

	return 0;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值