初始化:
//初始化 void StackInit(ST* ps) { assert(ps); STDataType tmp = (STDataType)malloc(sizeof(STDataType)* 4); if (tmp == NULL) { assert(tmp); } ps->a = tmp; ps->capacity = 4; ps->top = 0; }
首先开辟了4个STDataType这么大的空间,如果开辟成功就把这个开辟空间的首地址赋给ps->a,ps->capacity记录当前空间的大小,ps->top栈中元素个数
销毁栈:
//销毁 void StackDestory(ST* ps) { assert(ps); free(ps->a); ps->a = NULL; ps->top = ps->capacity = 0; }
直接用free释放ps->a,然后让ps->a为NULL
让ps->top ps->capacity 记录元素个数和空间大小都改为0
入栈:
//在栈顶插入(入栈) void StackPush(ST* ps, STDataType x) { if (ps->top == ps->capacity) { STDataType tmp = realloc(ps->a, ps->capacity*sizeof(STDataType)* 2); if (tmp == NULL) { printf("realloc fail\n"); exit(-1); } else { ps->a = tmp; ps->capacity *= 2; } } ps->a[ps->top] = x; ps->top++; }
首先判断栈是否需要增容,然后进行插入
出栈:
//在栈顶删除(出栈) void StackPop(ST* ps) { assert(ps); //栈空了,调用Pop,直接中止程序 assert(ps->top); ps->top--; }
入栈、出栈都是从栈顶执行
取栈顶元素:
//取栈顶的数据 STDataType StackTop(ST* ps) { assert(ps); assert(ps->top > 0); return ps->a[ps->top - 1]; }
先判断栈中是否有数据,要是有直接返回栈顶,要是ps->top==0,那么ps->top就是栈顶
栈的元素:
//栈的元素 int StackSize(ST* ps) { assert(ps); return ps->top; }
ps->top就是栈中元素的个数,因为是按数组进行存储的下标从0开始,所以ps->top就是元素个数
判断栈是否为空:
//判断栈是否为空 bool StackEmpty(ST* ps) { assert(ps); return ps->top == 0; } ps->top==0它就代表着空