中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何實現隊列數據結構

發布時間:2021-07-28 09:14:38 來源:億速云 閱讀:86 作者:小新 欄目:編程語言

小編給大家分享一下java如何實現隊列數據結構,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

什么是隊列結構

一種線性結構,具有特殊的運算法則【只能在一端(隊頭)刪除,在另一端(隊尾)插入】。

分類:

順序隊列結構
鏈式隊列結構

基本操作:

入隊列
出隊列 

給出一些應用隊列的場景

  1):當作業被送到打印機的時候,就可以按到達的順序排起來,因此每一份作業是隊列的節點。

  2):售票口的人買票的順序的按照先來先買的順序售票。

  3):當所有的終端被占用,由于資源有限,來訪請求需要放在一個隊列中等候。

隊列是先進先出的! 

我們設置一個叫做LinkQueue<T>的泛型集合類,該類里面有 Node 作為內部類(作為節點用),它包含了泛型元素和下一個node節點的指向next(Node)。

在Linkqueue的里面設置隊列頭指針 front和隊列尾指針rear,長度size=0;我們先設置一個構造器LinkQueue(),用來初始化這兩個指針節點,當然,剛開始初始化的時候 這兩個指針僅僅是一個節點而已,里面的data是空的,我們還讓這兩個指針相等。

//鏈的數據結構 
 private class Node{ 
 public T data; 
 public Node next; 
 //無參構造函數 
 public Node(){} 
  
 public Node(T data,Node next){ 
  this.data=data; 
  this.next=next; 
 } 
 } 
 //隊列頭指針 
 private Node front; 
 //隊列尾指針 
 private Node rear;
public LinkQueue(){
	Node n=new Node(null,null);
	n.next=null;
	front=rear=n;
}

當我們向該隊列添加元素的時候,就會生成一個新的節點,其data就是你要加的元素,(當添加一個節點時,該節點就是隊尾指針指向的最后的節點,一直排在最后),所以隊尾rear.next=newNode(“新創建的節點”).這是第一個節點,也是最后一個節點,所以front.next=newNode.然后我們再讓rear=newNode(不斷更新)。

public void enqueue(T data){ 
 //創建一個節點 
 Node s=new Node(data,null); 
 //將隊尾指針指向新加入的節點,將s節點插入隊尾 
 rear.next=s; 
 rear=s; 
 size++; 
 }

當隊列出隊的時候,還記得我們有一個Node是front.next=newNode 嗎?這就是第一個節點。先暫且把它叫做p,所以p.next=第二個節點,這時我們再把front.next=p.next;這樣頭指針就指向了第二個元素(每一次調用的時候隊列頭指針指會發生變化)。

public T dequeue(){ 
 if(rear==front){ 
  try { 
  throw new Exception("堆棧為空"); 
  } catch (Exception e) { 
  e.printStackTrace(); 
  } 
  return null; 
 }else{ 
  //暫存隊頭元素 
  Node p=front.next; 
  T x=p.data; 
  //將隊頭元素所在節點摘鏈 
  front.next=p.next; 
  //判斷出隊列長度是否為1 
  if(p.next==null) 
  rear=front; 
  //刪除節點 
  p=null; 
  size--; 
  return x; 
 } 
 }

到此為止,隊列的核心操作就完畢了,剩下的比如說size(長度),isEmpty(是否為空),就不在說了。(因為太簡單了!)

具體源碼如下:

public class LinkQueue<T> {
	//鏈的數據結構 
	private class Node{
		public T data;
		public Node next;
		//無參構造函數 
		public Node(){
		}
		public Node(T data,Node next){
			this.data=data;
			this.next=next;
		}
	}
	//隊列頭指針 
	private Node front;
	//隊列尾指針 
	private Node rear;
	//隊列長度 
	private int size=0;
	public LinkQueue(){
		Node n=new Node(null,null);
		n.next=null;
		front=rear=n;
	}
	/** 
 * 隊列入隊算法 
 * @param data 
 * @author WWX 
 */
	public void enqueue(T data){
		//創建一個節點 
		Node s=new Node(data,null);
		//將隊尾指針指向新加入的節點,將s節點插入隊尾 
		rear.next=s;
		rear=s;
		size++;
	}
	/** 
 * 隊列出隊算法 
 * @return 
 * @author WWX 
 */
	public T dequeue(){
		if(rear==front){
			try {
				throw new Exception("堆棧為空");
			}
			catch (Exception e) {
				e.printStackTrace();
			}
			return null;
		} else{
			//暫存隊頭元素 
			Node p=front.next;
			T x=p.data;
			//將隊頭元素所在節點摘鏈 
			front.next=p.next;
			//判斷出隊列長度是否為1 
			if(p.next==null) 
			  rear=front;
			//刪除節點 
			p=null;
			size--;
			return x;
		}
	}
	/** 
 * 隊列長隊 
 * @return 
 * @author WWX 
 */
	public int size(){
		return size;
	}
	/** 
 * 判斷隊列是否為空 
 * @return 
 * @author WWX 
 */
	public Boolean isEmpty(){
		return size==0;
	}
}

以上是“java如何實現隊列數據結構”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹阳市| 盐津县| 双柏县| 汕头市| 莒南县| 南靖县| 池州市| 集安市| 大宁县| 林芝县| 岳阳市| 睢宁县| 正宁县| 祁东县| 罗城| 北碚区| 墨玉县| 隆安县| 晋州市| 新田县| 江达县| 买车| 青浦区| 五华县| 邛崃市| 碌曲县| 伽师县| 合作市| 都江堰市| 湟中县| 健康| 昌黎县| 肃南| 临清市| 永州市| 河池市| 溧阳市| 西安市| 安远县| 平顺县| 淮滨县|