设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
关于进栈的书上的一个小问题
返回列表
发新帖
关于进栈的书上的一个小问题
[复制链接]
11
|
1
|
2011-7-4 11:03:32
|
显示全部楼层
|
阅读模式
#include
#include
#define STACK_INIT_SIZE 100 //
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct stack{
int *base;
int *top;
int stacksize;
}SqStack;
int Push(SqStack &S,int e)
{//插入元素e为新的栈顶元素
if(S.top-S.base>=S.stacksize)//栈满,追加存储空间
{
S.base=(int *)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);//存储空间分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
//S.top++;
return OK;
}
在这个PUSH函数是从严蔚敏的书上抄下来的,我怎么感觉这个函数有点不对啊?
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
觉得这两句的顺序应该调换一下,如果不调换的话,我怎么感觉S。top的位置还是以前的位置啊?不知道自己的想法对不对?
回复
使用道具
举报
千问
|
2011-7-4 11:03:32
|
显示全部楼层
可能是理解上的问题。其实原来top的位置是S.top=S.base+S.stacksize-1;这表示栈已经满了。然后重新分配空间,将top的位置向下移动意味变成S.top=S.base+S.stacksize;所以其位置发生变化了。如果像你想的那样,中间会空出大量的空间是没有存储任何元素的,而且top的位置也超出了空间分配的范围了。...
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行