Java實(shí)現(xiàn)隊(duì)列的三種方法集合
數(shù)組實(shí)現(xiàn)隊(duì)列
//數(shù)組實(shí)現(xiàn)隊(duì)列
class queue{
int[] a = new int[5];
int i = 0;
//入隊(duì)操作
public void in(int m) {
a[i++] = m;
}
// 出隊(duì)列操作 取出最前面的值 通過循環(huán)遍歷把所有的數(shù)據(jù)向前一位
public int out() {
int index = 0;
int temp = a[0];
for(int j = 0;j < i;j++) {
a[j] = a[j + 1];
}
return temp;
}
}
ArrayList實(shí)現(xiàn)隊(duì)列
//集合實(shí)現(xiàn)隊(duì)列
class queue{
List<Integer> list = new ArrayList<Integer>();
int index = 0;
public void in(int n) {
list.add(n);
index++;
}
//出隊(duì)列操作
//出隊(duì)
public int out(){
if(!list.isEmpty()){
index--;
return list.remove(0);
}
return -1;
}
}
兩個(gè)堆棧實(shí)現(xiàn)隊(duì)列
//兩個(gè)堆棧實(shí)現(xiàn)一個(gè)隊(duì)列
class queue3 {
Stack<Integer> stackA = new Stack<Integer>();
Stack<Integer> stackB = new Stack<Integer>();
//入隊(duì)
public void in(int n) {
stackA.push(n);
}
//出隊(duì) 我們把A里面的元素遍歷拿出放入B中 再拿出B中的第一個(gè)元素
public int out() {
//判斷b棧有沒有元素 有返回false 無返回真
if(stackB.isEmpty()) {
while(!stackA.isEmpty()) {
stackB.push(stackA.pop());
}
}
return stackB.pop();
}
}
補(bǔ)充知識:java使用鏈表實(shí)現(xiàn)隊(duì)列
隊(duì)列使用Java進(jìn)行鏈表實(shí)現(xiàn),在網(wǎng)上找到了一張圖,很好,借鑒一下

設(shè)置兩個(gè)結(jié)點(diǎn)node,front指向隊(duì)首元素,rear指向隊(duì)尾;
上代碼:
public class LinkedQueue {
Node front;//隊(duì)頭指針,指向隊(duì)頭節(jié)點(diǎn)
Node rail;//隊(duì)尾指針,指向隊(duì)尾節(jié)點(diǎn)
int size = 0;//記錄隊(duì)列長度
//構(gòu)造函數(shù)
public LinkedQueue() {
front = rail = null;
}
public boolean isEmpty() {
return size == 0 ? true : false;
}
//添加元素
public boolean addQueue(Object ele) {
if (size == 0) {
front = new Node(null, ele);
rail = front;
size++;
return true;
}
Node s = new Node(null, ele);
//這塊有個(gè)主意的地方,一旦rail設(shè)置了next屬性,因?yàn)閒ront節(jié)點(diǎn)與rail節(jié)點(diǎn)指向了同一個(gè)node節(jié)點(diǎn),持有同一個(gè)結(jié)點(diǎn)的一個(gè)引用,因此front節(jié)點(diǎn)next屬性也被填充
rail.setNext(s);
rail = s;
size++;
return true;
}
/**
* 刪除元素,出隊(duì)列
* @return
*/
public boolean deleteQueue() {
if (isEmpty()) {
System.out.println("當(dāng)前隊(duì)列為空");
return false;
}
front = front.next;
size--;
return true;
}
public static void main(String[] args) {
LinkedQueue queue = new LinkedQueue();
queue.addQueue(1);
queue.addQueue(2);
queue.addQueue(3);
queue.deleteQueue();
}
}
/**
* 首先鏈表底層是一個(gè)個(gè)結(jié)點(diǎn)
*/
class Node {
Node next;
Object element;
public Node(Node next, Object element) {
this.next = next;
this.element = element;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Object getElement() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
}
以上這篇Java實(shí)現(xiàn)隊(duì)列的三種方法集合就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- java中用數(shù)組實(shí)現(xiàn)環(huán)形隊(duì)列的示例代碼
- Java 延遲隊(duì)列的常用的實(shí)現(xiàn)方式
- 詳解Java中的延時(shí)隊(duì)列 DelayQueue
- Java 1.8使用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列
- Java特性隊(duì)列和棧的堵塞原理解析
- Java實(shí)現(xiàn)自定義阻塞隊(duì)列
- Java優(yōu)先隊(duì)列(PriorityQueue)重寫compare操作
- SpringBoot集成JmsTemplate(隊(duì)列模式和主題模式)及xml和JavaConfig配置詳解
- java隊(duì)列之queue用法實(shí)例分析
- JAVA 實(shí)現(xiàn)延遲隊(duì)列的方法
- 詳解java中的阻塞隊(duì)列
- 一口氣說出Java 6種延時(shí)隊(duì)列的實(shí)現(xiàn)方法(面試官也得服)
- Java阻塞隊(duì)列四組API介紹(小結(jié))
- Java中有界隊(duì)列的飽和策略(reject policy)原理解析
- Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析
- java鏈表應(yīng)用--基于鏈表實(shí)現(xiàn)隊(duì)列詳解(尾指針操作)
- Java循環(huán)隊(duì)列原理與用法詳解
- 10分鐘搞定Java并發(fā)隊(duì)列
相關(guān)文章
springboot搭建訪客管理系統(tǒng)的實(shí)現(xiàn)示例
這篇文章主要介紹了springboot搭建訪客管理系統(tǒng)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Javafx簡單實(shí)現(xiàn)【我的電腦資源管理器】效果
這篇文章主要介紹了Javafx簡單實(shí)現(xiàn)【我的電腦資源管理器】效果,涉及Javafx操作系統(tǒng)文件模擬資源管理器的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
java基于servlet編寫上傳下載功能 類似文件服務(wù)器
這篇文章主要為大家詳細(xì)介紹了java基于servlet編寫上傳下載功能,類似文件服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07

