java資料結構----隊列,優先順序隊列

來源:互聯網
上載者:User

標籤:.com   min   com   刪除   for   stat   temp   隊列   3.2   

1.隊列:和棧中的情況不同,隊列中的資料項目不總是從數組下標0開始,移除一個資料項目後,隊頭指標會指向下標較高的資料項目,其特點:先入先出

2.圖解

 

 3.隊列的實現代碼:

  3.1.Queue.java

 1 package com.cn.queue; 2 /** 3  * 資料結構之隊列實現 4  * @author Administrator 5  * 6  */ 7 public class Queue { 8 private int maxsize; 9 private long[] queuearray;10 private int front;11 private int rear;12 private int nItems;13 public Queue(int s){14     maxsize = s;15     queuearray = new long[maxsize];16     front = 0;17     rear = -1;18     nItems = 0;19 }20 public void insert(long j){21     if (rear == maxsize - 1)22         rear = -1;23     queuearray[++ rear] = j;24     nItems ++;25 }26 public long remove(){27     long temp = queuearray[front ++];28     if (front == maxsize)29         front = 0;30     nItems --;31     return temp;32 }33 public long peekFront(){34     return queuearray[front];35 }36 public boolean isEmpty(){37     return (nItems == 0);38 }39 public boolean isFull(){40     return (nItems == maxsize);41 }42 public int size(){43     return nItems;44 }45 46 }

  3.2.QueueTest.java

 1 package com.cn.queue; 2  3 public class QueueTest { 4 public static void main(String[] args) { 5     Queue q = new Queue(100); 6     q.insert(100); 7     q.insert(200); 8     q.insert(300); 9     while (q.size()!=0){10         System.out.print(q.remove()+"   ");11     }12     System.out.println("");13     System.out.println(q.isEmpty());14 }15 }

4.隊列插入和刪除的時間複雜度和棧的一樣,都是O(1)

5.優先順序隊列:優先順序隊列是比棧和隊列更加專用的資料結構,他有一個隊頭和隊尾,並且也是從隊頭移除資料項目,不過在優先順序隊列中,資料項目按關鍵字的值有序,這樣關鍵字最小的資料項目總是在隊頭,而最大的就在隊尾。做插入操作時會按照順序插入到合適的位置以確保隊列的順序。除了可以快速存取最小關索引值的資料項目,優先隊列還必須實現非常快的插入資料項目,由此,優先順序隊列通常使用一種稱為堆得資料結構實現。本程式暫時使用數組實現,該實現的插入比較慢,適用於資料量小,並且對速度要求並不高情境。

6.優先順序隊列的實現:

  6.1.PriorityQ.java

 1 package com.cn.queue; 2 /** 3  * 優先順序隊列的實現代碼 4  * @author Administrator 5  * 6  */ 7 public class PriorityQ { 8 private int maxsize; 9 private long[] queuearray;10 private int nItems;11 public PriorityQ(int s){12     maxsize = s;13     queuearray = new long[maxsize];14     nItems = 0;15 }16 public void insert(long item){17     int k;18     if (nItems == 0)19         queuearray[nItems ++] = item;20     else{21         for(k = nItems - 1;k >= 0;k --){22             if (item > queuearray[k])23                 queuearray[k + 1] = queuearray[k];24             else25                 break;26         }27         queuearray[k + 1] = item;28         nItems ++;29     }30 }31 public long remove(){32     return queuearray[-- nItems];33 }34 public long peekmin(){35     return queuearray[nItems - 1];36 }37 public boolean isEmpty(){38     return (nItems == 0);39 }40 public boolean isFull(){41     return (nItems == maxsize);42 }43 }

  6.2圖解

7.優先順序隊列的效率:插入操作時間複雜度位O(N),刪除操作時間複雜度為O(1),後續堆資料結構將改進他。

java資料結構----隊列,優先順序隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.