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ì)列類
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ì)列是否為滿
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ì)列是否為滿:" + 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);
}
//判斷棧是否滿
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("棧的是否為滿:" + 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ì)本站的支持,如有疑問請(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)詳解
- 一起來學(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線性結(jié)構(gòu)中棧、隊(duì)列和串的基本概念和特點(diǎn)詳解
- Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解
- Java 棧和隊(duì)列的交互實(shí)現(xiàn)
相關(guān)文章
mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問題解決
本文主要介紹了mybatis-plus內(nèi)置雪花算法主鍵重復(fù)問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
Java中String的intern()方法詳細(xì)說明
這篇文章主要介紹了Java中String的intern()方法詳細(xì)說明,String::intern()是一個(gè)本地方法,他的作用就是如果字符串常量池中已經(jīng)包含了一個(gè)等于此String對(duì)象的字符串,則返回代表池中的這個(gè)字符串額String對(duì)象的引用,需要的朋友可以參考下2023-11-11
Springboot整合JPA配置多數(shù)據(jù)源流程詳解
這篇文章主要介紹了Springboot整合JPA配置多數(shù)據(jù)源,JPA可以通過實(shí)體類生成數(shù)據(jù)庫(kù)的表,同時(shí)自帶很多增刪改查方法,大部分sql語句不需要我們自己寫,配置完成后直接調(diào)用方法即可,很方便2022-11-11
java.sql.SQLException:?connection?holder?is?null錯(cuò)誤解決辦法
這篇文章主要給大家介紹了關(guān)于java.sql.SQLException:?connection?holder?is?null錯(cuò)誤的解決辦法,這個(gè)錯(cuò)誤通常是由于連接對(duì)象為空或未正確初始化導(dǎo)致的,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
EditPlus運(yùn)行java時(shí)從鍵盤輸入數(shù)據(jù)的操作方法
這篇文章主要介紹了EditPlus運(yùn)行java時(shí)從鍵盤輸入數(shù)據(jù)的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開始結(jié)束
這篇文章主要介紹了Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開始結(jié)束,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
SpringBoot項(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

