#include "Stack.h"
//栈结构的初始化
void StackInit(ST *ps)
{
assert(ps);
//初始化一般先置为 0
ps->top = 0;
ps->a = NULL;
ps->capacity = 0;
}
//栈的销毁
void StackDestroy(ST *ps)
{
assert(ps);
free(ps->a);
ps->capacity = 0;
ps->top = 0;
}
//入栈 *** 作
void StackPush(ST *ps , DataType x)
{
if (ps->top == ps->capacity)//在进行入栈 *** 作时栈已经满了的情况
{
int newcapacity = ps->capacity == 0 ? 4 : (ps->capacity) * 2;//注意 ==
DataType *tmp = realloc(ps->a, sizeof(DataType)*newcapacity);
//之所以tmp的类型是DataType,是因为 ps->a 的类型
if (tmp == NULL)//realloc函数为其内存分配失败
{
printf("realloc fail\n");
exit(-1);
}
ps->a = tmp;//最终还是要将其值赋给 a
ps->capacity = newcapacity;
}
//栈没有满的情况下
ps->a[ps->top] = x;//top此时在数组上表示为数组连续元素的末端,数组首元素为a[0]
ps->top++;
}
//出栈 *** 作
DataType StackPop(ST *ps)
{
assert(ps);
assert(!StackEmpty(ps));//检查是否随着多次的出栈 *** 作导致空栈
return ps->a[ps->top - 1];//返回的值是栈中最后一个元素的值
}
//判断栈是否为空
bool StackEmpty(ST *ps)
{
if (ps->top > 0)
{
return false;//表明不为空
}
else
{
return true;//表明栈为空
}
/*
法二:
return ps->top == 0;
*/
}
//返回栈中数据个数的函数
int StackSize(ST *ps)
{
assert(ps);
return ps->top;
}
//注意:
栈结构是不能遍历的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)