全部问题 > 当前问题

为什么这题需要加1呢?

史佳怡 2016-2-5 21:25:45

共 1 个回答

最佳答案

青栀如初 2016-2-5 21:47:13

亲爱的

  不好意思,刚刚才看到问题

  由于我们是使用数组来存储栈的,所以"栈顶指针【当前的值】-栈底指针【当前的值】它们中间的差真好是栈里面有多少个元素【要特别注意是“当前的值”而不是一开始的值】

 如:

栈底指向首元素的前一位置(比如0),栈顶指针指向尾元素(比如5),即栈中1、2、3、4、5各存储了一个数据。

此时:【注意到了吗,是前一位,而不是首元素】

栈中元素个数=栈顶指针-栈底指针(比如5-0=5)

再比如:如果栈顶指针现在指向2,栈底指针现在指向的是0,那么他俩一相减,那么2-0=2,那么这个栈里真好是有2个元素,所以我们就求出栈里的元素了【但注意:这不是公式,因为在这个试子中我们是拿“0”作为栈底哒,然后用1--10来存储我们栈里面哒元素(“并且我们还让栈顶指针正好指向栈底元素”要特别注意)在这种情况下我们是可以直接用“栈中元素个数=栈顶指针-栈底指针”相减算出来哒。【但是:没有人规定栈底必须是“0”,我们也可以把“10”作为栈底,甚至我们可以把“11”作为栈底】

所以我们说【在真正考试哒时候遇到求栈里面有多少个元素哒时候,还是要具体问题具体分析,不能盲目哒套公式。也就是“我们需要结合栈底和栈顶的实际情况去计算求解”

   亲爱的,望采纳哟,如果以后还有什么不懂的问题我们还可以一起讨论哟,相信我们一定会把问题解决的!

问题来自:
设栈的顺序存储空间为S(0:49),栈底指针bottom=49,栈顶指针top=30(指向栈顶元素)。则栈中的元素个数为( )
A. 30
B. 29
C. 20
D. 19
答案:C
解析:设栈的顺序存储空间为S(0:49),栈底指针bottom=49,栈顶指针top=30(指向栈顶元素),那这个栈也应该是49在栈底,0在开口向上的,所以栈顶30是小于栈底的,则栈中元素=|栈顶-栈底|+1,则栈有20个元素。因此选择C。 【其实这个公式换算一下也是可以写成:元素数量=栈底-栈顶+1,或者写成:元素数量=栈底+1-栈顶,而这里的栈底+1,其实指向的就是栈底49下面的位置。虽然换算之后结果都是一样的,但公式不要死记硬背,一定要结合题目来看,把题目弄明白才是关键】