一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - java實現隊列數據結構代碼詳解

java實現隊列數據結構代碼詳解

2021-02-05 12:12顏小雀 JAVA教程

這篇文章主要介紹了java實現隊列數據結構代碼詳解,簡單介紹了隊列結構以應用場景,涉及詳細實現代碼,還是比較不錯的,這里分享給大家,需要的朋友可以參考下。

什么是隊列結構

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

分類:

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

基本操作:

入隊列
出隊列 

給出一些應用隊列的場景

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

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

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

隊列是先進先出的! 

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//鏈的數據結構
 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;
?
1
2
3
4
5
public LinkQueue(){
    Node n=new Node(null,null);
    n.next=null;
    front=rear=n;
}

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

?
1
2
3
4
5
6
7
8
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;這樣頭指針就指向了第二個元素(每一次調用的時候隊列頭指針指會發生變化)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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(是否為空),就不在說了。(因為太簡單了!)

具體源碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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;
    }
}

另:我曾經看過一本JavaScript數據結構書,里面講的淺顯易懂,很適合前端搞js開發的讓人理解的更為深入,在此給予推薦。如有不足之處,歡迎留言指出。

原文鏈接:https://www.cnblogs.com/coversky/p/6350086.html

延伸 · 閱讀

精彩推薦
  • JAVA教程Restful傳遞數組參數及注解大全

    Restful傳遞數組參數及注解大全

    這篇文章主要介紹了Restful傳遞數組參數及注解大全的相關資料,需要的朋友可以參考下 ...

    mrr9532020-03-10
  • JAVA教程JAVA編程實現UDP網絡通訊的方法示例

    JAVA編程實現UDP網絡通訊的方法示例

    這篇文章主要介紹了JAVA編程實現UDP網絡通訊的方法,簡單說明了UDP通訊的原理并結合實例形式分析了java實現UDP通訊的相關類與使用技巧,需要的朋友可以參考...

    遲做總比不做強4712020-12-09
  • JAVA教程java使用spring實現發送mail的方法

    java使用spring實現發送mail的方法

    這篇文章主要介紹了java使用spring實現發送mail的方法,涉及java基于spring框架發送郵件的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下 ...

    crazy_itman3822020-01-10
  • JAVA教程Java中的main函數的詳細介紹

    Java中的main函數的詳細介紹

    這篇文章主要介紹了Java中的main函數的詳細介紹的相關資料,main()函數在java程序中必出現的函數,這里就講解下使用方法,需要的朋友可以參考下...

    rickiyeat7262021-01-10
  • JAVA教程整理Java中的ClassLoader核心知識點

    整理Java中的ClassLoader核心知識點

    本文整理了基于 JDK8 的 ClassLoader 核心知識點,包括 JVM 中 ClassLoader 種類、ClassLoader 執行順序、父加載器概念、雙親委派機制、自定義類加載器。...

    今日頭條3462020-11-06
  • JAVA教程Javaweb中使用Jdom解析xml的方法

    Javaweb中使用Jdom解析xml的方法

    Jdom是一個開源項目,基于樹形結構,利用純java的技術對XML文檔實現解析,生成,序列化以及多種操作.這篇文章主要介紹了Javaweb中使用Jdom解析xml的方法的...

    升少2132020-06-18
  • JAVA教程詳解Spring框架注解掃描開啟之配置細節

    詳解Spring框架注解掃描開啟之配置細節

    本篇文章主要介紹了詳解Spring框架注解掃描開啟之配置細節,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    Javahih1892020-12-15
  • JAVA教程JDBC使用游標實現分頁查詢的方法

    JDBC使用游標實現分頁查詢的方法

    這篇文章主要介紹了JDBC使用游標實現分頁查詢的方法,實例分析了jdbc查詢過程中游標的使用及查詢分頁相關實現技巧,需要的朋友可以參考下 ...

    々上善若水々4812020-06-06
主站蜘蛛池模板: 女同学用白丝脚玩我的故事 | 欧美18一19性高清hd4k | 欧美精品1区 | bnb99八度免费影院 | 亚洲AV国产国产久青草 | 男人和女人全黄一级毛片 | 国产欧美日韩高清专区ho | 女同学高中你下面好紧 | 秋葵视频成人 | 国产精品福利在线观看秒播 | 国产国语在线播放视频 | 男人搡女人视频免费看 | 欧美视频在线一区二区三区 | 公交车强校花系列小说 | 欧美在线观看网址 | 久久亚洲伊人 | 日本老妇人乱视频 | 高清在线免费观看 | 精品精品精品 | ass天天裸妇pics | 色狼屋 | 91极品国产 | 久久青草免费91线频观看站街 | 国产玖玖在线观看 | chinese野外gay军人 | 日韩激情视频在线观看 | 久久青草费线频观看国产 | 男人插女人软件 | 波多野结在线 | 日韩大片免费看 | 午夜DV内射一区区 | 按摩椅play啊太快了h | 精品视频日本 | 草莓视频在线观看免费 | 欧美性一级交视频 | 91视在线国内在线播放酒店 | 91天堂素人97年清纯嫩模 | 调教全程肉动画片在线观看 | 被教官揉了一晚上的奶小说 | 日韩毛片网 | 日本亚洲欧洲高清有码在线播放 |