使用java一维数组模拟压栈弹栈

思路

先进后出,优先解决压栈的问题,之后解决弹栈和main方法

功能

  1. 随时模拟压栈
  2. 随时模拟弹栈
  3. 防止异常和各种错误
  4. 随时可以遍历“栈”中存在的变量的方法,压栈弹栈栈帧清晰可见!

使用演示:

压栈:

使用java一维数组模拟压栈弹栈_第1张图片

栈满检测:

使用java一维数组模拟压栈弹栈_第2张图片

遍历栈内存和栈帧:

使用java一维数组模拟压栈弹栈_第3张图片

只要栈中有变量就会输出栈帧:

使用java一维数组模拟压栈弹栈_第4张图片

弹栈:

使用java一维数组模拟压栈弹栈_第5张图片

栈空检测:(没有变量,栈帧不输出!)

使用java一维数组模拟压栈弹栈_第6张图片

源码:

import java.util.Scanner;
public class MoveTest01 {
    //局部变量供栈方法的遍历数组使用
    static int i;
    //创建Object[]数组,作为栈,并且限制“内存上限”为5;
    static Object[] os = new Object[5];
    //创建数组,模拟入栈
    static num[] l = {new A(),new B(),new C(),new D(),new E(),new F()};

public static void main(String[] args) { int a =0;//遍历Object[]数组时的控制 boolean c = true;//控制循环 boolean d = true;//检测栈内存使用量防止异常 Scanner s = new Scanner(System.in); do { System.out.println("==========================="); System.out.print("请选择”压栈““弹栈”或“列出栈内存中储存的变量指向的方法”,输入“退出”将会结束程序!:"); String z = s.next(); //判定用户输入 if (z.equals("压栈")) { //防止数列超限 if(a > (os.length - 1)){ d = false; System.out.println("栈内存已满!请弹栈后压栈!"); } if(d){ //调用num[]数组模拟入栈 l[a].leng(); a++; } //防止if(d)锁死 d = true; } else if (z.equals("弹栈")) { //调用pop方法,模拟弹栈,并初始化计数 pop(); a = 0; i = 0; } else if (z.equals("退出")) { //结束do...while循环体 c = false; } else if (z.equals("列出栈内存中储存的变量指向的方法")) { int index = -1;//创建栈帧 if(os[0] == null){ System.out.println("栈内没有已装载的变量!"); } for (int k = os.length - 1; k > -1; k--) { //判定如果Object[]数组内的各个属性,如果不等于null则输出声明 if(!(os[k] == null)){ index++; System.out.println("栈内存中已入栈的变量的方法有:" + os[k]); } } //如果栈帧的值不为0,则输出结果 if(!(index == -1)){ System.out.println(os[index] + "《== 栈帧指向"); } } }while (c); } //模拟栈 public static void Zhan(Object o){ if(i < os.length) { //给Object[]数组赋值 os[i] = o; System.out.println("目标:" + os[i] + "的所有变量已压入栈内!"); i++; } }

public static void push(String c){ //接收下面类传来的参数并赋值给Zhan() Zhan(c); }

public static void pop(){ //检测数组第一位的值是不是空,如果是则输出消息 if(os[0] == null){ System.out.println("栈内没有已装载的变量!无法弹栈!"); } //模拟弹栈 for(int k = (os.length - 1);k >= 0;k--){ //遍历数组,将数组内不是null的值全部输出并初始化为null if(!(os[k] == null)) { System.out.println(os[k] + "的所有变量:已弹出内存!"); os[k] = null; } } } } class num{ public void leng(){ //让下面的方法有个共同的父类,并且调用时统一输出自己的名字给栈 MoveTest01.push(getClass().getName()); } } //即将入方法区的方法,假设里面有变量(也可以直接把这些方法看成变量); class A extends num{ public A() {} } class B extends num{ public B() {} } class C extends num{ public C() {} } class D extends num{ public D() {} } class E extends num{ public E() {} } class F extends num{ public F() {} }

以上就是使用java一维数组模拟压栈弹栈的详细内容,有兴趣的朋友可直接试一试,更多关于java模拟压栈弹栈的资料请关注脚本之家其它相关文章!

你可能感兴趣的:(使用java一维数组模拟压栈弹栈)