读书人

关于栈满的有关问题啊

发布时间: 2012-10-21 09:00:07 作者: rapoo

关于栈满的问题啊?
[code=C/C++][/code]
#include<stdio.h>
#include<stdlib.h>
#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 InitStack(SqStack & S)
{//构造一个空栈
S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}

int Push(SqStack &S,int e)
{//插入元素e为新的栈顶元素
if(S.top-S.base>=S.stacksize)//栈满,追加存储空间
{
S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);//存储空间分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}

*S.top++=e;
//S.top++;
return OK;

}


刚看栈不是很了解,想知道栈满的情况下,那个TOP指针指向哪里啊?她还忘下挪吗?上面的是从严的书上抄的?为什么上面栈满的条件判断里面包含了等于?不理解啊?if(S.top-S.base>=S.stacksize)//栈满,追加存储空间


[解决办法]
base不变
入栈出栈都是操作top
当top-base的值达到了栈大小时 就栈满了
至于你要== 还是 > 还是 >= 看你代码怎么写
就你贴的这个代码 实际上可以用 == 不需要>=, 但是>=也一样
你举个栈大小为1的例子就知道了 base也是要存放数据的.

读书人网 >C++

热点推荐