栈和队列有相似点也有不同点,相似点在于他们都是线性数据结构,不同点是一个先进后出,一个是先进先出,本质上就是逆序操作与顺序操作。这两种数据结构在企业的面试中经常出现,不仅有考察相关代码的实现,也会考察这两种数据结构具体的应用。这部分内容将会带大家梳理、掌握栈与队列这两个数据结构。
1. 栈
1.1 定义
要明白栈的概念,就需要从“栈”这个字开始解读,《说文》中解释到:栈,棚也。所以本质上,栈就是用来存储货物的地方。引申到计算机科学中,栈的就是暂时存储数据的地方。栈作为一种只能在其中一头插入删除操作的特殊线性表,严格遵循数据先入后出的原则进行操作。基于这样的原则,我们可以很好地理解栈在进行数据的读取、输出的过程中,不需要更改栈底的指针。
栈是一种先进后出(LIFO,Last In First Out)的数据结构,这个数据结构非常好理解就类似于压入子弹的枪膛。因此可以得到栈的一个定义:限定仅在表尾进行插入和删除操作的线性表。这里需要特别注意的是,栈属于线性表。栈可以通过数组或者链表来实现,根据实现的数据结构不同,分别称为顺序栈和链式栈。由此可以引出一些有关栈的概念。
- 栈顶(top):允许进行数据插入和删除的一端
- 栈底(bottom):栈顶的另一端