栈的特点:
1.栈是一个先入后出的线性存储表
2.栈的结构限制了元素的加入和取出均在栈的一端进行
栈的思路分析和代码实现:
import java.util.Scanner;
public class ArrayStack01{
//数组模拟栈结构
public static void main(String[] args) {
arraystack stack=new arraystack(4);
Scanner sc=new Scanner(System.in);
boolean flag=true;
while(flag){
System.out.println("-------------------");
System.out.println("show: 显示栈");
System.out.println("exit: 退出程序");
System.out.println("push: 表示添加数据到栈(入栈)");
System.out.println("pop: 表示从栈取出元素(出栈)");
System.out.println("请输入你的选择");
System.out.println("-------------------");
String key=sc.next();
switch(key){
case "show":
stack.show();
break;
case "push":
System.out.println("请输入加入栈的元素");
int value=sc.nextInt();
stack.push(value);
break;
case "pop":
int num=stack.pop();
case "exit":
sc.close();
flag=false;
break;
default:
break;
}
}
System.out.println("模拟栈程序退出");
}
}
class arraystack{
private int top=-1;
private int arrstack[];
private int Maxsize;
public arraystack(int Maxsize){
//新建对象的时候就调用了构造器 开辟了stack数组空间
this.Maxsize=Maxsize;
arrstack=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++;
arrstack[top]=value;
}
public int pop(){
if(isEmpty()){
System.out.println("栈为空栈");
return 0;
}
int value=arrstack[top];
top--;
System.out.println("弹栈成功");
return value;
}
public void show(){
if(isEmpty()){
System.out.println("栈为空栈");
return;
}
//注意对栈顶元素开始遍历 一直到栈底
for(int i=top;i>=0;i--){
System.out.printf("stack[%d]=%d\n",i,arrstack[i]);
}
}
}