栈的ADT
栈是有限制的线性结构,即元素要遵照后进先出(LIFO)的原则进出栈。
栈的主要操作有进栈(Push),出栈(Pop),判空(IsEmpty)等。
栈可由顺序结构或者链式结构实现。
栈的链式结构实现
// stack.h声明栈的结构和部分操作
#ifndef DS_LINK_STACK_H
#define DS_LINK_STACK_H
// a link stack
typedef char DataType;
struct StackNode;
typedef struct StackNode StackNode;
typedef struct StackNode *Stack;
// return an empty stack
Stack CreateStack(void);
// return 1 if the stack is empty, otherwise return 0
int IsEmptyStack(const Stack stack);
// push the data on the top
void Push(Stack stack, DataType data);
// return the top data
DataType Pop(Sta