本章学习目录
一,栈的介绍
- 栈:(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
- 特点:先进后出
- 入栈(push):
- 出栈(pop):
- 栈的应用场景:
- 子程序的调用:在跳往子程序之前,会先将下一个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中;
- 处理递归调用:类似于子程序的调用,只不过除了存储下一条指令的地址外,也将参数,区域变量,等数据存入堆栈中;
- 表达式的转换;
- 二叉树的遍历;
- 图形的深度优先搜索法;
二,栈的主体
package com.栈;
public class ArrayStack {
private int maxSize;
private int[] stack;
private int top = -1;
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[this.maxSize];
}
}
三,栈满和栈空的判断
public boolean isFull(){
return maxSize-1==top;
}
public boolean isEmpty(){
return top==-1;
}
四,入栈和出栈的操作
public void push(int value){
if (isFull()){
throw new StackOverflowError("栈满");
}
top++;
stack[top]=value;
}
public int pop(){
if (isEmpty()){
throw new RuntimeException("空栈");
}
int value = stack[top];
top--;
return value;
}
五,遍历栈
public void Stacklist(){
if (isEmpty()){
System.out.println("栈空");
}
for (int i=top;i>=0;i--){
System.out.println("stack["+i+"]="+stack[i]);
}
}
六,整体流程
package com.栈;
public class ArrayStack {
private int maxSize;
private int[] stack;
private int top = -1;
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[this.maxSize];
}
public boolean isFull(){
return maxSize-1==top;
}
public boolean isEmpty(){
return top==-1;
}
public void push(int value){
if (isFull()){
throw new StackOverflowError("栈满");
}
top++;
stack[top]=value;
}
public int pop(){
if (isEmpty()){
throw new RuntimeException("空栈");
}
int value = stack[top];
top--;
return value;
}
public void Stacklist(){
if (isEmpty()){
System.out.println("栈空");
}
for (int i=top;i>=0;i--){
System.out.println("stack["+i+"]="+stack[i]);
}
}
}