栈的定义

栈是一种受限的线性表,限定其仅在表尾进行插入或删除操作。称表尾为栈顶,表头成为栈底。空表称为空栈。栈以LIFO后进先出方式对其数据进行管理。

栈的顺序表实现

栈的顺序表实现与线性表的顺序实现类似。base 和 top 指针分别指向在堆中分配数组表示栈的栈顶和栈底,stacksize 表示栈空间的大小。当初始化栈时 InitStack,从堆中分配 STACK_INIT_SIZE 大小的空间。当执行压栈操作时查看空间容量 stacksize 够不够,如果不够将堆空间从新分配增加 STACKINCREMENT 存入数据。

栈和链表的实现

栈的链式实现可采用与改进的线性表一样有两个指针。分别指向栈底头节点base和栈顶top节点。保留栈内元素个数变量length。使用常规链接方法建立的链表,如下图左,在压栈操作时是O(1)速度,但是弹栈操作要找到top的前驱节点,所以速度是O(n),为了加快弹栈速度可以采用,下图右边所示存储方案,可以把链表反向链接,这样就可以提高弹栈的速度了,并且其他性能不变。