校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 >
题目

若用数组S[0. .n-1]做为两个栈S1和S2的共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。为这两个栈分配空间的最佳方案是

A.S1的栈底位置为0,S2的栈底位置为n-1

B.S1的栈底位置为0,S2的栈底位置为n/2

C.S1的栈底位置为1,S2的栈底位置为n/2

解答

正确答案是 A

两个栈的栈底一个在数组第一个元素,朝着数组正方向增长
另一个在数组最后一个元素,朝着数组索引减小的方向增长。
当两个栈的栈顶相等是,表明数组满了,不能继续入栈
C 6条回复 评论
资深90后

如果S2的栈底位置设为n/2,我认为是S2只能占一半,不能认为S2栈的栈底就是S1的栈顶。

发表于 2018-10-13 11:11:42
0 0
心意

若用数组S[0. .n-1]做为两个栈S1和S2的共同存储结构,即S1和S2不能放在同一位置上,所以一个放在数组首部,一个放在数组尾部。将数组分为2部分,所以选A。如果有人想到选B的话,即他的思想为一个放在数组首部,一个放在数组中间,这种方法的话数组不能为S1和S2所共享。

发表于 2018-10-13 11:11:36
0 0
老干妈拌面

这个题目也就这样,咋一看上去有点吓人

发表于 2018-10-13 11:11:28
0 0
落地成盒

B C选项,如果一个栈空间小于n/2,另外一个栈空间大于n/2,那么虽然数组没有满,然而大的栈仍不能使用小的栈的空间,无法进行入栈操作!

发表于 2018-10-13 11:11:23
0 0
落地98K

题目说的很清楚,只有当S满的时候,才不能做入栈操作,意思是只要还有空间,两个栈随便你入,但是由于要判断S是否已满,得看两个栈的元素的个数之和是否等于n。比较好的结果方案当然是一个栈从数组一个元素开始往后入,另一个堆栈从数组最后一个元素往前入,判断时只要判断两个栈顶下标是否相加等于N即可,这就很好的利用的数组的特性!

发表于 2018-10-13 11:11:06
0 0
企鹅哥哥

把S2的栈底位置搞成n/2,那么s1就只能顶多占一半了,这样就算数组没满,s1已经不能入栈了

发表于 2018-10-13 11:10:57
0 0