栈
基本概念
栈是一种特殊的线性表,它所有的插入和删除都限制在表的同一端及逆行,表重允许进行插入、删除操作的一端叫做栈的顶,表中的另一端叫做栈的底,当栈中没有元素时,称之为空栈,栈的插入运算通常称为进栈或入栈,栈的删除运算通常称为退栈或出栈。
抽象数据结构
1 | ADT Stack is |
栈的顺序实现
用顺序的方式表示栈时,栈的类型可定义如下:
1 | struct SeqStack{/*顺序栈类型定义*/ |
由于栈是一个动态结构,而数组是静态结构,因此会出现溢出问题。当栈中已经有MAXNUM个元素时,如果再做进栈运算,则会产生溢出,通常称为上溢(overflow),而对空栈进行出栈运算时也会产生溢出,通常称为下溢(underflow)。
进栈运算
1 | void push_seq(PSeqStack pastack,DataType x) |
出栈运算
1 | void pop_seq(PSeqStack pastack) |
取栈顶元素
1 | DataType top_seq(PSeqStack pastack) |
链接表示
每个节点的结构可以定义如下:
1 | struct Node;/*单链表节点*/ |
创建空链接栈
1 | PLinkStack createEmptyStack_link(void) |
判断栈是否为空
1 | int isEmptyStack_link(PLinkStack plstack) |
进栈运算
1 | void push_link(PLinkStack plstack,DataType x) |
出栈运算
1 | void pop_link(PLinkStack plstack) |
取栈顶元素
1 | DataType top_link(PLinkStack plstack) |