栈
1. 栈的应用场景
1子程序的调用:在调往主程序前,会先将下一个指令的地址存在堆栈中,直到子程序执行完成后将地址取出,回到原来的程序中
2处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数,区域变量等数据存入堆栈中
3表达式的转换与求值
4二叉树的遍历
5图的深度优先(depth -first)搜索算法
2. 栈的介绍
特点:
先入后出(FILO)First In Last OUT
栈是限制性表中的元素的插入和删除只能在一端进行操作的特殊线性表。变化的是栈顶(Top),固定的一端是栈底(Bottom)
入栈演示
出栈演示
3. 代码实现
数据结构:
private Node bottom ;
private int maxSize ;
public Stack(){
maxSize = 0;
bottom = list.getHeadNode();
}
1.判空
public boolean isEmpty(){
return bottom.nextNode==null;
}
2入栈
public void push(){
System.out.println("请输入栈元素的信息:");
int num =sc.nextInt();
Node node = new Node(num);
list.addNode(node);
maxSize++;
}
4.出栈
public void pop(){
if (isEmpty()){
System.out.println("栈空");
return;
}
Node firstNode = list.getHeadNode().nextNode; //获取双列表的头节点
for (;firstNode.nextNode!=null; firstNode =firstNode.nextNode);
System.out.println(firstNode.no);
list.deleteNode(maxSize);//调用双列表中删除节点的方法
maxSize--;
}