栈满时top指针在哪里(问题在图片里)

higurasikagome 2013-11-23 10:50:20

Status Push(SqStack *S,SElemType e)
{ /* 插入元素e为新的栈顶元素 */
if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空间 */
{
(*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败 */
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
...全文
1937 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Adol1111 2013-11-23
  • 打赏
  • 举报
回复
引用 2 楼 qq921965140 的回复:
[quote=引用 1 楼 lm_whales 的回复:] 看实现。 你可以任意处理。 大概有这么两种方式: 1)初始化为第一个元素,则满时顶在栈外 2)初始化为下一个元素是第一个元素,则满时顶在最后一个元素。 估计多半都是第一种方式。
我看的是严蔚敏老师的书,上面说栈顶指针指向栈顶元素的下一个位置,如图,栈满时不就非法了吗?[/quote] 你不去用这个栈顶指针访问里面的数据就可以了。你应该判断下这个指针是否超过了有效地址,超过了就是栈满。
higurasikagome 2013-11-23
  • 打赏
  • 举报
回复
引用 1 楼 lm_whales 的回复:
看实现。 你可以任意处理。 大概有这么两种方式: 1)初始化为第一个元素,则满时顶在栈外 2)初始化为下一个元素是第一个元素,则满时顶在最后一个元素。 估计多半都是第一种方式。
我看的是严蔚敏老师的书,上面说栈顶指针指向栈顶元素的下一个位置,如图,栈满时不就非法了吗?
lm_whales 2013-11-23
  • 打赏
  • 举报
回复
看实现。 你可以任意处理。 大概有这么两种方式: 1)初始化为第一个元素,则满时顶在栈外 2)初始化为下一个元素是第一个元素,则满时顶在最后一个元素。 估计多半都是第一种方式。
lm_whales 2013-11-23
  • 打赏
  • 举报
回复
抱歉 “都是top 的下个元素” 有点问题 应该是: “都是top 的前一个元素。”
lm_whales 2013-11-23
  • 打赏
  • 举报
回复
引用 3 楼 Adol1111 的回复:
[quote=引用 2 楼 qq921965140 的回复:] [quote=引用 1 楼 lm_whales 的回复:] 看实现。 你可以任意处理。 大概有这么两种方式: 1)初始化为第一个元素,则满时顶在栈外 2)初始化为下一个元素是第一个元素,则满时顶在最后一个元素。 估计多半都是第一种方式。
我看的是严蔚敏老师的书,上面说栈顶指针指向栈顶元素的下一个位置,如图,栈满时不就非法了吗?[/quote] 你不去用这个栈顶指针访问里面的数据就可以了。你应该判断下这个指针是否超过了有效地址,超过了就是栈满。[/quote] ++ 这种情况下,无论栈满不满,你访问栈顶元素,都是top 的下个元素, 所以不存在“栈满时不就非法了”,这个问题。 入栈的话,你只要访问前,检测是否栈满,就没有问题了。 固定大小的堆栈的操作,安全的做法是: 入栈要检测是否栈满。 出栈要检测是否栈空。

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧