一.定义
- 1.栈(Stack)是限定在一端进行插入和删除的运算的线性表,通常将插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。
- 2.不含元素的空表称为空栈。
- 3.因为每次删除(退栈)的总是当前栈中最后插入(进栈)的元素,也就是栈的修改是按着后进先出的原则进行的,因此又称为后进先出的线性表,简称LIFO表。
二.基本操作
- 1.创建栈:initStack(&S)。
- 2.空栈判断:stackEmpty(S),空返回true,否则返回false。
- 3.满栈判断:stackFull(S),满返回true,否则返回false。
- 4.进栈:又称入栈或插入,push(&S, x),将元素x插入S栈的栈顶。
- 5.退栈:又称出栈或删除,pop(S),若栈S不为空,则将S的栈顶元素删除,并返回该元素。
- 6.取栈顶元素:getTop(S),若S不为空,则返回栈顶元素,但不修改栈的桩。
三.存储方式
-
1.顺序存储结构:
1.1:栈的顺序存储称为顺序栈,类似于顺序表的定义,顺序栈也是用数组实现的。 1.2:栈底为数组的第一个元素,位置不变。定义一个top指针指向栈顶的元素位置,随着操作的进行top进行加一或减一操作。 1.3:顺序栈必须预先分配存储空间(预分配空间可能会产生空间浪费,用多栈共享存储空间方式可解决)。
-
2.链式存储结构
2.1:栈的链式存储结构称为链栈,它是运算受限的单链表,其插入和删除操作都限制在表头位置上进行,因此不必设置头结点,将单链表的头指针head改为栈顶指针top即可。