国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java數組模擬優先級隊列數據結構的實例

2019-11-26 14:26:00
字體:
來源:轉載
供稿:網友

優先級隊列
如果我們給每個元素都分配一個數字來標記其優先級,不妨設較小的數字具有較高的優先級,這樣我們就可以在一個集合中訪問優先級最高的元素并對其進行查找和刪除操作了。這樣,我們就引入了優先級隊列 這種數據結構。 優先級隊列(priority queue) 是0個或多個元素的集合,每個元素都有一個優先權,對優先級隊列執行的操作有(1)查找(2)插入一個新元素 (3)刪除 一般情況下,查找操作用來搜索優先權最大的元素,刪除操作用來刪除該元素 。對于優先權相同的元素,可按先進先出次序處理或按任意優先權進行。

Java數組模擬隊列
隊列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的后端進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。這也就是我們平常經常用說到的先進先出原則(FIFO)。Java 中的 List 就可以作為隊列來使用,在隊列尾部添加元素則使用 list.add 方法,從隊列頭部刪除元素則使用 list.remove 方法。

Java數組模擬優先級隊列結構實例:

package datastruct;  import java.util.Arrays; import java.util.Comparator;  /**  * 用數組模擬 優先級隊列 優先級高的排前、先出 線性表結構  * 類似使用了比較器的 TreeSet、TreeMap  */ public class SimulatePriorityQueue {      public static void main(String[] args) {     SimulatePriorityQueue queue = new SimulatePriorityQueue(4); //   SimulateQueue queue = new SimulateQueue(); //   System.out.println("取出元素:" + queue.remove());     queue.insert(1);     queue.insert(3);     queue.insert(2);     queue.insert(5);     queue.insert(4);     System.out.println("size:" + queue.size());     System.out.println("peek:" + queue.peek());     System.out.println("取出元素:" + queue.remove());     System.out.println("取出元素:" + queue.remove());     System.out.println("取出元素:" + queue.remove());     System.out.println("取出元素:" + queue.remove()); //   System.out.println("取出元素:" + queue.remove());     System.out.println("size:" + queue.size());     System.out.println();   }    private int mSize = 3;     //大小   private int[] mArray;    //數組   private int mNextItem;     //下一個位置,也可當作 當前的元素數      public SimulatePriorityQueue() {     mArray = new int[mSize];     mNextItem = 0;   }   public SimulatePriorityQueue(int size) {     this.mSize = size;     mArray = new int[mSize];     mNextItem = 0;   }   /**    * 插入元素    * @param item    */   public void insert(int item) {     if (!isFull()) {       mArray[mNextItem++] = item;       for (int i = 0; i < mNextItem; i++) {//冒泡排序         for (int j = 0; j < mNextItem - 1; j++) {           if (mArray[j] > mArray[j + 1]) {             mArray[j] = mArray[j + 1] + 0 * (mArray[j + 1] = mArray[j]);             System.out.println(Arrays.toString(mArray));           }         }       }       System.out.println(Arrays.toString(mArray));     } else {       System.out.println("----不能插入元素了,隊列已滿----");     }   }   /**    * 移出元素 先進先出    * @return    */   public int remove() {     if (!isEmpty()) {       return mArray[--mNextItem];     } else {       throw new IllegalArgumentException("沒有元素可以取出了");     }   }   /**    * 查看前面的元素    * @return    */   public int peek() {     return mArray[mNextItem - 1];   }   /**    * 是否為空    * @return    */   public boolean isEmpty() {     return mNextItem == 0;   }   /**    * 是否滿    * @return    */   public boolean isFull() {     return mNextItem == mSize;   }   /**    * size    * @return    */   public int size() {     return mNextItem;   }    } 

輸出結果:

[1, 0, 0, 0][1, 3, 0, 0][1, 2, 3, 0][1, 2, 3, 0][1, 2, 3, 5]----不能插入元素了,隊列已滿----size:4peek:5取出元素:5取出元素:3取出元素:2取出元素:1size:0

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武义县| 古浪县| 兖州市| 临朐县| 荔波县| 商河县| 南城县| 谢通门县| 辽中县| 共和县| 隆林| 台江县| 天峨县| 会同县| 称多县| 宜春市| 光泽县| 长海县| 阳西县| 柘荣县| 雷州市| 泗阳县| 大宁县| 兴海县| 突泉县| 韩城市| 连城县| 沈丘县| 塔城市| 盘山县| 农安县| 从化市| 方城县| 吉安市| 定南县| 梨树县| 浠水县| 常州市| 仁寿县| 克拉玛依市| 布拖县|