为什么静态栈中的top整型可以叫做指针呢?(C语言数据结构)

理解静态栈中的top指针

对于顺序静态栈定义代码:

typedef struct Stack
{
int s[10];
int top;
} stack;

在C语言数据结构教材中常提到 : top指针,但是在top指针里面存放的是一个整型数据,需要注意的是,此指针而非C语言里面的指针,C语言中的指针是存放的指向下一个数据元素的地址。

在栈式存储中,定义的结构体类型在内存中的分配是这样的:
在这里插入图片描述
如上图的内存分配:top是一个整型的变量,里面存放的是整型值,而非地址,但是为什么在数据结构中还是叫它top指针呢?
首先先来思考一个问题:栈是怎么一步步的向里面存放数据的的呢?在顺序静态栈中的定义上,提前固定了数组的大小, 初始的时候,我们先要使数组的角标为 0,然后向S[ 0 ]进行赋值,之后再使数组的角标加 1,然后向 S[ 1 ]输入数据,依次如此向下进行。直到输入至角标为 9 时,此时为S[ 9 ],栈满。
说了这么多有啥用呢。。你品,你细品;难道top不就是像极了角标吗?
在栈的初始化中代码描述不是这样的吗:

void Initiazation (stack &S)
{
S.top=0;
}
我们对栈中的 top 变量进行了初始化,每当我们向栈中第一次添加数据时,只需要使用 数组名[ S.top ]=添加的数据,也就是S. s[ S.top ]=数据,然后再使 S.top++;如此就可以依次向下继续添加数据,直到栈满;
在内存中top的变化是这样的:

在这里插入图片描述

但是呢,可以这么理解top: top=0时,对应的数组角标为0;也就可以理解为:top=0时指向角标为0的数组,如果向栈中添加数据,只需要向角标为top值的数组添加数据即可;换言之:top就是能够使数组依次添加数据的中间量,每一次添加数据,都使用top值作为数组的角标,进行数据的添加,所以top值对应着为相同角标的数组位置,故而有着top指针的称谓。

再来看一下压栈代码:

  void PushStack (stack &S,int e)
   { 
         S.s[S.top]=e;  //先向top所指向的数组进行赋值,值为e;
         S.top++;       //再使top值加1,使其指向下一个数组位置
   }

所以这样的解释,应该很好理解“为什么栈中的top是整型数值,但还是把它叫做指针了吧。。。”

  • 30
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值