Stack.h
#pragma once
#include <stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int STDatetype;
typedef struct Stack
{
int* a;
int top;
int capacity;
}ST;
void STInit(ST* ps);
void STDestory(ST* ps);
void STPush(ST* ps, STDatetype x);
void STPop(ST* ps);
int STSize(ST* ps);
bool STEmpty(ST* ps);
STDatetype STTop(ST* ps);
Stack.c
#include"Stack.h"
void STInit(ST* ps)
{
ps->a = (STDatetype*)malloc(sizeof(STDatetype) * 4);
if (ps->a == NULL)
{
perror("malloc fail");
return;
}
ps->top = 0;
ps->capacity =4;//top是栈顶元素的下一个位置
}
void STDestory(ST* ps)
{
assert(ps);
free(ps->a);
ps->a = NULL;
ps->top = 0;
ps->capacity = 0;
}
void STPush(ST* ps, STDatetype x)
{
assert(ps);
if (ps->top == ps->capacity)
{
STDatetype* tmp = (STDatetype*)realloc(ps->a, sizeof(STDatetype) * ps->capacity * 2);
if (tmp == NULL)
{
perror("realloc fail");
return;
}
ps->a = tmp;
ps->capacity *= 2;
}
ps->a[ps->top] = x;
ps->top++;
}
void STPop(ST* ps)
{
assert(ps);
assert(!STEmpty(ps));
ps->top--;
}
int STSize(ST* ps)
{
assert(ps);
return ps->top;
}
bool STEmpty(ST* ps)
{
assert(ps);
return ps->top==0;
}
STDatetype STTop(ST* ps)
{
assert(ps);
assert(!STEmpty(ps));
return ps->a[ps->top - 1];
}
test.c
#include"Stack.h"
void STTest01()
{
ST st;
STInit(&st);
STPush(&st, 1);
STPush(&st, 5);
STPush(&st, 3);
STPush(&st, 9);
while (!STEmpty(&st))
{
printf("%d\n", STTop(&st));
STPop(&st);
}
STDestory(&st);
}
int main(void)
{
STTest01();
return 0;
}