1.栈的定义
栈也是一种线性结构,是一种特殊的线性表,即仅允许在表尾端进行插入或删除操作。允许插入或删除的表尾端称为栈顶,而不允许插入和删除操作的表头端,称为栈底。不含元素的空表则称为空栈。
假设有一个含有n个元素的栈,记为S=(a1,a2,....,an),则称a1为栈底元素,an为栈顶元素,栈中的元素按a1,a2,....an顺序依次插入,而删除时,则按an,an-1,...,a2,a1的顺序依次删除,这种原则可以形象的描述为‘先进后出’或‘后进先出’。
栈的基本运算(或操作)包括入栈、出栈、取栈顶元素等。
2.栈的顺序存储
栈的存储结构和线性表类似,也分顺序存储和链式存储。但在这里只重点说明栈的顺序存储结构。栈的顺序存储即使用一组地址连续的存储单元依次存放自栈顶至栈底的数据元素,同时设置两个指针,一个top指针指向栈顶元素的前一个位置,一个bottom指针指向栈的起始位置(也即是栈底的位置)。栈的顺序存储结构如下图所示:
图2.2.12 栈的顺序存储结构图
当bottom指针为空时,则表明栈不存在。当top指针等于bottom指针时,则表明此时的栈为空栈,即没有数据元素。
栈的基本运算(或操作):
- 取栈顶元素,在非空栈中,栈顶指针指向的是栈顶元素的下一个位置,所以在取栈顶元素时,可以利用栈顶指针减1,来指向栈顶元素的位置,并通过该位置取出栈顶元素。
- 入栈,就是在栈顶插入一个新的元素,此时将新元素存储在栈顶指针指向的位置,然后将栈顶指针加1,指向下一个位置。
- 出栈,就是删除栈顶元素,将栈顶元素删除后,同时将栈顶指针减1,使其指向原先栈顶元素的位置。
图2.2.13 栈的操作示例