基础数据结构-栈&队列

一、什么是栈 & 队列

栈和队列也都是一种线性表,只是它们的操作是受限的:

  • 栈只允许在一端插入(push)和删除(pop)数据,先进后出。
  • 队列在只允许在两端操作数据,有入队(enqueue)和出队(dequeue)两种操作,先进先出。

和 数组 或者 链表 的特点归功于它们底层的数据组织形式不同,栈和队列的特点归功于数据的操作限制(或者称为约定)。栈和队列既可以基于数组实现,也可以基于链表实现。

二、“受限”的价值

既然 栈好队列 只是操作受限的数组或者链表,那么他们存在的价值是什么呢,我们为什么不直接使用数组或者链表呢?

从功能上来说,数组或链表确实可以替代栈,但特定的数据结构是对特定场景的抽象,暴露过多接口的在提高使用灵活的同时也提高了出错的概率。

三、栈的用途

栈比较通用的主要用途有:

  1. 函数调用栈。
  2. 表达式求值。
  3. 括号匹配。

四、队列的用途

常用于在资源有限时候的排队策略实现。