设栈的顺序存储空间为S(1:m),初始状态为TOP=m+1。现经过一系列入栈与退栈运算后,TOP=

设栈的顺序存储空间为S(1:m),初始状态为TOP=m+1。现经过一系列入栈与退栈运算后,TOP=20,则当前栈中的元素个数为(C)

A) 30 B)20 C)m-19 D)m-20
我想不明白为什么是C,求详细的简单的讲解,我只是刚学,栈的知识仅限于知道它的定义,栈顶和栈底,和基本运算

这个栈是从栈顶向栈底压的,所以结果是C。追问

从栈顶压向栈底是什么意思?怎么压的?

追答

就是倒着压

一般平时是从栈底向栈顶压,这道题目中是倒过来的

追问

那是不是从栈底到栈顶20之间没有元素?

追答

是的

追问

天啊,终于明白了,另外还想问一个问题,为什么是m-19,不是m-20呢?

追答

TOP最开始是m+1,现在是20,因此元素个数是m+1-20,即m-19。

追问

不,问错了,为什么不是m-18,就是m+1-20+1

追答

20+1是什么意思?

追问

就是,比如0-10有11个元素,所以我认为要加一个1

追答

如果是0到10也只有10个元素,栈顶是不存储元素值的,只有0到9的位置有元素。

追问

顺序栈和链栈都是这样吗?

追答

链栈不是这样计算的,链栈的位置一般不是连续的。

追问

不连续是不是意味着链栈不能像顺序栈这样简单的加减?

追答

我之前说错了一个地方,栈顶的位置是存储元素的。

链栈不能像顺序栈这样加减。

追问

是的话为什么不加1呢?

追答

因为TOP开始是m+1,现在是20,因此两者之差的绝对值就是元素个数。
就像从0开始,最开始TOP=bottom-1,即TOP=-1,现在是TOP=10,两者之差的绝对值就是元素个数即11。

你说的要加1,是m-20+1。

如果是考试,你这里可以这样:
把m看成一个确切的数字,比如m=23,那么一开始时,TOP=24,现在TOP=20,这之间就可以简单的数出来有4个元数,对照一下答案,就选C了。

追问

哦哦,我大致明白了,谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-30
我也是刚学,我也想问。是不是这样:假设栈中元素为x,因为初始时TOP=m+1,之后TOP=20,所以m+1-x=20,解得x=m-19??
第2个回答  2015-02-09
top是指向最后一个元素上面的那个,所以是m+1追问

我是想问怎么算成C答案的

第3个回答  2020-02-11
我知道你追问的疑惑点在哪里了,我和你一样也是这里不懂。后来画一下就知道了,压进去的元素个数就是top指针移动的次数,比如从61移动到40,移动了21次所以有21个元素压进去了,但是61到40一共是有22个位置的,因为刚开始top位置是没有元素的,所以最终有的元素个数还是21。
第4个回答  2015-02-09
我来看答案的
相似回答