数组模拟栈的思路分析
- 使用数组模拟栈
- 定义一个变量top为栈顶,初始化为-1;
- 入栈的操作:当有数据加入到栈时,top++;stack【top】
- 出栈的操作:int value =stack[top];top–;return value;(从栈顶取出一个数据并返回)
代码实现
package stack;
import java.util.Scanner;
public class ArrayStackDemo {
public static void main(String[] args) {
ArryStack stack =new ArryStack(4);
String key ="";
boolean loop = true;
Scanner scanner=new Scanner(System.in);
while(loop) {
System.out.println("show:显示栈");
System.out.println("exit:退出栈");
System.out.println("push:入栈");
System.out.println("pop:出栈");
System.out.println("请输入你的选择:");
key = scanner.next();
switch (key) {
case "show":
stack.list();
break ;
case "push":
System.out.println("请输入一个数:");
int value = scanner.nextInt();
stack.push(value);
break ;
case "pop":
try {
int res = stack.pop();
System.out.printf("出栈的数据是:%d:\n",res);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break ;
case "exie":
scanner.close();
loop = false;
break;
}
}
System.out.println("程序退出!");
}
}
class ArryStack{
private int maxSize;
private int[] stack;
private int top = -1;
public ArryStack(int maxSize) {
this.maxSize =maxSize;
stack = new int [this.maxSize];
}
public boolean isFull() {
return top == maxSize - 1;
}
public boolean isEmpty() {
return top == - 1;
}
public void push(int value) {
if(isFull()) {
System.out.printf("栈满!");
return ;
}
top++;
stack[top] = value;
}
public int pop() {
if(isEmpty()) {
throw new RuntimeException("栈空,没有数据!");
}
int value= stack[top];
return value;
}
public void list() {
if(isEmpty()) {
System.out.printf("栈空,没有数据!");
return ;
}
for(int i =top;i>= 0;i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}