数据结构-队列

概念:

队列也是一种“操作受限”的线性表,体现在先进先出原则

常见操作:

入队:队列尾部放入数据

出队:队列头部取一个数据

常见队列:

普通队列:

1. 由于队列是在两端进行操作,需要两个指针,一个是head指针,指向对头;一个是tail指针,指向队尾

2. 入队的就是尾指针给后移动,出队的时候头指针会向后移动

3. 使用数组实现的队列就是顺序队列,使用链表实现的就是链式队列

4. 在顺序队列中,判断队列的条件是tail = n,队空的条件是head=tail

5. 在顺序队列中,当尾指针指向数组最后一个位置时,入队操作就有问题,此时head由于出队操作已经后移,数组中有位置,为了利用这部分空间,因此出现循环队列,就是让数组首尾相连,当尾指针指向最后一个位置时,再次从数据第一个位置开始,循环队列判断队满和队空的条件是重点。

6. 实际应用中,出现阻塞队列和并发队列

7. 阻塞队列就是给队列增加阻塞机制,入队的时候如果队列满的就会阻塞等待队列有空余位置,出队的时候如果队空就会阻塞队列有数据,常应用生产-消费中

双端队列:

是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在队列的两端进行。在实际使用中,还可以有输出受限的双端队列(即一个端点允许插入和删除,另一个端点只允许插入的双端队列),输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列)。而如果限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻的栈了

优先级队列:

1. 是0个或者多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有查找、插入一个新元素或删除

2. 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。

3. 对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。

4. 最突出的优先就是自动排序,本质上是堆实现,故入队和出队的效率都是log(n),因此也不是线性结构

常考面试题

1. 使用两个队列实现一个栈

2. BFS使用队列

3. 滑动窗口

你可能感兴趣的:(数据结构-队列)