关于链栈代码的几个问题
#include<stdio.h>#include<stdlib.h>
#define m 10
#define stack_init_size 100
#define stackincrement 10
typedef struct
{
int x, y;
int dir;
}elemtype;
typedef struct stacknode
{
elemtype *base; /*书上的链栈是有data和next,指针top
elemtype *top; 这种写法没看过。另外,链栈应该不用长度吧,为什么要加个
int stacksize; stacksize呢?*/
}sqstack;
int initstack(sqstack *s)
{
s->base=(elemtype *)malloc(stack_init_size*sizeof(elemtype)); /*我记得在给链栈申请内存的时候要对next域进行
if(!s->base)//这个条件我不明白 赋值才能得到连续的内存,但是这里如何解释?*/
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->top=s->base;
s->stacksize=stack_init_size;
return 1;
}
int push(sqstack *s,elemtype e)
{
if(s->top-s->base>=s->stacksize)/*指针可以相加?*/
{
s->base = (elemtype *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(elemtype));
if (!s->base)
{
printf("memory allocation failed,goodbye");
exit(1);
}
s->top = s->base+s->stacksize;
s->stacksize += stackincrement;
}
*s->top++=e;
return 1;
}
int pop(sqstack *s,elemtype *e)
{
if(s->top==s->base)
return 0;
*e=*--s->top; /* 出栈的时候不是先读取数据,再令top指针指向下一个吗?
return 1; 这里面怎么会是先--再读取数据呢?而且这种写法也不明白*/
}
最好能给以上代码的栈初始化,入栈,出栈的大致流程说明一下 谢谢