栈(stack)
- 栈是一个先入后出的有序列表
- 栈限制了线性列表中的增加和删除,只能在一端操作,是特殊的线性表
- 先插入的在栈底,后插入的在栈顶;先删除的在栈顶,后删除的在栈底
如下图表示:
用数组模拟栈
思路:
代码实现:
import java.util.Scanner;
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack arrayStack = new ArrayStack(5);
String key = "";
boolean loop = true;
Scanner scanner = new Scanner(System.in);
while (loop){
System.out.println("show 显示栈");
System.out.println("push 入栈");
System.out.println("pop 出栈");
System.out.println("exit 退出");
System.out.print("请输入你要的操作:");
key = scanner.next();
switch (key){
case "show":
arrayStack.showStack();
break;
case "push":
System.out.print("请输入要入栈的值:");
int value = scanner.nextInt();
arrayStack.push(value);
break;
case "pop":
try {
int res = arrayStack.pop();
System.out.println("出栈的数据是:"+res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case "exit":
scanner.close();
loop = false;
break;
default:
System.out.println("指令错误");
break;
}
}
System.out.println("已退出----------");
}
}
//定义一个栈
class ArrayStack{
private int maxSize;//栈的最大容量
private int[] stack;//数组模拟栈
private int top = -1;//栈顶,初始化-1
public ArrayStack(int maxSize) {//构造器
this.maxSize = maxSize;
stack = new int[this.maxSize];
}
public boolean isFull(){//栈满
return top==maxSize-1;
}
public boolean isNull(){//栈空
return top==-1;
}
public void push(int value){//入栈
if(isFull()){//栈满
System.out.println("栈满");
return;
}
top++;
stack[top]=value;
}
public int pop(){//出栈
if (isNull()){//栈空
throw new RuntimeException("栈空,无数据");
}
int value = stack[top];
top--;
return value;
}
//遍历栈,从栈顶开始
public void showStack(){
if (isNull()){
System.out.println("栈空,无数据");
return;
}
System.out.println("栈的数据如下:");
for (int i = top; i >=0 ; i--) {
System.out.println(stack[i]);
}
}
}