typedef struct Stack
{
ELEM_TYPE* base;
int top;
int stacksize;
}Stack, * PStack;
void Init_Stack(PStack ps);
bool Push(PStack ps, ELEM_TYPE val);
bool Pop(PStack ps, ELEM_TYPE* rtval);
bool Top(PStack ps, ELEM_TYPE* rtval);
int Get_Length(PStack ps);
bool IsEmpty(PStack ps);
bool IsFull(PStack ps);
void Inc(PStack ps);
void Clear(PStack ps);
void Destory(PStack ps);
void SHOW(PStack ps);`
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#include "stack.h"
void Init_Stack(PStack ps)
{
ps->base = (ELEM_TYPE*)malloc(INIT_SIZE * sizeof(ELEM_TYPE));
assert(ps->base != nullptr);
ps->top = 0;
ps->stacksize = INIT_SIZE;
}
bool Push(PStack ps, ELEM_TYPE val)
{
assert(ps != nullptr);
if (ps == NULL)
{
return false;
}
if (IsFull(ps))
{
Inc(ps);
}
ps->base[ps->top++] = val;
return true;
}
bool Pop(PStack ps, ELEM_TYPE* rtval)
{
if (IsEmpty(ps))
{
return false;
}
*rtval = ps->base[--ps->top];
return true;
}
bool Top(PStack ps, ELEM_TYPE* rtval)
{
if (IsEmpty(ps))
{
return false;
}
*rtval = ps->base[ps->top - 1];
return true;
}
int Get_Length(PStack ps)
{
return ps->top;
}
bool IsEmpty(PStack ps)
{
return ps->top == 0;
}
bool IsFull(PStack ps)
{
assert(ps != nullptr);
return ps->top = ps->stacksize;
}
void Inc(PStack ps)
{
ps->base = (ELEM_TYPE*)realloc(ps->base, sizeof(ELEM_TYPE) * ps->stacksize * 2);
assert(ps->base != nullptr);
ps->stacksize *= 2;
}
void Clear(PStack ps)
{
ps->top == 0;
}
void Destory(PStack ps)
{
free(ps->base);
ps->base = NULL;
ps->top = ps->stacksize = 0;
}
void SHOW(PStack ps)
{
for (int i = 0; i < ps->top; ++i)
{
printf("%d ", ps->base);
}
printf("\n");
}
int main()
{
Stack st;
Init_Stack(&st);
for (int i = 0; i < 20; ++i)
{
Push(&st, i + 1);
}
SHOW(&st);
printf("length = %d\n", Get_Length(&st));
ELEM_TYPE rtval;
bool tag = Top(&st, &rtval);
if (tag)
{
printf("top->%d\n", rtval);
}
ELEM_TYPE tmp;
bool tag2 = Pop(&st, &tmp);
if (tag2)
{
printf("pop->%d\n", tmp);
}
SHOW(&st);
printf("length = %d\n", Get_Length(&st));
return 0;
}