队列详解

· · 个人记录

队列详解

1.谈谈队列

什么是队列?

相信这是刚开始学习队列的同学的第一个问题

队列这个名字源于生活,例如当我们去食堂排队打饭时,所形成的就是一个队列

本章我们将引进一个新的概念——————数据结构

何为数据结构?你可以看成数据结构就是数组的变形,本质上数组也是一种数据结构,而其他的数据结构则会让解决某些题目更加简便

下面我们来看一下队列的概念

前置知识队列

2.队列基本操作

1.向队尾插入一个数(push)

2.从队头弹出一个数(pop)

3.判断队列是否为空(empty)

4.查询队头元素(query)

上述就是队列的基本操作

可是,现在有一个问题,如何实现队列呢?

(1)数组模拟

用数组模拟是一种不错的方法,而数组模拟的是队列先进先出(你排队时后进先出试试看)的思想

我们用两个指针(变量)hh,tt来模拟

hh表示的是队头(第一个)元素,tt表示的是队尾(最后一个)元素

先来解决push操作

push操作只需在数组的最后加上一个元素,并把tt+1即可

即:q[++tt]=x//x为插入元素

pop更加简便,因为是删除队头元素,只需把hh+1即可 hh++

判断队列非空hh,tt这两个指针都需要用到,判断hh是否≤tt即可(不贴代码了)

查询即输出q[hh]即可

(2)STL

这里讲一下STL队列的定义

假如要定义一个整型队列q

就是queue<int>q

而四种基本操作就变成了

1.q.push(x)

2.q.pop()

3.q.empty()

4.q.front()

再次强调,初学者先不要用STL,尽量用数组模拟,来熟悉队列的思维

最后,一定要多刷题~~~~