栈:是运算受限的线性表,这种线性表上的插入和删除运算限定在表的某一端进行。
允许进行插入和删除的一端称为栈顶,另一端称为栈低。
不含任何数据元素的栈称为空栈,处于栈顶位置的数据元素称为栈顶元素。
栈的修改原则是后进先出(Last In First Out ),因此,栈又称为后进先出线性表
栈的基本运算:
(1)初始化InitStack(S):构造一个空栈S:
(2) 判栈空EmptyStack(S):若栈S为空栈,则结果为1,否则结果为0;
(3)进栈Push(S,x):将元素x插入栈S中,使x 成为栈顶元素;
(4)出栈Pop(S):删除栈顶元素;
(5)取栈顶GetTop(S):返回栈顶元素;
栈的顺序实现
栈的顺序存储结构是用一组连续的存储单元依次存放栈中的每一个元素,并用始端作为栈底。
栈的顺序实现称为顺序栈。
顺序栈用类C语言定义如下:
const int maxsize=6;typedef struct seqstack{ DataType data[maxsize]; int top;}SeqStk;
1.初始化
int InitStack(SeqStk *stk){ stk->top=0; return 1;}
2.判栈空
int EmptyStack(SeqStk *stk){ if(stk->top==0) return 1; else return 0;}
3.进栈
int Push(SeqStk *stk, DataType x){ if(stk->top==maxsize-1) { error("栈已满"); return 0; } else { stk->top++; stk->data[stk->top)=x; return 1; }}
- 出栈
int Pop(SeqStk *stk){ if(EmptyStack(stk)) { error(""); return 0; } else { stk->top--; return 1; }}
- 取栈顶元素
DataType GetTop(SeqStk *stk){//取栈顶数据元素,栈顶数据元素通过参数返回 if(EmptyStack(stk) return NULLData;//栈空,返回NULLDdta else return stk->data[stk->top]; //返回栈顶数据元素}
const int max=40;typedef struct Dbstack{ DataType data[max]; int top1,top2;}DbStk;;