Skip to content

Latest commit

 

History

History
33 lines (17 loc) · 1.8 KB

stack&queue.md

File metadata and controls

33 lines (17 loc) · 1.8 KB

栈与队列

栈与队列都是操作受限的线性表。

何为线性表呢?线性表是具有相同数据类型的 n(n>=0) 个数据元素的有限序列。

栈是只允许在一段进行操作的数据结构,我们可以把只在数组尾进行操作的数组视为一个栈。

栈可以分为 顺序栈、共享栈、链栈,接下来我们会谈论一下这三个栈,并用代码实现一下。

从存储结构来分,我们可以分为顺序存储和链式存储。顺序存储:顺序栈,共享栈;链式存储:链栈。

顺序栈:类似数组。

共享栈:两个栈共享同一块空间,其有两个指针,分别指向栈的两端。栈空就是 top0 = -1, top1 = MaxSize,栈满:top0 + 1 = top1

链栈:用单链表实现的栈,但是只能在链表头部进行操作,注意链栈是没有额外的头结点。

另外,还有一个重要的 单调栈,在 LeetCode 刷题过程中,单调栈是一个很重要的应用。单调栈是一个单调递增或递减的栈,你可能会疑惑,栈进入的元素是随意的,你怎么保证里面的元素是有序的呢,其实可以另开一个栈来保存入栈时出栈的元素;或者入栈时,比新入栈元素小的或大的元素都可以忽略,LeetCode就有应用到这种情况的单调栈。

栈的应用主要有:栈在括号中的应用,栈在表达式求值中应用,递归,树的递归遍历。

队列

队列是可以在两端进行操作的数据结构,但是只能在队尾入队,队头出队。

队列可以分为 一般队列、循环队列、链式队列、双端队列、优先队列

另外还有一个重要应用 单调队列,LeetCode 刷题也会用到此种数据结构。

队列的应用主要有:树的层次遍历,图的广度优先遍历。