关于进栈的书上的一个小问题

[复制链接]
查看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的位置也超出了空间分配的范围了。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行