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

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

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

服務器之家 - 編程語言 - Java教程 - Java基于堆結構實現優先隊列功能示例

Java基于堆結構實現優先隊列功能示例

2021-02-07 17:30yunshouhu Java教程

這篇文章主要介紹了Java基于堆結構實現優先隊列功能,結合實例形式分析了java優先隊列的簡單定義與使用方法,需要的朋友可以參考下

本文實例講述了Java基于堆結構實現優先隊列功能。分享給大家供大家參考,具體如下:

?
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package Demo;
import java.util.NoSuchElementException;
/*
 * 小頂堆 java使用堆結構實現優先隊列
 */
public class JPriorityQueue<E> {
  @SuppressWarnings("hiding")
    class QueueNode<E> {
    int capacity;
    int size;
    E[] queue;
    QueueNode(int capacity) {
      this.capacity = capacity;
    }
  }
  QueueNode<E> node;
  public void print()
  {
    E[] objs=this.node.queue;
    for(int i=0;i<this.node.size;i++)
    {
      System.out.print(objs[i]+" ");
    }
    System.out.println();
  }
  @SuppressWarnings("unchecked")
    public JPriorityQueue(int capacity) {
    node = new QueueNode<E>(capacity);
    node.size = 0;
    node.queue = (E[]) new Object[capacity + 1];
  }
  public void add(E x) {
    int k = node.size;
    while (k > 0) {
      int parent = (k - 1) / 2;
      E data = node.queue[parent];
      @SuppressWarnings({ "unchecked", "rawtypes" })
      Comparable<E> key = (Comparable) x;
      if (key.compareTo(data) >= 0)
        break;
      node.queue[k] = data;
      k = parent;
    }
    node.queue[k] = x;
    node.size++;
  }
  public E remove() {
    int parent = 0;
    if (node.size == 0) {
      throw new NoSuchElementException("queue is null");
    }
    E min = node.queue[0];// top
    E last = node.queue[node.size - 1];// last
    node.queue[0] = last;// add the last to top
    node.queue[node.size - 1] = null;
    node.size--;
    @SuppressWarnings("unchecked")
    Comparable<? super E> complast = (Comparable<? super E>) last;
    if (node.size == 2 && complast.compareTo(node.queue[1]) > 0) { // 只剩下最后兩個結點,進行比較
      node.queue[0] = node.queue[1];
      node.queue[1] = last;
    }
    if (node.size > 2) { // 大于三個結點的,向下旋轉
      while (parent < node.size / 2) {
        int left = 2 * parent + 1;// left child
        int right = left + 1;// right child
        E root = node.queue[parent];
        @SuppressWarnings("unchecked")
        Comparable<? super E> comproot = (Comparable<? super E>) root;
        if (comproot.compareTo(node.queue[left]) < 0
          && comproot.compareTo(node.queue[right]) < 0)
          break;
        @SuppressWarnings("unchecked")
        Comparable<? super E> compleft = (Comparable<? super E>) node.queue[left];
        if (compleft.compareTo(node.queue[right]) <= 0) {
          node.queue[parent] = node.queue[left];
          node.queue[left] = root;
          parent = left;
        } else {
          node.queue[parent] = node.queue[right];
          node.queue[right] = root;
          parent = right;
        }
        if (right * 2 >= node.size)
          break;
      }
    }
    return min;
  }
  public static void main(String[] args) {
    System.out.println("服務器之家測試結果:");
    JPriorityQueue<String> queue = new JPriorityQueue<String>(10);
    queue.add("Z");
    queue.add("B");
    queue.add("QZA");
    queue.add("QBA");
    queue.add("EAA");
    queue.add("A");
    queue.print();
    // queue.remove();
    // queue.remove();
    // queue.remove();
    // queue.remove();
    // 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(queue.remove());
    System.out.println(queue.remove());
  }
}

運行結果:

Java基于堆結構實現優先隊列功能示例

希望本文所述對大家java程序設計有所幫助。

原文鏈接:http://blog.csdn.net/earbao/article/details/46275845

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 校花的第一次好紧好爽 | 欧美成人免费草草影院视频 | 日本免费高清在线观看播放 | 亚洲欧美专区 | 欧美18~20性hd | 国产成人一区二区三区小说 | 99热线| 国产梦呦精品 | 菠萝视频污 | 四虎影音在线 | 含羞草传媒一天免费看下 | 天天快乐高清在线观看 | 欧美成人在线影院 | 成人久久18免费网站 | 波多野结衣在线看 | 视频一区二区三区欧美日韩 | 极致堕落(高h) | 无限在线看免费视频大全 | 久久人妻熟女中文字幕AV蜜芽 | 四虎永久网址影院 | 日本护士撒尿 | 国产精品一区二区三区久久 | 777午夜精品免费播放 | 免费观看二十女人一摸是水 | 美女gif趴跪式抽搐动态图 | 国产精品久久现线拍久青草 | 成人一区二区免费中文字幕 | 欧美 变态 另类 人妖班 | 国产99视频精品免视看7 | 护士videossexo另类 | 日本三级斤| 图片专区小说专区卡通动漫 | 亚洲国产成人在人网站天堂 | 羞羞私人影院可以直接免费观影吗 | 憋尿调教绝望之岛 | 四虎精品成人免费视频 | 日本xxxx69hd| 男同桌脱我奶罩吸我奶作文 | 国产视频91在线 | 羞羞私人影院可以直接免费观影吗 | 欧美人成绝费网站色www吃脚 |