1、栈思路分析
(1)、使用数组模拟栈
(2)、定义一个top,初始化为-1;
(3)、入栈的操作,当数据加入到栈中,top++;stack[top]=data;
(4)、出栈的操作, int value=stack[top]; top–;return value;
2、代码实现
package database;
import java.util.Scanner;
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack arrayStack =new ArrayStack(5);
Scanner scanner=new Scanner(System.in);
String s =" ";
boolean loop=true;
while (loop){
System.out.println("遍历栈:show");
System.out.println("退出栈:exit");
System.out.println("压入栈:push");
System.out.println("退出栈:pop");
s=scanner.next();
switch (s){
case "show":
arrayStack.list();
break;
case "push":
System.out.println("压入栈的值");
int value=scanner.nextInt();
arrayStack.push(value);
break;
case "pop":
try {
int res=arrayStack.pop();
System.out.println("出栈数:"+res);
}catch (RuntimeException e){
System.out.println(e.getMessage());
}
break;
case "exit":
loop=false;
scanner.close();
break;
}
}
System.out.println("程序退出~~~");
}
}
//数组模拟栈
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 top==maxsize-1;
}
//栈空
public boolean isEmpty(){
return top==-1;
}
//入栈
public void push(int value){
if (isFull()){
System.out.println("栈已满!");
return;
}
top++;
stack[top]=value;
}
//出栈
public int pop(){
if (isEmpty()){
throw new RuntimeException("栈为空!");
}
int value=stack[top];
top--;
return value;
}
//遍历栈 从栈顶开始遍历
public void list(){
if (isEmpty()){
System.out.println("栈为空!");
}
for (int i = top; i >=0 ; i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}