本文基于Coursera北大课程《数据结构基础》,所有文中非标注图片均来自课件,侵删
根据下图,通过访问形式划分的线性结构中,栈和队列属于顺序访问;按操作方式分,线性结构又可以划分为线性表、栈(LIFO)和队列(FIFO)三种形式,线性表在Coursera北大《数据结构基础》之线性表中已经学习过,这里进行栈和队列的学习。
目录
1. 栈(stack)
栈是一种后进先出(LIFO)限制访问端口的线性结构。栈的运算只在表的一端进行,主要操作包括进栈(push)和出栈(pop)。
P.S. 堆(heap)用于不符合LIFO的动态存储分配,如指针所指向空间的分配。
1.1 栈的实现方式
1.1.1 顺序栈(Array-based stack)
顺序栈使用向量表现,实质是简化的顺序表。使用顺序栈的关键是确定哪一端作为栈顶。如下图所示,顺序栈的栈顶是随着数据的进栈(也叫做压入栈顶)而改变的。
使用顺序栈时,要特别注意上溢和下溢问题:
- 上溢即overflow,是当栈中已经有maxsize个元素时,如果再做进栈运算,就会溢出;
- 下溢是underflow,即对空栈做出栈运算时会产生的现象。
1.1.2 链式栈(linked stack)
链式栈往往采用单链形式存储,指针从栈顶向下链接,如下图所示。
1.1.3 顺序栈和链式栈的效率比较
在时间效率上,顺序栈和链式栈的所有操作都只需要常数时间完成