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

思路

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

功能

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

使用演示:

压栈:

栈满检测:

遍历栈内存和栈帧:

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

弹栈:

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

源码:

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()};</p>    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++;        }    }</p>    public static void push(String c){        //接收下面类传来的参数并赋值给Zhan()        Zhan(c);    }</p>    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一维数组模拟压栈弹栈

相关文章:

你感兴趣的文章:

标签云: