1.栈的定义
栈
(stack)是限定仅在标尾进行插入和删除操作的线性表。
我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。栈又称为后进先出
(Last In First Out)的线性表简称LIFO结构
很多软件比如 Word,Photoshop等文档或图像编辑软件中都有撤销(undo)的操作,也就是用栈的方式来实现的。
栈
的插入操作,叫做进栈,也称压栈,入栈。
栈
的删除操作,叫做出栈,也有的叫做弹栈。
进栈出栈的变化形式
- 1,2,3 进 =》 3,2,1出
- 1进,1出;2进,2出,3进,3出
- 1进,2进,2出,1出,3进,3出
- 1进,1出,2进,3进,3出,2出
- 1进,2进,2出,3进,3出,1出
栈的抽象数据类型
InitStack(*S):初始化操作,建立一个空栈
DestoryStack(*S):弱栈存在,销毁栈
ClearStack(*S):将栈清空
StackEmpty(S):若栈为空,返回True,否则返回false
GetTop(S,*e):弱栈存在且为非空,用e返回S的栈顶元素
Push(*S,e):若栈S存在,插入新元素e到栈S中并成为栈底元素
Pop(*S,*e):删除栈S中栈顶元素,并用e返回元素
StackLength(S):返回栈S的元素个数
栈的顺序存储结构及实现
栈的顺序存储结构
下标为0的一端作为栈底,因为首元素都存在栈底,因为首元素都存在栈底,变化小,所以让它作栈底。若存储栈的长度为StackSize,则栈顶位置top必须小于StackSize.当栈存在一个元素是,top等于0,因此常用-1判定条件为top等于-1
对栈操作
Java 中使用LinkedList来模拟栈的操作其中提供了以下方法
addFirst
removeFirst();
addLast();
removeLast();
在栈中,push为入栈操作,pop为出栈操作。
Push用addFirst(),pop用removeFirst(),实现后进先出
用isEmpty() 其父类的方法,判断栈是否为空
用Java来实现栈
public class MyStack{ //定义一个栈类
int[] array; //用int数组来保存数据,根据需要可以更换类型
int s_size; //定义一个游标。
public MyStack(int i){ //定义一个带参数