栈
什么是栈
栈,stack,是限定在表的一端进行插入和删除预算的线性表
通常,将删除与插入的一端称为栈顶,每次退栈(即删除一个元素)的必是最后一个进栈的元素,而第一个进栈的元素必然是最后一个退栈的。即在栈中,元素具有先进后出,后进先出的特点,故把栈也称为先进后出的线性表,LIFO表(Last in first out).
栈的顺序存储结构
- 栈的顺序存储也称为顺序栈,是分配一段连续的空间。类似于顺序表的定义,顺序栈也可以通过数组实现。因为栈底是不变的,可以把栈底设为数组的最低端,即下标为0的位置。因为栈顶位置是随着进栈、退栈而动态变化的,故可以设置一个整形变量top标识当前栈顶的位置,通常称top为栈顶指针。
- 置空栈:top=-1,因为此时栈中无元素,不指向第一个;
- 判断栈是否为空:top=-1;
- 判断栈是否为满:top+1=(size)栈的深度;
- 进栈:栈不满 !!! S[++top]=元素;
- 出栈:栈不为空 !!! returnS[top–];
- 取出栈顶: 栈不为空 !!! returnS[stop]
栈的链式存储结构及基本操作
- 链栈的每个节点的地址是不连续的,只需要一个栈顶指针head即可。将head改为top.链表的头插法就是典型的链栈。由此可知链栈每个节点都包含一个数据域和一个指针域。
- 判断栈空:top==null;
- 进栈:申请新节点,将新节点的指针指向旧栈顶的指针域,将top等于新指针,returnS[top]
- 退栈:栈不为空 !!! 返回栈顶元素,将栈顶指针指向下一个元素返回给top即可。
- 取栈顶元素:根据top返回即可
注意:
不论是链栈还是顺序栈入栈时都必须判断栈是否为满,出栈都必须判断栈是否为空!!!
不论是链栈还是顺序栈入栈时都必须判断栈是否为满,出栈都必须判断栈是否为空!!!
不论是链栈还是顺序栈入栈时都必须判断栈是否为满,出栈都必须判断栈是否为空!!!