目录
栈有关概念
“栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。”
应为看栈,大家应该都学过了链表,所以栈就比较简单,在这里就不讲解,就直接给大家看实现的代码了!!!
创建栈
typedef int STDataType;
typedef struct strack
{
STDataType* a;
int top;
int capacity;
}ST;
这里使用了(typedef int SLTDataType;)这是为了到时栈里存的不是int类型,方便修改
栈的初始化
void StrackInit(ST* ps)
{
assert(ps);
ps->a = NULL;
ps->top = ps->capacity = 0;
}
栈的插入
void StrackPush(ST* ps, STDataType x)
{
assert(ps);
if (ps->top == ps->capacity)
{
int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
STDataType* tmp = (STDataType*)realloc(ps->a,sizeof(STDataType) * newcapacity);
if (tmp == NULL)
{
printf("realloc fail\n");
exit(-1);
}
ps->a = tmp;
ps->capacity = newcapacity;
}
ps->a[ps->top] = x;
ps->top++;
}
栈的删除
void StrackPop(ST* ps)
{
assert(ps);
assert(!StrackEmpty(ps));
ps->top--;
}
返回栈顶元素
STDataType StrackTop(ST* ps)
{
assert(ps);
assert(!StrackEmpty(ps));
return ps->a[ps->top - 1];
}
判断栈是否为空
bool StrackEmpty(ST* ps)
{
assert(ps);
return ps->top == 0;
}
栈中元素的个数
int StrackSize(ST* ps)
{
assert(ps);
return ps->top - 1;
}
栈的销毁
void StrackDestory(ST* ps)
{
assert(ps);
free(ps->a);
ps->a = NULL;
ps->top = ps->capacity = 0;
}