数据结构与算法学习之路4--栈

175 阅读1分钟

栈的定义

栈也是一种线性的数据结构,但是它是一种“操作受限”的数据结构,元素必须先进后出而且操作只能在线性表的一端进行,通常我们称其为栈顶,另一端我们称为栈底。 向栈中添加元素称为入栈,删除栈顶的一个元素称为出栈。

栈的实现方式

数组

通过数组实现的栈称为顺序栈。数组不支持扩容时入栈和出栈是只操作栈顶的数据因此时间复杂度为O(1);当数组支持扩容时出栈的时间复杂度还是O(1),当空间不够的时候需要申请更大的内存并且进行数据搬移,此时的时间复杂度为O(n)。

链表

通过链表实现的栈称为链式栈。链式表的入栈和出栈时间复杂度都为O(1)。

栈的常用场景

  • 逆序输出。栈最大的特点是先进后出,所以把所有元素依次入栈然后把所有元素出栈并输出这样就实现了逆序输出。
  • 语法检测“()”“[]”“{}”“<>”这些成对出现的符号。凡是遇到括号的前半部分,即把这个元素入栈,凡是遇到括号的后半部分就比对栈顶元素是否该元素相匹配,如果匹配,则前半部分出栈,否则就是匹配出错。