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

思路

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

功能

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

使用演示:

压栈:

栈满检测:

遍历栈内存和栈帧:

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

弹栈:

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

源码:

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

(0)

相关推荐

  • 使用Java程序模拟实现新冠病毒传染效果

    简单介绍 2020年注定是不平凡的一年,新冠肺炎肆虐全球,传染性特别强,目前全球感人人数还在逐渐攀升,作为中华儿女特别感谢政府作出的努力,非常感谢并致敬医护人员,是他们的努力为我们创造安全的环境,向你们致敬! 模拟方案 以下是程序粗略的模拟病毒传染过程,具体方案如下: 首先需要构造一个200 * 200的格子界面有四种不同的颜色状态标记着程序执行的过程程序执行10次,初始化格子也就是0的时候,需要在整个格子最中心的100个格子标记为红色,剩余数据随机抽取四千(且不能重复)标记为黑色,其余没有标记

  • JAVA模拟新增顺序表及单链表

    最近在回顾大学学的数据结构,这里给大家用java模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序表 * * @author cjd * */ public class ArrayList { private Object[] elementData; // 底层是一个数组,目前还没有确定长度 private int size; // 不是数组分配了几个空间,而是元素的个数 public ArrayList() { this(4); } public ArrayList(int initi

  • Java多线程模拟售票程序和线程安全问题

    Java中线程部分知识中,售票程序非常经典.程序中也有一些问题存在! 需求:模拟3个窗口同时在售100张票. 问题1:为什么100张票被卖出了300张票? 原因:因为tickets是非静态的,非静态的成员变量数据是在每个对象中都会维护一份数据的,三个线程对象就会有三份. 解决方案:把tickets票数共享出来给三个线程对象使用.使用static修饰. 问题2: 出现了线程安全问题 ? 线程安全问题的解决方案:sun提供了线程同步机制让我们解决这类问题的. java线程同步机制的方式: 方式一:同

  • 如何用Java模拟XN*2图灵机

    题目描述: 对于XN*2图灵机进行模拟,任意给定的十进制数,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果.用C或C++或Java或Python语言实现程序解决问题. 要求:1. 程序风格良好(使用自定义注释模板): 2. 提供友好的输入输出,并进行输入数据的正确性验证. 算法分析: 1. 将十进制数转换为二进制数: 2. 将二进制数转换为收缩扩展二进制的编码: 3. 根据当前的内态和输入执行XN*2图灵机的指令: 4. 将结果的二进制编码

  • Java 实现模拟用户登录的示例代码

    创建一个用户类类型的集合,手动输入用户库 主要是判定输入的用户名和密码是否与库中的匹配 做好区别是用户名输入错误还是密码输入错误的提示. 定义用户类 public class User{ String username; String keyword; public User(String username, String keyword) { this.username = username; this.keyword = keyword; } } 主程序 import java.util.A

  • Java多线程之简单模拟售票功能

    一.创建 二.完整代码 package com.ql; import lombok.SneakyThrows; import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.io.IOException; public class Mythread extends Thread { public Mythread(String name)

  • java多线程之火车售票系统模拟实例

    1.前言 为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票. 2.非同步代码 package com.tl.skyLine.thread; /** * Created by tl on 17/3/6. */ public class SellTicket { public static void main(String[] args) { TicketWindow tw = new TicketWindow(); Thread t1

  • Java多线程模拟电影售票过程

    用多线程模拟电影售票过程(Java实训) 实训目的: 多线程的实现.线程同步 实训要求: 总票数和售票窗口数由键盘输入,用每个线程处理一个窗口的售票. Test.java package program5; import java.util.Scanner; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(S

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

    思路 先进后出,优先解决压栈的问题,之后解决弹栈和main方法 功能 随时模拟压栈 随时模拟弹栈 防止异常和各种错误 随时可以遍历"栈"中存在的变量的方法,压栈弹栈栈帧清晰可见! 使用演示: 压栈: 栈满检测: 遍历栈内存和栈帧: 只要栈中有变量就会输出栈帧: 弹栈: 栈空检测:(没有变量,栈帧不输出!) 源码: import java.util.Scanner; public class MoveTest01 { //局部变量供栈方法的遍历数组使用 static int i; //创

  • 详解java一维数组及练习题实例

    一维数组 1.一维数组的定义方式: int[] array1 = new int[3];//声明创建一个包含3个元素的数组array1(初始值为0) int[] array2 = {1, 2, 3};//声明.创建并初始化一个包含3个元素的数组 int[] array3 = new int[] {1, 2, 3};//声明.创建并初始化一个包含3个元素的整型数组 int[] array4; array[4] = {1, 2, 3}//先声明一个数组array,再进行创建及初始化 int[] ar

  • Java一维数组和二维数组元素默认初始化值的判断方式

    目录 一.数组与数组元素 二.一维数组 1.元素为基本数据类型时 2. 数组元素为引用类型时 三.二维数组 1. int[][] arr = new int[2][2] 2. int[][] arr = new int[2][] 一.数组与数组元素 Java中数组是引用类型 数组的元素可以是基本类型也可以是引用类型,弄清数组元素的类型可以帮助我们去理解数组元素默认初始化 二.一维数组 一维数组元素默认初始化值的情况分为两种,元素为基本数据类型和引用数据类型 1.元素为基本数据类型时 整型类型(b

  • java学习之一维数组中重复元素的去除

    目录 一.基本思路 二.步骤 1.设置判断数组Arr[ ] 2.继承数组newArr[ ]获取不重复元素 总结 一.基本思路 首先,假设一个一维数组arr[ ]={ 4, 3, 35, 3, 2, 4, 6, 3},其中有三个重复元素 3,4,3.要如何剔除呢,由于还没有涉猎到一些经典的调用,所以我选择了用新的数组newArr[ ]去继承原来数组中的不重复的元素,另外还需要一个判断数组Arr[ ],来判断arr[ ]中哪几个元素是重复的,才好去除掉. 二.步骤 1.设置判断数组Arr[ ] 代码

  • java使用链表来模拟栈的入栈出栈操作实例代码

    栈:后进先出:最后一个放入堆栈中的物体总是被最先拿出来. 使用链表来模拟栈的入栈出栈操作. 1.节点类代码 public class Entry<T> { private T value; private Entry<T> next; public Entry() { this(null); } public Entry(T value) { this.value=value; this.next=null; } public void setValue(T value) { th

  • php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)

    复制代码 代码如下: <?php /*函数array_push():将一个或多个单元压入数组的末尾(入栈) * 1.语法:int array_push ( array &array, mixed var [, mixed ...] ) * 2.描述:将 array 当成一个栈,并将传入的变量压入 array 的末尾.array 的长度将根据入栈变量的数目增加. * 3.注意事项: * 3.1.该函数返回数组新的元素的总数 * 3.2.如var为数组,则该数组是作为一个数组变量入栈到数组栈中,

  • Java中增强for循环在一维数组和二维数组中的使用方法

    一维数组: int[] a={1,2,3}; for(int i:a) { System.out.print(i+" "); } 输出:1 2 3 二维数组: import java.util.Scanner; public class tet { public static void main(String[] args) { //int[][] b={{1,2,3},{4,5,6}};行 int[][] a=new int[5][];//必须明确行数 for(int i=0;i&l

  • Java数组模拟优先级队列数据结构的实例

    优先级队列 如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列 这种数据结构. 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 .对于优先权相同的元素,可按先进先出次序处理或按任意优先

  • 浅谈java中的一维数组、二维数组、三维数组、多维数组

    这个数组可以看做新手学习,从一维数组 到 多维 数组 循环渐进,其实看起也很简单,一看便知,众所周知,一维.二维或许经常用到,用到二维以上应该就很少了. public class test { public static void main(String[] args) { /*一维数组*/ int num[] = {0,1,2}; /*下面输出 3 行数据,0 ~ 2*/ for (int i = 0; i < num.length; i++) { System.out.println("

  • php array_pop()数组函数将数组最后一个单元弹出(出栈)

    复制代码 代码如下: <?php /*函数array_pop():将数组最后一个单元弹出(出栈) * 1.语法:mixed array_pop ( array &array ) * 2.描述: 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一.如果 array 为空(或者不是数组)将返回 NULL. * 3.注意事项: * 3.1. */ echo "****************************************************

随机推荐