1.1.1 *栈和队列*

1.1.1.1 *结构图*

数组和链表可以看成数据存储的物理结构

栈和队列可以看成数据存储的逻辑结构,可以利用数组进行实现,也可以利用链表进行实现

栈:先入后出,包括栈底和栈顶

数据结构——3、栈和队列_链表数据结构——3、栈和队列_数组_02

不管是出栈还是入栈,时间复杂度都是O(1)

队列:先入先出,包括队头和队尾

数据结构——3、栈和队列_数组_03数据结构——3、栈和队列_栈和队列_04

循环队列:用数组的方式实现循环队列,用来维持队列容量的恒定

不断的进行入队和出队操作,如果队列还剩下最后两个元素,要插入新元素:

新元素不能插入到队尾中,因为队列容量恒定,可以直接插入到队头,让队尾指针指向队头的这个元素。物理存储上,队尾位置也可以在队头之前

数据结构——3、栈和队列_数据存储_05

当(队尾下标+1)%数组长度=队头下标,队列就真的满了

即队尾与队头相隔1位,因为队尾永远不指向具体元素,只指向空,队列最大容量比数组长度小1,

优先队列:遵循的不是先入先出,而是谁的优先级最高,谁先出列,是基于二叉堆实现的

数据结构——3、栈和队列_数据存储_06

1.1.1.2 *代码实现*

数据结构——3、栈和队列_栈和队列_07

数据结构——3、栈和队列_循环队列_08