好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

原文链接:https://blog.csdn.net/q1942535787/article/details/115605878

查看更多关于使用java一维数组模拟压栈弹栈的详细内容...

  阅读:10次