最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基于堆結(jié)構(gòu)實(shí)現(xiàn)優(yōu)先隊列功能示例

 更新時間:2017年11月21日 08:59:54   作者:yunshouhu  
這篇文章主要介紹了Java基于堆結(jié)構(gòu)實(shí)現(xiàn)優(yōu)先隊列功能,結(jié)合實(shí)例形式分析了java優(yōu)先隊列的簡單定義與使用方法,需要的朋友可以參考下

本文實(shí)例講述了Java基于堆結(jié)構(gòu)實(shí)現(xiàn)優(yōu)先隊列功能。分享給大家供大家參考,具體如下:

package Demo;
import java.util.NoSuchElementException;
/*
 * 小頂堆 java使用堆結(jié)構(gòu)實(shí)現(xiàn)優(yōu)先隊列
 */
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) { // 只剩下最后兩個結(jié)點(diǎn),進(jìn)行比較
      node.queue[0] = node.queue[1];
      node.queue[1] = last;
    }
    if (node.size > 2) { // 大于三個結(jié)點(diǎn)的,向下旋轉(zhuǎn)
      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("腳本之家測試結(jié)果:");
    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());
  }
}

運(yùn)行結(jié)果:

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

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

相關(guān)文章

最新評論

诏安县| 濮阳县| 通许县| 论坛| 新巴尔虎左旗| 息烽县| 昌宁县| 平果县| 灌阳县| 汕头市| 如东县| 阿拉尔市| 扎鲁特旗| 改则县| 湛江市| 嘉兴市| 大余县| 湾仔区| 怀集县| 和龙市| 科技| 平果县| 额济纳旗| 普安县| 绥化市| 盈江县| 穆棱市| 自治县| 海城市| 太康县| 城固县| 鄂伦春自治旗| 思茅市| 泽州县| 武冈市| 涟水县| 龙川县| 陇南市| 武平县| 丹凤县| 历史|