java 數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列
java 數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列
一:對(duì)列
隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)
實(shí)現(xiàn)代碼:
package Queue; /* * 使用java構(gòu)建隊(duì)列,并模擬實(shí)現(xiàn)隊(duì)列的入隊(duì)和出對(duì)方法 */ public class Queue { //隊(duì)列類(lèi) private int maxSize; //定義隊(duì)列的長(zhǎng)度 private int[] arrQueue; //隊(duì)列 private int rear; //定義隊(duì)列的尾指針 private int front; //定義隊(duì)列的頭指針 private int empty; //元素的個(gè)數(shù) public Queue(int s) //初始化構(gòu)造函數(shù) { maxSize = s; arrQueue = new int[s]; rear = -1; front=0; empty = 0; } //實(shí)現(xiàn)插入方法 public void insert(int m) { if(rear == maxSize-1) //處理循環(huán) rear = -1; arrQueue[++rear] = m; //對(duì)尾指針加一,把值放在隊(duì)列結(jié)尾 empty++; //隊(duì)列元素個(gè)數(shù)加1 System.out.println("隊(duì)列入隊(duì)元素 為:" + m); } //實(shí)現(xiàn)出棧的方法,即取得隊(duì)列的頭元素 public int remove() { int temp = arrQueue[front++]; //將棧頂元素賦值給temp,棧頂指針加1 if(front == maxSize) //處理循環(huán) front = 0; empty--; //元素個(gè)數(shù)-1 return temp; } //判斷隊(duì)列是否為空 public boolean isEmpty() { return (empty==0); } //判斷對(duì)列是否為滿(mǎn) public boolean isFull() { return (empty == maxSize); } //返回隊(duì)列長(zhǎng)度 public int qLong() { return empty; } public static void main(String[] args) { Queue q = new Queue(5); //初始化隊(duì)列為5個(gè)元素 q.insert(1); q.insert(2); q.insert(3); q.insert(4); q.insert(5); int t1 = q.remove(); System.out.println("隊(duì)列元素出隊(duì):" + t1); int t2 = q.remove(); System.out.println("隊(duì)列元素出隊(duì):" + t2); System.out.println("隊(duì)列是否為空:" + q.isEmpty()); System.out.println("隊(duì)列是否為滿(mǎn):" + q.isFull()); System.out.println("隊(duì)列的長(zhǎng)度:" + q.qLong()); } }
二:棧
棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)
1:使用數(shù)組模擬棧
package Statck; /* * 使用java構(gòu)建棧,并模擬實(shí)現(xiàn)棧的入棧和出棧方法 * 使用數(shù)組實(shí)現(xiàn) */ public class Statck1 { private int maxSize; //棧的最多元素?cái)?shù) private int top; //棧頂指針 private int len; //棧的深度 private int[] arrStack; // 模擬棧 //棧的初始化 public Statck1(int s){ maxSize = s; len =0; top= -1; arrStack = new int[s]; } //獲取棧的長(zhǎng)度 public int getLen(){ return len; } //獲取當(dāng)前棧還能插入多少個(gè)f元素 public int getLeaveLen(){ return (maxSize-len); } //判斷棧是否滿(mǎn) public boolean isFull(){ return (len==maxSize); } //判斷棧是否為空 public boolean isEmpty(){ return (len ==0); } //元素入棧 public void inStack(int s) { arrStack[++top] = s; //棧頂指針加1,入棧 System.out.println("元素入棧:" + s); len ++ ;//棧深度+1 } //元素出棧 public int outStack() { int temp = arrStack[top--];//賦值之后減1 System.out.println("元素出棧:" + temp); len--; //棧深度-1 return temp; } public static void main(String[] args) { Statck1 s = new Statck1(5); s.inStack(1); s.inStack(2); s.inStack(3); s.inStack(4); s.inStack(5); s.outStack(); s.outStack(); System.out.println("棧的長(zhǎng)度:" + s.getLen()); System.out.println("還能入棧元素個(gè)數(shù):" + s.getLeaveLen()); System.out.println("棧的是否為空:" + s.isEmpty()); System.out.println("棧的是否為滿(mǎn):" + s.isFull()); } }
2:使用鏈表模擬棧
package Statck; import java.util.ArrayList; import java.util.EmptyStackException; import java.util.List; /* * 使用java構(gòu)建棧,并模擬實(shí)現(xiàn)棧的入棧和出棧方法 * 使用鏈表實(shí)現(xiàn) */ public class Statck2<E extends Object> { private List<E> statck = new ArrayList<E>(); public Statck2(){ //棧的初始化 } //清空棧 public void clear(){ statck.clear(); System.out.println("清空棧.........."); } //判斷棧是否為空 public boolean isEmpty(){ return statck.isEmpty(); } //獲取棧頂元素 public E getTop(){ if(isEmpty()) return null; return statck.get(0); } //彈出棧操作 public E pop(){ if (isEmpty()) throw new EmptyStackException(); System.out.println(statck.size() + "\t 出棧"); return statck.remove(statck.size() - 1); } //壓入棧操作 public void push(E e){ statck.add(e); System.out.println(e + "\t 入棧"); } //獲取當(dāng)前棧的深度 public int getStatckSize(){ if(isEmpty()) throw new EmptyStackException(); return statck.size(); } public static void main(String[] args) { Statck2 s = new Statck2(); s.clear(); //清空棧 System.out.println("當(dāng)前棧是否為空:" + s.isEmpty()); s.push(1); s.push(2); s.push(3); s.pop(); System.out.println("當(dāng)前棧的深度為:" + s.getStatckSize()); System.out.println("當(dāng)前棧頂元素為:" + s.getTop()); } }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,大家共同進(jìn)步!
- java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解
- Java深入了解數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列的詳解
- Java 棧和隊(duì)列的相互轉(zhuǎn)換詳解
- Java棧和基礎(chǔ)隊(duì)列的實(shí)現(xiàn)詳解
- 一起來(lái)學(xué)習(xí)Java的棧和隊(duì)列
- Java?棧與隊(duì)列實(shí)戰(zhàn)真題訓(xùn)練
- Java 棧與隊(duì)列超詳細(xì)分析講解
- Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列和棧流程詳解
- Java線(xiàn)性結(jié)構(gòu)中棧、隊(duì)列和串的基本概念和特點(diǎn)詳解
- Java常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解
- Java 棧和隊(duì)列的交互實(shí)現(xiàn)
相關(guān)文章
mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問(wèn)題解決
本文主要介紹了mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09Java中String的intern()方法詳細(xì)說(shuō)明
這篇文章主要介紹了Java中String的intern()方法詳細(xì)說(shuō)明,String::intern()是一個(gè)本地方法,他的作用就是如果字符串常量池中已經(jīng)包含了一個(gè)等于此String對(duì)象的字符串,則返回代表池中的這個(gè)字符串額String對(duì)象的引用,需要的朋友可以參考下2023-11-11Springboot整合JPA配置多數(shù)據(jù)源流程詳解
這篇文章主要介紹了Springboot整合JPA配置多數(shù)據(jù)源,JPA可以通過(guò)實(shí)體類(lèi)生成數(shù)據(jù)庫(kù)的表,同時(shí)自帶很多增刪改查方法,大部分sql語(yǔ)句不需要我們自己寫(xiě),配置完成后直接調(diào)用方法即可,很方便2022-11-11java.sql.SQLException:?connection?holder?is?null錯(cuò)誤解決辦法
這篇文章主要給大家介紹了關(guān)于java.sql.SQLException:?connection?holder?is?null錯(cuò)誤的解決辦法,這個(gè)錯(cuò)誤通常是由于連接對(duì)象為空或未正確初始化導(dǎo)致的,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02EditPlus運(yùn)行java時(shí)從鍵盤(pán)輸入數(shù)據(jù)的操作方法
這篇文章主要介紹了EditPlus運(yùn)行java時(shí)從鍵盤(pán)輸入數(shù)據(jù)的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開(kāi)始結(jié)束
這篇文章主要介紹了Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開(kāi)始結(jié)束,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05SpringBoot項(xiàng)目啟動(dòng)時(shí)增加自定義Banner的簡(jiǎn)單方法
最近看到springboot可以自定義啟動(dòng)時(shí)的banner,然后自己試了一下,下面這篇文章主要給大家介紹了SpringBoot項(xiàng)目啟動(dòng)時(shí)增加自定義Banner的簡(jiǎn)單方法,需要的朋友可以參考下2022-01-01