栈——链栈
链栈
 链栈是一种特殊的线性链表,使使用链式存储结构的栈,链栈也有栈顶栈底,同样是一种后进先出(LIFO)的数据结构
链栈定义
 链栈需要定义两个结构体,LinkStackNode 用来定义链栈节点的类型,存放节点的数据和下一节点的 next 指针
 LinkStack 结构体用来定义链栈的结构,存放 top 栈顶指针和链栈的总长度
| 1 | typedef struct LinkStackNode { | 
创建链栈
 创建链栈的过程就是定义 LinkStack 变量并为其分配内存,再让栈顶指针指空,栈的长度归 0
| 1 | LinkStack * CreateStack() { | 
判断栈是否为空
| 1 | int IsEmpty(LinkStack *p) { | 
入栈
 因为栈的本质是一种后入先出的数据结构,所以所有的操作都要在栈顶进行。入栈操作即定义新的 LinkStackNode 并为其分配内存,给他的数据域赋值,使新节点的 next 指向原栈顶处的节点,在使新入节点成为新的栈顶结点,栈的长度 +1
| 1 | LinkStack *PushStack(LinkStack *p, int d) { | 
出栈
 出栈需要先判断栈是否为空,再将栈顶指针指向原栈顶节点的 next,释放原栈顶节点的内存,栈的长度 -1
| 1 | LinkStack *PopStack(LinkStack *p) { | 
打印栈
 打印栈同样先检测栈是否为空,然后在遍历栈的同时打印每个节点的数据
| 1 | int ShowStack(LinkStack *p) { |