进栈:首先将数据元素保存到栈顶(top所指的当前位置),然后执行top加1,使top指向栈顶的下一个存储位置;
#include<stdio.h>
#include<math.h>
#define STACK_SIZE 100 /* 栈初始向量大小 */
#define STACKINCREMENT 10 /* 存储空间分配增量 */
#define OK 1
#define ERROR -1
typedef int Status ;
typedef int ElemType ;
typedef struct sqstack
{
ElemType *bottom; /* 栈不存在时值为NULL */
ElemType *top; /* 栈顶指针 */
int stacksize ; /* 当前已分配空间,以元素为单位 */
} SqStack ;
// 入栈
SqStack push(SqStack S , ElemType e){
// S.top代表栈顶,S.bottom代表栈底
if (S.top-S.bottom>=S. stacksize) {
/* 栈满,追加存储空间 */
// realloc():*realloc(void *ptr, size_t size),第一个参数为指针,第二个参数为大小
S.bottom=(ElemType *)realloc(S.bottom,(S.stacksize+STACKINCREMENT) *sizeof(ElemType));
// if (! S.bottom)
// return ERROR;
// 添加容量后栈顶的指针发生改变
S.top=S.bottom+S.stacksize ;
// 添加容量
S. stacksize+=STACKINCREMENT ;
}
// 每次结点进栈都是栈顶
*S.top=e; S.top++ ; /* 栈顶指针加1,e成为新的栈顶 */
return S;
}