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

网友投稿 268 2022-10-29


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

思路

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

功能

随时模拟压栈

随时模拟弹栈

防止异常和各种错误

随时可以遍历“栈”中存在的变量的方法,压栈弹栈栈帧清晰可见!

使用演示:

压栈:

栈满检测:

遍历栈内存和栈帧:

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

弹栈:

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

源码:

import java.util.Scanner;

public class MoveTest01 {

//局部变量供栈方法的遍历数组使用

static int i;

//创建Object[]数组,作为栈,并且限制“内存上限JKraTMAH”为5;

static Object[] os = new Object[5];

//创建数组,模拟入栈

static num[] l = {new A(),new B(),new C(),new D(),new E(),new F()};

int a =0;//遍历Object[]数组时的控制

boolean c = true;//控制循环

boolean d = true;//检测栈内存使用量防止异常

Scanner s = new Scanner(System.in);

do {

System.out.println("===========================");

System.out.print("请选择”JKraTMAH压栈““弹栈”或“列出栈内存中储存的变量指向的方法”,输入“退出”将会结束程序!:");

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++;

}

}

//接收下面类传来的参数并赋值给Zhan()

Zhan(c);

}

//检测数组第一位的值是不是空,如果是则输出JKraTMAH消息

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模拟压栈弹栈的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:表单布局
下一篇:html表单实例:登录页面
相关文章

 发表评论

暂时没有评论,来抢沙发吧~