Java數組模仿優先級隊列數據構造的實例。本站提示廣大學習愛好者:(Java數組模仿優先級隊列數據構造的實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java數組模仿優先級隊列數據構造的實例正文
優先級隊列
假如我們給每一個元素都分派一個數字來標志其優先級,無妨設較小的數字具有較高的優先級,如許我們便可以在一個聚集中拜訪優先級最高的元素並對其停止查找和刪除操作了。如許,我們就引入了優先級隊列 這類數據構造。 優先級隊列(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:4 peek:5 掏出元素:5 掏出元素:3 掏出元素:2 掏出元素:1 size:0