学习内容
栈 (Stack)
栈(stack)又名堆栈
,它是一种运算受限
的线性表
。限定仅在表尾进行插入
和删除
操作的线性表。这一端被称为栈顶
,相对地,把另一端称为栈底
。向一个栈插入新元素又称作进栈、入栈或压栈
,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈
,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
稍微介绍一下关键名词:
运算受限:也就是这个表你不能随便的删除插入。只能按照它的规则进行插入删除。比如栈就只能在一端就行插入和删除。同样,队列也是运算受限,只能在两天操作。
线性表:栈也是一种线性表,前面详细介绍过线性表,它表达的是一种数据的逻辑关系。也就是在栈内各个元素是相邻的。当然在具体实现上也分数组和链表实现
,他们的物理存储结构不同。但是逻辑结构(实现的目的
)相同。
栈顶栈底: 这个描述是偏向于逻辑上的内容,因为大家知道数组在末尾插入删除
更容易,而单链表通常在头插入删除
更容易。所以数组可以用末尾做栈顶,而链表可以头做栈顶。
Stack这种数据结构应用很广泛,比如你的程序执行查看调用堆栈、加减运算、甚至在搜索算法中dfs,替代递归等等。 在计算机的使用中,大量的运用了栈,比如编译器中的词法分析器、Java虚拟机、软件中的撤销操作(Undo)、浏览器中的回退操作,编译器中的函数调用实现等等。
栈的实现
接口 | 说明 | 复杂度 |
---|---|---|
void push(E e) | 向栈中加入元素 | O(1) 均摊 |