
1. 栈
1.1 栈的定义及结构
栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出(LIFO, Last In First Out)的原则。
- 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
- 出栈:栈的删除操作叫做出栈。出数据也在栈顶。
总结:栈是一个后进先出的容器。一个入栈序列可以对应多个出栈序列。
1.2 栈的实现
分析:顺序表和链表均可实现栈,但顺序表在一端操作更为方便,因此选择顺序表来实现栈。
大体思想如下:

顺序表已实现过动态增容,用其实现栈需注意细节。以下是头文件声明:
typedef int StackDataType;
typedef struct Stack {
StackDataType* _Array;
int _top;
int _capacity;
} Stack;
// 栈初始化
void StackInit(Stack* s);
// 销毁栈
void StackDestory(Stack* s);
// 入栈
void StackPush(Stack* s, StackDataType x);
// 出栈
void StackPop(Stack* s);
// 获取栈顶元素
StackDataType StackTop(Stack* s);
// 获取栈有效元素个数
int StackSize;
;


