#include<stdio.h>
#include<stdlib.h>
//用可动态分配的一维数组实现栈
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 0
#define ERROR 1
typedef int SElemType;
typedef bool Status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
// init stack
Status 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;
}
//push
Status 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
//pop
Status 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;
}
4.用可动态分配的一维数组实现栈
最新推荐文章于 2020-03-20 17:48:51 发布