设栈的顺序存储空间为S(1: m),初始状态为top=m 1。现经过一系列入栈与退栈运算后,top=20,则当前栈中的元素个数为( )A30B20Cm-19Dm-20
仰望星空 脚踏实地 资深达人 2016-01-31 14:40:54
2795 13 0

请问这道题怎么做的啊?

问题来自:
设栈的顺序存储空间为S(1: m),初始状态为top=m+1。现经过一系列入栈与退栈运算后,top=20,则当前栈中的元素个数为( )
A. 30
B. 20
C. m-19
D. m-20
答案:C
解析:栈的顺序存储空间为S(1: m),初始状态top=m+1,说明这个栈是m在栈底,1是开口向上的。这题可以假设栈中有x个元素,当X=0时,也就是栈中没有元素,则Top=m+1,当X=m时,也就是栈满,则Top=1,由此可以得出Top=m+1-X,就可以得出X=m+1-Top。 所以说这个时候栈中的元素=m+1-Top,当Top=20时,栈中元素=m-19。所以选择C。 【注意:没有规定栈中栈底必须是0,这个在课程中也说过了。(如果说初始状态top=0,说明这个栈是1在栈底,m开口向上的),大家可以自己画画图】

共 13 个回答

    最佳答案

    青栀如初 资深大师 3033天前

    亲爱哒

      不好意思,刚刚才看到题

        S(1:m )是指:栈哒栈底为1,栈顶为m的意思

        在这个题目中,我们说:这个栈是倒压着哒(栈遵循哒原则是“先进后出”的原则(也就是先进去哒元素最后出来)

       栈的主要性质就是先进后出,就像叠碗一样,要把下面的碗拿掉,需先把上面的拿掉一样,如果你这样理解哒话,应该就好理解了。

        所以我们说:栈是倒压着哒

    这个题目,你想如果放了一个元素,那么TOP就等于m+1-1 =m

    放两个元素,Top就等于 m+1-2=m-1

    现在Top=20 也就是m-19 

    所以选C,也就是m-19而不是19

     也就是向上生长堆栈和向下生长堆栈之分

     根据题意,栈空间如图所示:


    巴巴爸爸.jpg

    也就是说,栈是向上增长的,每次压入一个元素,栈的TOP指针向上移动一位。

    当压入第一个元素时,TOP指针指向m+1-1 = m

    当压入第二个元素时,TOP指针指向m+1-2 = m-1

    ......

    以此类推,

    当压入第N个元素时,TOP指针指向m+1-N = 20

    则N = m+1-20 = m-19

    选C。

    亲爱哒,望采纳哟,如果还有不到哒问题我们还可以一起讨论哟,么么哒亲爱哒!

    仰望星空 脚踏实地 资深达人 3033天前

    回复 青栀如初:我还是不太理解,如果放进去一个元素的话,这个元素不就进入了1这个位置了吗?能在解释一下吗亲

    青栀如初 资深大师 3033天前

    回复 仰望星空 脚踏实地:亲爱哒,你要看在放进1个元素之前,栈哒栈顶是多少。如果在放进去一个元素之前哒栈底是0,那么此时这个元素就进入1这个位置了。那如果我要放进去这一个元素之前哒栈底是5呢,那么此时再放进去一个元素还能是在1这个位置了吗?显然就不是了。

    仰望星空 脚踏实地 资深达人 3033天前

    回复 青栀如初:那这道题的TOP=m+1,指的是栈底吗?还是

    仰望星空 脚踏实地 资深达人 3033天前

    回复 青栀如初:第一个疑问就是TOP=m+1指的是什么意思?还有就是这道题的栈底不是1吗,栈顶是m,怎么会出来m+1呢?第三个疑问就是这个开口问什么是向下的,怎么判断的呢?


    青栀如初 资深大师 3033天前

    回复 仰望星空 脚踏实地:嗯,是哒亲爱哒,因为题中写哒是“初始状态”也就是在我们放元素之前就已经有了。

    仰望星空 脚踏实地 资深达人 3033天前

    回复 青栀如初:我有些疑惑就是TOP=m+1指的是什么意思?还有就是这道题的栈底不是1吗,栈顶是m,怎么会出来m+1呢?第三个疑问就是这个开口问什么是向下的,怎么判断的呢?

    能分别解答一下吗

    青栀如初 资深大师 3033天前

    回复 仰望星空 脚踏实地:嗯是哒。

      (1)栈的栈底是m+1,

      (2)栈顶是20

      (3)栈的主要性质就是先进后出,就像叠碗一样,要把下面的碗拿掉,需先把上面的拿掉一样,所以我们说:栈是开口向下哒(也就是栈是倒压着哒,它们都是一样哒,即:栈哒元素是先进后出哒)如果你这样理解哒话,应该就好理解了。

    仰望星空 脚踏实地 资深达人 3033天前

    回复 青栀如初:恩我知道是先进后出,可是这和栈的开口向下有什么必然联系吗?讲课的视频中的开口就是向上的啊,也不违背先进后出的原则啊。所以能解释一下为什这道题的栈是开口向下的吗


    仰望星空 脚踏实地 资深达人 3033天前

    回复 青栀如初

    恩我知道是先进后出,可是这和栈的开口向下有什么必然联系吗?讲课的视频中的开口就是向上的啊,也不违背先进后出的原则啊。所以能解释一下为什这道题的栈是开口向下的吗

    亲,能解答一下我的疑惑吗?

    仰望星空 脚踏实地 资深达人 3032天前

    回复 青栀如初:亲,我想问一下,放入的元素会使指针一直向上移动是吧,那么最多就只能移动到1那个位置是吧?就已经封顶,不能再移动了是吧??

    青栀如初 资深大师 3032天前

    回复 仰望星空 脚踏实地:不好意思,亲爱哒刚刚才看到

      嗯,是对哒

    仰望星空 脚踏实地 资深达人 3014天前

    轻质如初回复 贺江:亲爱哒

      栈我们一般来说开口可以向上也可以向下的,这个是不受影响的,开口向上或者向下是取决于我们如何去画图(所以我们说:栈开口向上或者向下是针对栈的画图的开口而定的)

      但是我们需要与栈是倒压着的区分清楚,我们说:栈中所有元素进出栈的顺序都是“先进后出”的所以我们说:栈是倒压着的(这里指的是栈中元素的进出栈的运动状态

      亲爱哒,这两个我们在栈的学习时还是要进行理解区分记忆哒, 亲爱哒“望采纳哟!”如果以后还有什么不懂哒问题我们还可以一起讨论哟,相信我们一定会把问题解决哒,么么哒亲爱哒!


您还没有登录,所以不能回复该问题
我要回复

  • 0

    点赞

  • 扫一扫分享朋友圈

    二维码

  • 分享

相关问题