1.定义
栈是只允许在一端进行插入或删除操作的线性表。
栈顶:线性表允许进行插入删除的那一端。
栈底:固定的,不允许进行插入和删除的另一端。
空栈:不含任何的元素。
特性:后进先出,先进后出。
栈的数学性质:n个不同元素进栈,出栈元素不同排列的个数为 (1/n+1 乘以c)上述公式称为卡特兰数。
栈的顺序存储结构
栈是一种操作受限的线性表,类似于线性表,它也有对应的两种存储方式。
1.顺序栈的实现
采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(Top)指示当前栈顶元素的位置。
栈顶指针:S.top,初始设置S.top=-1(初始值为-1,是因为地址从零开始,当第一个元素进栈时top+1=0,此时说明栈非空所以从top=-1开始);栈顶元素:S.data[S.top]
进栈操作:栈不满时,栈顶指针先加一,再送值到栈顶元素。(注意顺序)
出栈操作:栈非空时,先取栈顶元素值,再将栈顶指针减一
栈空条件:S.top==-1;
栈满条件:S.top=MaxSize-1;(注意位序(元素个数)与存储下标的关系,存储下标从0开始)
栈长:S.top+1;
由于顺序栈的入栈操作受数组上界的约束,当对栈的最大使用空间估计不足时,有可能会发生栈上溢。
注意:栈和队列的判空、判满条件,会因实际给的条件不同而变化,遇到具体问题要具体分析。