关于数据结构栈的问题

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 1 //栈存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef int Status; //函数类型
typedef int SElemType; //数据元素类型

typedef struct
{
SElemType *top;
SElemType *base;
SElemType stacksize;
}SqStack;

//栈的创建
Status CreatStack(SqStack &s)
{
s.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base) exit(OVERFLOW);
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
return OK;
}

//压栈操作
Status Push(SqStack &s,SElemType e)
{
if(s.top - s.base >= s.stacksize)
//栈满,追加空间
{
printf("满了");
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;
s.top++;
return OK;
}
在这段代码的压栈操作中,为什么我把if(s.top - s.base >= s.stacksize)
//栈满,追加空间
{
printf("满了");
s.base = (SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));删了也能无限的入栈?top指针在空间满了之后继续入栈,它是指到哪去了?

当然是放在s.base之后的空间,由于没有重新分配s.base,因此s.base之后的空间可能会被占用,这时就会出错,如碰巧没被占用,则程序看似正常运行。追问

也就是说栈满了之后存的数已经不属于这个栈了,但碰巧栈之外的空间没有东西也可以存东西吗?

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网