头文件
#pragma once
typedef int ElemType;
#define STACK_INIT_SIZE 10
#define STACKINCREMNT 5
typedef struct Stack
{
ElemType *base;
int top;
int stacksize;
}SqStack;
void InitStack(SqStack *st);
int EmptyStack(SqStack *st);
int PushStack(SqStack *st, ElemType val);
int GetTop(SqStack *st,ElemType *val);
int PopStack(SqStack *st,ElemType *val);
void ClearStack(SqStack *st);
void DestroyStack(SqStack *st);
cpp文件
#include “stack.h”
#include <assert.h>
#include<stdlib.h>
#include<stdio.h>
static void DeterPointNull(SqStack *st)
{
assert(st != NULL);
if(st == NULL)
{
exit(0);
}
}
static void ExpandSpace(SqStack *st)
{
ElemType s = (ElemType)malloc(sizeof(ElemType) * (st->stacksize + STACKINCREMNT ));
assert(s != NULL);
for(int i = 0; i < st->top; i++)
{
s[i] = st->base[i];
}
free(st->base);
st->base = s;
st->stacksize += STACKINCREMNT ;
}
void InitStack(SqStack *st)
{
DeterPointNull(st);
st->base = (ElemType *)malloc(sizeof(ElemType) * STACK_INIT_SIZE);
assert(st->base != NULL);
st->top = 0;
st->stacksize = STACK_INIT_SIZE ;
}
int EmptyStack(SqStack *st)
{
DeterPointNull(st);
if(st->top == 0)
{
return 1;
}
return 0;
}
int PushStack(SqStack *st,ElemType val)
{
DeterPointNull(st);
if(st->top == st->stacksize)
{
ExpandSpace(st);
}
st->base[st->top++] = val;
return 1;
}
int GetTop(SqStack *st,ElemType *val)
{
DeterPointNull(st);
if(EmptyStack(st))
{
return 0;
}
*val = st->base[st->top -1];
return 1;
}
int PopStack(SqStack *st,ElemType *val)
{
DeterPointNull(st);
if(!GetTop(st,val))
{
return 0;
}
st->top--;
return 1;
}
void ClearStack(SqStack *st)
{
DeterPointNull(st);
st->top = 0;
}
void DestroyStack(SqStack *st)
{
DeterPointNull(st);
free(st->base);
st->base = NULL;
st->top = st->stacksize;
}
主函数
#include<stdio.h>
#include “stack.h”
int main()
{
SqStack st;//
InitStack(&st);
//初始化完成之后 st->base指向一块malloc申请的空间 st->top == 0 st->stacksize = STACH_INI_SIZE;
PushStack(&st,10);
PushStack(&st,20);
PushStack(&st,30);
PushStack(&st,40);
PushStack(&st,50);
while(!EmptyStack(&st))
{
ElemType val;
PopStack(&st,&val);
printf("%d ",val);
}
printf("\n");
DestroyStack(&st);
return 0;
}