定义
栈(stack)是一个后进先出的线性表,它只能在表尾进行删除和插入操作,对于栈来说表尾是栈顶,表头是栈底。
栈的顺序存储结构
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
创建栈
#define STACK_INIT_SIZE 100
initStack(sqStack *s)
{
s->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if (!s->base)
exit(0);
s->top = s->base;//最开始栈底就是栈顶
s->stackSize = STACK_INIT_SIZE ;
}
清空栈
所谓清空一个栈,就是将栈中的元素全部作废,但栈本身物理空间并不发生改变。因此我们只要将s->top的内容赋值给s->base,这也就表示这个栈是空的了。不想销毁一个栈。
ClearStack(sqStack *s)
{
s->top = s->base;
}
销毁栈
DestroyStack(sqStack *s)
{
int i, len;
len = s->stackSize;
for (i = 0;i<len;i++)
{
free(s->base);
s->base++;
}
s->base = s->top = NULL;
s->stackSize = 0;
}
计算栈的当前容量
计算栈的当前容量就是计算栈中的元素的个数,只需要返回s.top-s.base就可以了。
“`
int StackLen(sqStack s)
{
return(s.top-s.base);
}
输入参数(sqStack s)和(sqStack *s)的区别
若函数中并不对输入的结构做修改,那么传入s,反之若是要修改结构中的成员那么要传入*s。而且传入s的时候用s.top调用成员,出入*s的时候用s->top调用成员。