用数组模拟栈

1.先进后出,分top和bottom
2.栈的应用:子程序的调用,递归调用,表达式的转换与求职,二叉树的遍历,图形的深度优先搜索

数组模拟栈:注意top=-1
package guigu;

import java.util.Scanner;

public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack stack = new ArrayStack(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(“请输入一个数”);

                stack.push(scanner.nextInt());
                break;
            case"pop":

                try {
                    System.out.println(stack.pop());

                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
                break;
            case"exit":
                scanner.close();
                loop = false;
                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[maxSize];
}
//栈满
public boolean isFull(){
    return top == maxSize - 1;
}
//栈空
public boolean isEmpty(){
    return top == - 1;
}
//入栈 push
public void push(int value){
    //是否满了
    if(isFull()){
        System.out.println("栈已满无法push");
        return;
    }
    top++;
    stack[top] = value;

}
//出栈 pop
public int pop(){
    //是否为空
    if(isEmpty()){

        throw new RuntimeException("栈已空无法pop");
    }
    top--;
    return stack[top+1];

}
//显示栈的情况,注意从栈顶显示情况
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]);
    }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值