一、栈的实现
头文件

源文件
1.栈的初始化
void StackInit(Stack* s)
{
assert(s);
s->a = NULL;
s->capacity = s->top = 0;
}
2.栈的销毁
void StackDestory(Stack* s)
{
assert(s);
free(s->a);
s->a = NULL;
s->capacity = s->top = 0;
}
3.栈顶的插入
void StackPush(Stack* s, STDataType x)
{
assert(s);
if (s->capacity == s->top)
{
int newcapacity = s->capacity == 0 ? 4 : s->capacity * 2;
STDataType* tmp = (STDataType*)realloc(s->a, sizeof(STDataType) * newcapacity);
if (tmp == NULL)
{
perror("realloc fail");
return;
}
s->a = tmp;
s->capacity = newcapacity;
}
s->a[s->top++] = x;
}
4.栈顶的删除
void StackPop(Stack* s)
{
assert(s);
assert(!StackEmpty(s));
s->top--;
}
5.取栈顶元素
STDataType StackTop(Stack* s)
{
assert(s);
assert(!StackEmpty(s));
return s->a[s->top - 1];
}
6.栈的大小
int StackSize(Stack* s)
{
assert(s);
return s->top;
}
7.判空
bool StackEmpty(Stack* s)
{
assert(s);
return s->top == 0;
}
二、队列的实现
头文件

源文件
