数据结构学习笔记------栈

当一个栈的输入序列为 1,2,3,…,n,输出序列的第一个元素是 i,那么,其输出序列不像第一个输出元素为 n 那样只有一种结果。因为输出序列的不唯一,所以难以判断第 i 个输出的元素是什么。

两栈共享空间,指的是使用一个数组来存储两个栈,让一个栈的栈底为该数组的始端 ,另一个栈的栈底为该数组的末端,两个栈从各自的栈底向中间延伸。假设数组A 的大小为 s,我们可以构建 共享栈如下图所示。

其中,栈 1 的栈底固定在下标为 0 的一端,栈 2 的栈底固定在下标为 StackSize-1 即 s-1的一端,而 top1 和 top2 分别为栈 1 和栈 2 的栈顶指针。不难发现,栈的大小为整个数组的空间。
栈 1 为空的条件是 top1=0,栈 2 为空的条件是 top2=StackSize-1,本题即 s-1,而栈满地条件则为 top2=top1+1。


从图下图可以看出,共享栈更加有效地利用存储空间。而且两个栈可以相互调节,只有当 top2=top1+1 时,元素占满了数组的全部空间,栈才发生上溢。因而,共享栈降低了上溢发生的概率。但是栈的存取都是 O(1)的时间复杂度,并没有减少存取时间。

猜你喜欢

转载自blog.csdn.net/qiaoqi17/article/details/108074889
今日推荐