①链表 ②栈 ③队列 ④双向链表 ⑤双端队列
这物种结构的插入操作都是相同的,而查找/插入/移除有些微差别。
- 栈,只能从头/栈顶执行peek/push/pop操作,都是严格受限的。
- 队列,只能从队首peek,从队尾push,从队首pop。
- 双端队列,只能从两端peek/enqueue/dequeue,而不能从中间操作。
顺序链表和双向链表没有上述限制。
双端队列——Double-ended queue缩写deque,读作deck。其元素只能两端添加或删除,即只能从头部/尾部添加或删除。
双向链表和顺序链表99%都是相同的。主要的区别是:每个节点包含两个指针,next
指针指向后一个元素(若存在)即aj指向aj+1,另一个prev
指针指向前一个元素,即aj指向aj-1(若存在)。
prev
指针是的双向链表能够反向遍历,但同时也增加了内存的消耗。它解决了顺序链表中移除尾元素的低效问题。
队列这种ADT中,元素是有序
的,主要操作有enqueue
入队和dequeue
出队。
即Fist-In-First-Out
(FIFO)。最下进入队列的元素,会最后出队列。
Stack栈是一种数据结构,它要求只能从顶部增加元素即push
,只能从顶部移除元素即pop
。亦即Last-In-First-out
(LIFO)。