全部问题 > 当前问题

栈中元素不是栈顶减去栈底吗 为什么这道题还需要加1

审美疲劳` 2016-1-29 10:40:41

共 2 个回答

午后闪耀。 2016-1-29 10:42:06

加它本身。


青栀如初 2016-1-29 11:15:27

    亲爱哒

  不好意思,刚刚才看到题

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

 如:

栈底指向首元素的前一位置(比如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下面的位置。虽然换算之后结果都是一样的,但公式不要死记硬背,一定要结合题目来看,把题目弄明白才是关键】