挑战程序设计竞赛(算法和数据结构)——10.4优先队列的JAVA实现
Posted 小乖乖的臭坏坏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——10.4优先队列的JAVA实现相关的知识,希望对你有一定的参考价值。
题目:
讲解:
代码:
import java.util.Scanner;
public class PriorityQueue
public static void main(String[] args)
int MAX = 1000;
int H = 0;//堆的长度
int[] A = new int[MAX+1];
while (true)
Scanner cin_string = new Scanner(System.in);
String s = cin_string.nextLine();
String[] string_arr = s.split(" ");//如果不是print那很显然是另有操作,需要分割
// String s = cin.nextLine();//nextLine()函数获取的是一整行的内容其中也包括了(\\n)也就是换行符,如果循环执行会出现nextLine()方法没有执行直接跳过的情况
if (string_arr[0].equals("end"))
break;
else if (string_arr[0].equals("insert"))
int key = Integer.valueOf(string_arr[1]);
H = insert(A, H, key);
else if (string_arr[0].equals("extract"))
H = heapExtractMax(A, H);
public static int insert(int[] A, int H, int key)//传入插入的值,数组和堆的长度
H++;
A[H] = -Integer.MIN_VALUE;
heapIncreaseKey(A, H, key);
return H;
public static void heapIncreaseKey(int[] A, int H, int key)
if(key<A[H])
System.out.println("Error:新键值小于当前键值");
return;
A[H] = key;
while(H>1 && A[keyParent(H)]<A[H])
int temp = A[H];
A[H] = A[keyParent(H)];
A[keyParent(H)] = temp;
H = keyParent(H);
public static int heapExtractMax(int[] A, int H)
if(H<1)
System.out.println("Error:堆向下溢出");
int max = A[1];
A[1] = A[H];
H--;
maxHeap(A, 1);
System.out.println(max);
return H;
public static void maxHeap(int[] A, int i)
int l = keyLeft(i);
int r = keyRight(i);
int H = A.length-1;
//A[r]右子节点可能不存在,用r_temp来代替这个值
int r_temp;
if(r>H)r_temp = -1;
elser_temp = A[r];
int largest;
//从左子节点、自身、右子节点中选出值最大的节点
if(l <= H && A[l]>A[i])largest = l;
elselargest = i;
if (r <= H && r_temp > A[largest]) largest = r;
if(largest != i)//i的子节点值更大时
int temp = A[i];
A[i] = A[largest];
A[largest] = temp;
maxHeap(A, largest);
public static int keyParent(int i)return i/2;
public static int keyLeft(int i)return 2*i;
public static int keyRight(int i)return 2*i+1;
输入输出:
以上是关于挑战程序设计竞赛(算法和数据结构)——10.4优先队列的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章
挑战程序设计竞赛(算法和数据结构)——12.3深度优先搜索的JAVA实现
挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现
挑战程序设计竞赛(算法和数据结构)——分割(下)&快速排序的JAVA实现