Status Push( SqStack &S, SElemType 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;
}
S.base指向已经扩展了STACKINCREMENT个元素的栈底,是吗?
追答根据S.base的名称看,指向的是新栈的“栈底”。这些语句应该是在“初始化”或者“扩展”栈的时候使用,因此,栈底更容易操作。
另外,由于这个栈是用malloc()或realloc()所获取的连续空间,无论所指是栈底或者栈顶,都可以根据元素所在的“索引”,根据简单的加减(对应栈的push()或pop()),定位到所要的位置。
...S.stacksize+STACKINCREMENT)*sizeof(SElemType));是什么意思?_百...
S.base =(SElemType*) realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(SElemType));这条语句,是“重新分配空间”。原先由S.base所指向的空间,只容纳S.stacksize个元素。重新分配空间之后,可以容纳“S.stacksize+STACKINCREMENT”个元素,就是新拓展了STACKINCREMENT个元素的空间。每个元素占据S...
数值后的错误后缀
Status Push(SqStack &S,SElemType 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;}...
请写出顺序栈的入栈函数,即往栈中插入元素e为新的栈顶元素
Copy code \/\/ SqStack的顺序栈入栈函数,将元素e压入栈顶 function Push(S, e) { \/\/ 判断栈是否已满,如果已满则需要扩展栈的存储空间 if (S.top - S.base >= S.stacksize) { S.base = (SElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));if (!...
拓扑排序
S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 1;}\/\/InitStack int Push(SqStack&S,SElemType e){ if((S.top-S.base)>=S.stacksize){ S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base) exit(-1);S.top=S.base+S.stacksize;...
栈满,追加存储空间的问题。
S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));则S.base指向新申请到的内存地址,原base地址丢失。也就是说,你通过malloc函数申请的空间是操作系统分配的,不能通过指定起始地址来分配。应该用realloc函数,此函数原型:void *realloc(void *mem_address, unsigned int newsize)...
求波兰表达式的c++程序 要快!!!
e = *(S.top-1);return e;}Status Push (SqStack &S,ElemType e){\/\/插入元素e为新的栈顶元素if (S.top - S.base >= S.stacksize){S.base = (ElemType *) realloc ( S.base,(S.stacksize + STACKINCREMENT) * sizeof(ElemType));if(!S.base) exit (OVERFLOW);S.top = S.base + S....
迷宫求解
S->base=(SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) { printf("重新申请空间失败.\\n"); exit(0); } S->top=S->base+S->stacksize;\/\/更改栈顶指针 S->stacksize+=STACKINCREMENT; } ...
求一个语法分析器
s.top = s.base;s.stacksize = STACK_INIT_SIZE;}void Push(SqStack &s, char c) { \/\/入栈if(s.top - s.base >= s.stacksize) { \/\/栈满,追加存储空间s.base = (char *)realloc(s.base,(s.stacksize + STACKINCREMENT) * sizeof(char));if(!s.base) Exit(); \/\/存储分配失败s.top ...
表达式求值怎样用二叉数构建
Status Push(SqStack1 &S,char e){ \/\/插入元素e为新的栈顶元素 if(S.top-S.base>=S.stacksize){ \/\/栈满,追加储存空间 S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); if(!S.base)exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } ...
怎样用c语言编一个简单的计算器?
Status Push(SqStack1 &S,char e){ \/\/插入元素e为新的栈顶元素 if(S.top-S.base>=S.stacksize){ \/\/栈满,追加储存空间 S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); if(!S.base)exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } ...