使用java一維數(shù)組模擬壓棧彈棧
更新時間:2021年04月13日 16:37:52 作者:Lib_Subsidiary
這篇文章主要介紹了如何使用java一維數(shù)組模擬壓棧彈棧,需要的朋友可以參考下
思路
先進后出,優(yōu)先解決壓棧的問題,之后解決彈棧和main方法
功能
- 隨時模擬壓棧
- 隨時模擬彈棧
- 防止異常和各種錯誤
- 隨時可以遍歷“?!敝写嬖诘淖兞康姆椒?,壓棧彈棧棧幀清晰可見!
使用演示:
壓棧:

棧滿檢測:

遍歷棧內(nèi)存和棧幀:

只要棧中有變量就會輸出棧幀:

彈棧:

??諜z測:(沒有變量,棧幀不輸出?。?/strong>

源碼:
import java.util.Scanner;
public class MoveTest01 {
//局部變量供棧方法的遍歷數(shù)組使用
static int i;
//創(chuàng)建Object[]數(shù)組,作為棧,并且限制“內(nèi)存上限”為5;
static Object[] os = new Object[5];
//創(chuàng)建數(shù)組,模擬入棧
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[]數(shù)組時的控制
boolean c = true;//控制循環(huán)
boolean d = true;//檢測棧內(nèi)存使用量防止異常
Scanner s = new Scanner(System.in);
do {
System.out.println("===========================");
System.out.print("請選擇”壓?!啊皬棗!被颉傲谐鰲?nèi)存中儲存的變量指向的方法”,輸入“退出”將會結(jié)束程序!:");
String z = s.next();
//判定用戶輸入
if (z.equals("壓棧")) {
//防止數(shù)列超限
if(a > (os.length - 1)){
d = false;
System.out.println("棧內(nèi)存已滿!請彈棧后壓棧!");
}
if(d){
//調(diào)用num[]數(shù)組模擬入棧
l[a].leng();
a++; }
//防止if(d)鎖死
d = true;
} else if (z.equals("彈棧")) {
//調(diào)用pop方法,模擬彈棧,并初始化計數(shù)
pop();
a = 0;
i = 0;
} else if (z.equals("退出")) {
//結(jié)束do...while循環(huán)體
c = false;
} else if (z.equals("列出棧內(nèi)存中儲存的變量指向的方法")) {
int index = -1;//創(chuàng)建棧幀
if(os[0] == null){
System.out.println("棧內(nèi)沒有已裝載的變量!");
}
for (int k = os.length - 1; k > -1; k--) {
//判定如果Object[]數(shù)組內(nèi)的各個屬性,如果不等于null則輸出聲明
if(!(os[k] == null)){
index++;
System.out.println("棧內(nèi)存中已入棧的變量的方法有:" + os[k]);
}
}
//如果棧幀的值不為0,則輸出結(jié)果
if(!(index == -1)){
System.out.println(os[index] + "《== 棧幀指向");
}
}
}while (c);
}
//模擬棧
public static void Zhan(Object o){
if(i < os.length) {
//給Object[]數(shù)組賦值
os[i] = o;
System.out.println("目標:" + os[i] + "的所有變量已壓入棧內(nèi)!");
i++;
}
}
</p> public static void push(String c){
//接收下面類傳來的參數(shù)并賦值給Zhan()
Zhan(c);
}
</p> public static void pop(){
//檢測數(shù)組第一位的值是不是空,如果是則輸出消息
if(os[0] == null){
System.out.println("棧內(nèi)沒有已裝載的變量!無法彈棧!");
}
//模擬彈棧
for(int k = (os.length - 1);k >= 0;k--){
//遍歷數(shù)組,將數(shù)組內(nèi)不是null的值全部輸出并初始化為null
if(!(os[k] == null)) {
System.out.println(os[k] + "的所有變量:已彈出內(nèi)存!");
os[k] = null;
}
}
}
}
class num{
public void leng(){
//讓下面的方法有個共同的父類,并且調(diào)用時統(tǒng)一輸出自己的名字給棧
MoveTest01.push(getClass().getName());
}
}
//即將入方法區(qū)的方法,假設里面有變量(也可以直接把這些方法看成變量);
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一維數(shù)組模擬壓棧彈棧的詳細內(nèi)容,有興趣的朋友可直接試一試,更多關于java模擬壓棧彈棧的資料請關注腳本之家其它相關文章!
相關文章
Java中字符串與日期轉(zhuǎn)換常見方法總結(jié)
這篇文章主要給大家介紹了關于Java中字符串與日期轉(zhuǎn)換常見方法的相關資料,在Java編程中經(jīng)常需要將字符串表示的日期轉(zhuǎn)換為日期對象進行處理,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11
JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解
這篇文章主要為大家介紹了JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
關于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用
這篇文章主要介紹了關于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用,SpringMVC是一個基于Spring框架的Web框架,它提供了一種簡單、靈活的方式來開發(fā)Web應用程序,在開發(fā)Web應用程序時,我們需要將用戶提交的數(shù)據(jù)綁定到我們的Java對象上,需要的朋友可以參考下2023-07-07
springboot訪問template下的html頁面的實現(xiàn)配置
這篇文章主要介紹了springboot訪問template下的html頁面的實現(xiàn)配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12

