java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列
java 數(shù)據(jù)結(jié)構(gòu)之棧與隊列
一:對列
隊列是一種先進先出的數(shù)據(jù)結(jié)構(gòu)
實現(xiàn)代碼:
package Queue;
/*
* 使用java構(gòu)建隊列,并模擬實現(xiàn)隊列的入隊和出對方法
*/
public class Queue { //隊列類
private int maxSize; //定義隊列的長度
private int[] arrQueue; //隊列
private int rear; //定義隊列的尾指針
private int front; //定義隊列的頭指針
private int empty; //元素的個數(shù)
public Queue(int s) //初始化構(gòu)造函數(shù)
{
maxSize = s;
arrQueue = new int[s];
rear = -1;
front=0;
empty = 0;
}
//實現(xiàn)插入方法
public void insert(int m)
{
if(rear == maxSize-1) //處理循環(huán)
rear = -1;
arrQueue[++rear] = m; //對尾指針加一,把值放在隊列結(jié)尾
empty++; //隊列元素個數(shù)加1
System.out.println("隊列入隊元素 為:" + m);
}
//實現(xiàn)出棧的方法,即取得隊列的頭元素
public int remove()
{
int temp = arrQueue[front++]; //將棧頂元素賦值給temp,棧頂指針加1
if(front == maxSize) //處理循環(huán)
front = 0;
empty--; //元素個數(shù)-1
return temp;
}
//判斷隊列是否為空
public boolean isEmpty()
{
return (empty==0);
}
//判斷對列是否為滿
public boolean isFull()
{
return (empty == maxSize);
}
//返回隊列長度
public int qLong()
{
return empty;
}
public static void main(String[] args) {
Queue q = new Queue(5); //初始化隊列為5個元素
q.insert(1);
q.insert(2);
q.insert(3);
q.insert(4);
q.insert(5);
int t1 = q.remove();
System.out.println("隊列元素出隊:" + t1);
int t2 = q.remove();
System.out.println("隊列元素出隊:" + t2);
System.out.println("隊列是否為空:" + q.isEmpty());
System.out.println("隊列是否為滿:" + q.isFull());
System.out.println("隊列的長度:" + q.qLong());
}
}
二:棧
棧是一種先進后出的數(shù)據(jù)結(jié)構(gòu)
1:使用數(shù)組模擬棧
package Statck;
/*
* 使用java構(gòu)建棧,并模擬實現(xiàn)棧的入棧和出棧方法
* 使用數(shù)組實現(xiàn)
*/
public class Statck1 {
private int maxSize; //棧的最多元素數(shù)
private int top; //棧頂指針
private int len; //棧的深度
private int[] arrStack; // 模擬棧
//棧的初始化
public Statck1(int s){
maxSize = s;
len =0;
top= -1;
arrStack = new int[s];
}
//獲取棧的長度
public int getLen(){
return len;
}
//獲取當前棧還能插入多少個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("棧的長度:" + s.getLen());
System.out.println("還能入棧元素個數(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)建棧,并模擬實現(xiàn)棧的入棧和出棧方法
* 使用鏈表實現(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 入棧");
}
//獲取當前棧的深度
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("當前棧是否為空:" + s.isEmpty());
s.push(1);
s.push(2);
s.push(3);
s.pop();
System.out.println("當前棧的深度為:" + s.getStatckSize());
System.out.println("當前棧頂元素為:" + s.getTop());
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持,如有疑問請留言或者到本站社區(qū)交流討論,大家共同進步!
- java 數(shù)據(jù)結(jié)構(gòu)中棧和隊列的實例詳解
- Java深入了解數(shù)據(jù)結(jié)構(gòu)之棧與隊列的詳解
- Java 棧和隊列的相互轉(zhuǎn)換詳解
- Java棧和基礎隊列的實現(xiàn)詳解
- 一起來學習Java的棧和隊列
- Java?棧與隊列實戰(zhàn)真題訓練
- Java 棧與隊列超詳細分析講解
- Java使用跳轉(zhuǎn)結(jié)構(gòu)實現(xiàn)隊列和棧流程詳解
- Java線性結(jié)構(gòu)中棧、隊列和串的基本概念和特點詳解
- Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊列詳解
- Java 棧和隊列的交互實現(xiàn)
相關(guān)文章
Spring Boot + MyBatis Plus 高效開發(fā)實戰(zhàn)從入
本文將詳細介紹 Spring Boot + MyBatis Plus 的完整開發(fā)流程,并深入剖析分頁查詢、批量操作、動態(tài) SQL、樂觀鎖、代碼優(yōu)化等實戰(zhàn)技巧,感興趣的朋友一起看看吧2025-04-04
MyBatis在insert插入操作時返回主鍵ID的配置(推薦)
這篇文章主要介紹了MyBatis在insert插入操作時返回主鍵ID的配置的相關(guān)資料,需要的朋友可以參考下2017-10-10
java實現(xiàn)mysql操作類分享 java連接mysql
這篇文章主要介紹了java實現(xiàn)的mysql操作類示例,大家在連接數(shù)據(jù)的時候可以直接使用了2014-01-01
劍指Offer之Java算法習題精講N叉樹的遍歷及數(shù)組與字符串
跟著思路走,之后從簡單題入手,反復去看,做過之后可能會忘記,之后再做一次,記不住就反復做,反復尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03
全面解析Spring Security 內(nèi)置 Filter
這篇文章主要介紹了Spring Security 內(nèi)置 Filter的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

