4.用可动态分配的一维数组实现栈

来源:互联网 发布:vs2017 windows.h 编辑:程序博客网 时间:2024/04/26 04:33
#include<stdio.h>#include<stdlib.h>//用可动态分配的一维数组实现栈#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 0#define ERROR 1typedef int SElemType;typedef bool Status;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;// init stackStatus InitStack(SqStack &S){S.base = (SElemType *)malloc(sizeof(SElemType)*STACK_INIT_SIZE);if (!S.base) return ERROR;S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;}Status DestroyStack(SqStack &S){free (S.base);S.base = S.top = NULL;S.stacksize = 0;return OK;}Status ClearStack(SqStack &S){S.base = S.top = NULL;S.stacksize = 0;return OK;}Status StackEmpty(SqStack &S){return S.top == S.base;}Status StackLengh(SqStack &S){//return (S.top - S.base)/sizeof(SElemType);return S.top - S.base;}//pushStatus StackPush(SqStack &S,SElemType e){if (S.top - S.base >= S.stacksize){//栈满  申请空间S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));if (!S.base) return ERROR;S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++ = e;return OK;}//by zhaoyang 2014.4.16//popStatus StackPop(SqStack &S,SElemType &e){if (S.base == S.top) return ERROR;e = *--S.top;return OK;}//栈也存在链式表示  我就仅以  顺序栈(数组)  为例int main(){SqStack A;int e;InitStack(A);StackPush(A, 1);StackPop(A, e);printf("%d\n",e);return 0;}


0 0
原创粉丝点击