数据结构八、队列和queue

队列

队列的概念

        队列和栈一样,也是一种访问受限的线性表,它只允许在表的一端插入元素,在另一端删除元素。其中,允许插入的一端称为队尾,允许删除的一端称为队头。先进入队列的元素会先出队,因此队列具有先进先出的特性。

队列的模拟实现

创建 

        定义一个足够大的数组来充当队列,在定义两个变量h和t,变量h标记队头元素的前一个位置,变量t标记队尾元素的位置。

#include <iostream>
using namespace std;

const int N = 1e5 + 10;
int q[N];
int h, t;
入队

        将x这个元素放入队列中,这里我们依旧是从下标为1的位置开始存储有效元素。

void push(int x)
{
	q[++t] = x;
}
 出队

        删除队头元素。

void pop()
{
	h++;
}
查询队头元素

        这里要注意,不是h所指的位置,而是h所指的下一个位置。

int front()
{
	return q[h + 1];
}
 查询队尾元素
int back()
{
	return q[t];
}
判断队列是否为空 
bool empty()
{
	return h==t;
}
有效元素个数
int size()
{
	return t - h;
}

STL——queue

size & empty

        size:返回队列中实际元素的个数

        empty:判断队列是否为空

push & pop

        push:入队

        pop:出队

front & back

        front:返回队头元素,但不删除

        back:返回队尾元素,但不删除

测试代码

#include <iostream>
#include <queue>
using namespace std;

typedef pair<int, int> PII;

int main()
{
	queue<PII> q;
	
	for(int i = 1; i <= 10; i++)
	{
		q.push({i, i * 10});
	}
	
	while(q.size())
	{
		auto t = q.top();
		q.pop();
		cout << t.first << " " << t.second << endl;
	}
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值