首页 > 试题广场 >

若用数组S[0…n]作为两个栈S1和S2的存储结构,对任何一

[单选题]
若用数组S[0…n]作为两个栈S1和S2的存储结构,对任何一个栈只有当S全满时才不能做入栈操作。为这两个栈分配空间的最佳方案是
  • S1的栈底位置为0,S2的栈底位置为n
  • S1的栈底位置为0,S2的栈底位置为n/2
  • S1的栈底位置为1,S2的栈底位置为n/2
推荐
答案:A
两个栈的栈底一个在数组第一个元素,朝着数组正方向增长
另一个在数组最后一个元素,朝着数组索引减小的方向增长。
当两个栈的栈顶相等是,表明数组满了,不能继续入栈

编辑于 2015-02-05 16:04:29 回复(2)
A
利用栈底位置不变的特性,可让两个顺序栈共享一个一维数据空间,以互补余缺,实现方法是:将两个栈的栈底位置分别设在存储空间的两端,让它们的栈顶各自向中间延伸。这样,两个栈的空间就可以相互调节,只有在整个存储空间被占满时才发生上溢,这样一来产生上溢的概率要小得多。
发表于 2015-01-17 16:34:02 回复(0)
两栈共享空间,它们在数组的两端,向中间靠拢

发表于 2017-02-20 18:04:12 回复(0)
这种方法属于两栈共享空间,一个栈的指针在数组的第一位,另一个栈的指针在最后一位
发表于 2017-09-15 14:04:59 回复(0)

我怎么感觉A也不对,本题的数组长度是n+1,也就是说top2栈底位置应该是(n+1)-1=n吧,求指教

发表于 2015-08-28 11:32:14 回复(7)
当栈1为空时,就是top1等于-1;而当top2等于n时,即栈2为空。 若栈2是空栈,栈1的top1等于n-1时,就是栈1满了。反之,当栈1为空时,top2等于0时,为栈2满。所有当两个栈见面时,也就是两个指针之间相差1,即top1+1==top2为栈满。
发表于 2019-04-20 17:28:07 回复(1)
一个从头开始,一个从尾开始,这样才能充分利用数组空间。
发表于 2016-03-16 07:38:04 回复(0)
这个题目的意思 就是 栈s1 s2放在数组 S中,可是数组S的容量是一定的,那么怎么知道数组是否已经放不下了?
你可以使得栈底都为0 , 然后设一个全局变量计算插入数据个数!但是这不是最优的!
A中的方案,一个往上增 一个往下减, 当栈顶索引相等是 即满了
发表于 2015-08-02 14:04:37 回复(0)
该题目是两栈共享空间的一个变形:
两栈共享空间:ig两个具有相同类型的栈,共享同一个数组
发表于 2018-04-10 20:47:12 回复(0)
一个从头,一个从尾,当top1+1=top2时,代表满了。这样才能充分利用现有的存储空间
发表于 2015-07-05 19:57:44 回复(0)
共享栈
发表于 2020-08-20 14:27:03 回复(0)
A
发表于 2015-04-02 15:19:48 回复(0)