栈满时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;
}
...全文
633 点赞 收藏 5
写回复
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 的下个元素, 所以不存在“栈满时不就非法了”,这个问题。 入栈的话,你只要访问前,检测是否栈满,就没有问题了。 固定大小的堆栈的操作,安全的做法是: 入栈要检测是否栈满。 出栈要检测是否栈空。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告