什么是栈?
栈是一种操作受限制的线性表,将允许进行插入、删除的一端称为栈顶,另一端称为栈底。我们可以从这个物理结构可以看出栈中的数据元素遵循后进先出.栈中允许插入,删除操作的为栈顶,另一端为栈底.。
栈的概念
因为栈是一种特殊的顺序表,因此与一般线性表一样,采用顺序存贮的方式来实现。及利用一组连续的存贮单元比如数组,依次放入从栈底到栈顶的数据元素,并且设置一个栈底指针top来表示栈顶元素的位置。我们可以定义一个顺序栈的结构类型:
typedef struct Stack
{
STDataType* _a;
int _top; // 栈顶
int _capacity; // 容量
}Stack;
检查栈是否满了
void CheckCapacity(Stack* ps) {
if (ps->size >= ps->capacity)
{
ps->capacity *= 2;
ps->array = (STDataType *)realloc(ps->array, ps->capacity * sizeof(STDataType));
}
}
初始化一个栈
```c
void StackInit(Stack* ps) {
ps->array = (STDataType *)calloc(DEFSTACKSIZE, sizeof(STDataType));
ps->capacity = DEFSTACKSIZE;
ps->size = 0;
}
数据元素入栈
void StackPush(Stack* ps, STDataType x) {
CheckCapacity(ps);
ps->array[ps->size] = x;
ps->size++;
}
数据元素出栈
STDataType StackTop(Stack* ps) {
if (ps->size == 0)
{
return (STDataType)0;
}
return ps->array[ps->size - 1];
}
栈的销毁
void StackDestory(Stack* ps) {
if (ps->array)
{
free(ps->array);
ps->array = NULL;
ps->size = 0;
ps->capacity = 0;