顺序栈的实现
//栈的顺序表示实现#include <stdio.h>#include <stdlib.h>//栈初始大小#define STACK_INIT_SIZE 100//栈的增长大小#define STACKINCREMENT 10#define OVERFLOW 0#define ERROR 0#define FALSE 0#define TRUE 1typedef int Status;typedef int SElemType;typedef int boolean;//栈的顺序定义typedef struct{SElemType *bese; //栈底指针,在栈构造之前和析构之后值都为NULLSElemType *top; //栈顶指针int stacksize; //栈的大小}Stack;//初始化栈Stack InitStack(){Stack S;S.bese = (SElemType *)malloc(sizeof(SElemType) * STACK_INIT_SIZE);if(!S.bese)exit(OVERFLOW);S.top = S.bese;S.stacksize = STACK_INIT_SIZE;return S;}//若栈不为空,则返回栈顶元素eStatus GetTop(Stack S){//判断是否为空栈if(S.bese == S.top)return ERROR;//非空栈的栈顶指针始终是在栈顶元素的下一个位置上return *(S.top - 1);}//入栈操作,若栈满,则增加存储空间Stack push(Stack S, SElemType e){//判断栈是否已经满if(S.top - S.bese >= STACK_INIT_SIZE){S.bese = (SElemType *)realloc(S.bese, sizeof(SElemType) * (S.stacksize + STACKINCREMENT));if(!S.bese)exit(OVERFLOW);S.top = S.bese + S.stacksize; //计算栈顶指针S.stacksize += STACKINCREMENT;}*S.top++ = e;return S;}//入栈操作Stack pop(Stack S){//空栈if(S.bese == S.top){printf("此栈是空栈!");return S;}S.top--;return S;}//销毁栈Stack DestoryStack(Stack S){S.bese = NULL;return S;}//清空栈中数据Stack ClearStack(Stack S){S.top = S.bese;return S;}//判断栈是否是空栈boolean StackEmpty(Stack S){if(S.bese == S.top)return TRUE;return FALSE;}//返回栈的长度int StackLength(Stack S){return S.top - S.bese;}int main(){//初始化栈Stack S = InitStack();for(int i = 0; i < 10; i++){S = push(S, i);}printf("栈的长度为:%d\n", StackLength(S));printf("栈顶元素为:%d\n", GetTop(S));S = pop(S);printf("出栈后:\n");printf("栈的长度为:%d\n", StackLength(S));printf("栈顶元素为:%d\n", GetTop(S));S = ClearStack(S);if(StackEmpty(S))printf("此栈是空栈");S = DestoryStack(S);return 0;}