Java實現(xiàn)順序棧原理解析
這篇文章主要介紹了Java實現(xiàn)順序棧原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
什么是棧
1.棧的英文是stack
2.棧是一個先入后出的有序列表
3.棧是限制線性表元素的插入和刪除只能在線性表的同一端進(jìn)行的一種特殊的線性表,允許插入和刪除的一端是,為變化的一端,成為棧頂,另外的一端為固定的一端為棧底
4.棧的定義可知,最先放入棧中的元素在棧底,最后放入的元素在棧頂,而刪除的情況剛好相反,最后放入的元素先刪除,最先放入的元素后刪除
棧的應(yīng)用場景
1.子程序的調(diào)用,在跳向子程序之前會先將下一條指令的地址存放在堆棧中,直到子程序執(zhí)行后再將地址取出,最后回到原來的程序之中
2.遞歸的調(diào)用,和子程序的調(diào)用類似,只是出了存儲下一個指令的地址外,也將參數(shù)、區(qū)域變量、等數(shù)據(jù)壓入棧中
3.表達(dá)式的轉(zhuǎn)換與求值
4.二叉樹的遍歷
5.圖形的深度優(yōu)先搜索
代碼
棧
package stack;
public class ArrayStack {
private int maxSize;//最大值
private int[] stack;//棧
private int top=-1;//棧頂
//構(gòu)造器
public ArrayStack(int maxSize) {
this.maxSize=maxSize;
stack=new int[this.maxSize];
}
//棧滿
public boolean isFull() {
return top==maxSize-1;
}
//???
public boolean isEmpty() {
return top==-1;
}
//入棧-push
public void push(int value) {
//先判斷是否棧滿了
if(isFull()) {
System.out.println("棧已經(jīng)滿了~");
return;
}else {
top++;
stack[top]=value;
}
}
//出棧-pop
public int pop() {
if(isEmpty()) {
throw new RuntimeException("棧已經(jīng)空了~");
}
int value=stack[top];
top--;
return value;
}
//遍歷棧
public void list() {
if(isEmpty()) {
System.out.println("???,沒有數(shù)據(jù)~");
}
for(int i=top;i>=0;i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}
測試類
package stack;
import java.util.Scanner;
public class TestArrayList {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayStack stack=new ArrayStack(4);
String key="";
boolean loop=true;
Scanner scanner=new Scanner(System.in);
while(loop) {
System.out.println("show:顯示棧");
System.out.println("exit:退出測試");
System.out.println("push:壓棧");
System.out.println("pop:出棧");
System.out.println("請輸入你的選擇:");
key=scanner.next();
switch (key) {
case "show":
stack.list();
break;
case "push":
System.out.println("請輸入一個數(shù):");
int value=scanner.nextInt();
stack.push(value);
break;
case "pop":
try {
int res=stack.pop();
System.out.printf("出棧的元素為:%d\n",res);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
break;
case "exit":
scanner.close();
loop=false;
break;
default:
break;
}
}
System.out.println("程序退出!");
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot+angular4前后端分離 跨域問題解決詳解
這篇文章主要介紹了springboot+angular4前后端分離 跨域問題解決詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09
Java參數(shù)校驗@Validated、@Valid介紹及使用詳解
Javax.validation是?spring?集成自帶的一個參數(shù)校驗接口,可通過添加注解來設(shè)置校驗條件,這篇文章主要介紹了Java參數(shù)校驗@Validated、@Valid介紹及使用詳解,需要的朋友可以參考下2024-08-08
java swagger ui 添加header請求頭參數(shù)的方法
今天小編就為大家分享一篇java swagger ui 添加header請求頭參數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Intellij IDEA 2017.3使用Lombok及常用注解介紹
這篇文章主要介紹了Intellij IDEA 2017.3使用Lombok及常用注解介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

