• 二叉堆实现优先级队列Java


     1 public class PriQueue {
     2     private static final int DEFAULT_SIZE = 10;
     3     private int[] Q;
     4     private int qsize;
     5     private int top = -1;
     6 
     7     public PriQueue() {
     8         qsize = DEFAULT_SIZE;
     9         Q = new int[qsize];
    10     }
    11 
    12     public PriQueue(int qsize) {
    13         this.qsize = qsize;
    14         Q = new int[qsize];
    15     }
    16 
    17     public boolean isEmpty() {
    18         return top < 0;
    19     }
    20 
    21     public void push(int item) {
    22         if (top >= qsize - 1) {
    23             System.out.println("Queue is full");
    24             return;
    25         }
    26         Q[++top] = item;
    27         riseStack(Q, top);
    28     }
    29 
    30     public int pop() {
    31         if (top < 0) {
    32             System.out.println("Queue is empty");
    33             return Integer.MIN_VALUE;
    34         }
    35 
    36         int retVal = Q[0];
    37         Q[0] = Q[top--];
    38         sinkStack(Q, 0, top + 1);
    39         return retVal;
    40     }
    41 
    42     @Override
    43     public String toString() {
    44         if (top < 0)
    45             return new String("[]");
    46 
    47         StringBuilder strb = new StringBuilder("[");
    48         int i = 0;
    49         for (; i < top; i++) {
    50             strb.append(Q[i] + ",");
    51         }
    52         strb.append(Q[i] + "]");
    53 
    54         return strb.toString();
    55     }
    56 
    57 
    58     private void riseStack(int[] arr, int index) {
    59         int parent = (index - 1) / 2;
    60         int temp = arr[index];
    61         while (index != 0) {
    62             if (temp > arr[parent]) {
    63                 arr[index] = arr[parent];
    64                 index = parent;
    65                 parent = (index - 1) / 2;
    66             } else
    67                 break;
    68         }
    69         arr[index] = temp;
    70     }
    71     
    72     private void sinkStack(int[] arr, int index, int stackSize) {
    73         int left = 2 * index + 1;
    74         int pValue = arr[index];
    75         while (left < stackSize) {
    76             if (left + 1 < stackSize)
    77                 left = arr[left] > arr[left + 1] ? left : left + 1;
    78             if (arr[left] > pValue) {
    79                 arr[index] = arr[left];
    80                 index = left;
    81                 left = 2 * index + 1;
    82             } else
    83                 break;
    84         }
    85         arr[index] = pValue;
    86     }
    87 }
    View Code
  • 相关阅读:
    字符串加密
    接口实例
    RecyclerView添加Hearder
    基于Vue实现图片在指定区域内移动
    Tinymce 编辑器添加自定义图片管理插件
    LocalStorage和sessionStorage之间的区别
    javascript之url转义escape()、encodeURI()和decodeURI(),ifram父子传参参数有中文时出现乱码
    Js实现简单的音频播放
    通用CSS命名规范
    Hbuilder常用功能汇总
  • 原文地址:https://www.cnblogs.com/endenvor/p/9283281.html
Copyright © 2020-2023  润新知