優先佇列---最大堆:Java語言實現
package Binary_Tree_Study;
/**
* Created by Administrator on 2018/5/21.
*/
public class MaxHeap {
private int[] array;//基於堆的完全二叉樹
private int N = 0;//儲存在array[1...N]中,array[0]沒有使用
private int maxN;//堆的容量
public MaxHeap(int maxN) {
this.maxN = maxN;
this.array = new int[maxN+1];
}
//堆是否為空
public boolean isEmpty() {
return N == 0;
}
//獲取堆的大小
public int size() {
return N;
}
//堆是否已滿
public boolean isFull() {
return N == maxN;
}
//插入操作
public void insert(int v) {
if(isFull()) {
System.out.println("最大堆已滿");
return;
}
array[++N] = v;
swim(N);
}
//刪除最大元素
public int delMax(){
if(isEmpty()) {
System.out.println("最大堆已空");
return array[0];
}
int max = array[1];//從根節點得到最大元素
exch(1,N--);//將其與最後一個結點交換
sink(1);//恢復堆的有序性
return max;
}
//輔助方法
//比較i是否小於j
private boolean less(int i, int j) {
if((array[i] -array[j]) < 0)
return true;
else
return false;
}
//交換元素
private void exch(int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
//上浮操作
private void swim(int k) {
while (k > 1 && less(k/2, k)) {
exch(k/2, k);
k = k/2;
}
}
//下沉操作
private void sink(int k) {
while (2*k <= N) {
int j = 2*k;
if(j < N && less(j, j+1))
j++;
if(!less(k, j))
break;
exch(k, j);
k = j;
}
}
}
3 參考資料
後記:
後續看了一些博文,感覺寫得挺不錯的,在此備註一下,以便以後查閱。
相關推薦
優先佇列---最大堆:Java語言實現
package Binary_Tree_Study; /** * Created by Administrator on 2018/5/21. */ public class MaxHeap { private int[] array;//基於堆的完全二叉樹 private int N
二叉搜尋樹的插入、刪除、查詢等操作:Java語言實現
1 二叉搜尋樹介紹 二叉搜尋樹(BST, Binary Search Tree),也稱二叉排序樹或二叉查詢樹。二叉搜尋樹:一棵二叉樹,可以為空;如果不為空,滿足以下性質:1. 非空左子樹的所有鍵值小於其根結點的鍵值。2. 非空右子樹的所有鍵值大於其根結點的鍵值。3. 左、右子
平衡二叉樹——AVL樹的旋轉操作:Java語言實現
1 前言2 平衡二叉樹——AVL樹的旋轉操作2.1 AVL樹的特點 AVL樹本質上還是一棵二叉搜尋樹,它的特點是:1.本身首先是一棵二叉搜尋樹。2.帶有平衡條件:每個結點的左右子樹的高度之差的絕對值(平衡因子)最多為1。也就是說,AVL樹,本質上是帶了平衡功能的二叉查詢樹(二
java語言實現快速尋找最大最小值
新建一個數組,然後放入stream種,最後呼叫min或者max函式得到陣列種的最大最小值。 import java.util.Arrays; import org.apache.commons.lang3.ArrayUtils; public class HelloWor
java語言實現樹
span 前序 java語言 wot root 存儲 public == class 首先用Node類定義一個節點,用來存儲每個節點的內容: public class Node { // 關鍵字 private int keyData;
鏈表的基本操作java語言實現
auth ndb ack pan log 定義 pac ext col package com.baorant; public class JavaDemo { public static void main(String[] args) {
OSGi是什麽:Java語言的動態模塊系統(一)
平臺 使用 數據 osgi servle http cto 優點 重啟 OSGi是什麽 OSGi亦稱做Java語言的動態模塊系統,它為模塊化應用的開發定義了一個基礎架構。OSGi容器已有多家開源實現,比如Knoflerfish、Equinox和Apache的Felix。您可
Java初學者必知:Java語言的11大特點
java 後端Java是一種簡單的,面向對象的,分布式的,解釋型的,健壯安全的,結構中立的,可移植的,性能優異、多線程的靜態語言。那麽java語言的特點是什麽呢? 1、Java語言是簡單的 Java 語言的語法與C語言和C++語言很接近,使得大多數程序員很容易學習和使用Java。另一方面,Java丟棄了C++
第二十五節:Java語言基礎-面向對象基礎
view https 面向對象設計 ans 重用 -o 數據 *** 對象 面向對象 面向過程的代表主要是C語言,面向對象是相對面向過程而言,Java是面向對象的編程語言,面向過程是通過函數體現,面向過程主要是功能行為。 而對於面向對象而言,將功能封裝到對象,所以面向對
Mysql:Java程式碼實現資料庫定時備份與還原詳解
一、目的 使用java程式碼實現定時執行Mysql備份與還原。 二、思路 先寫好一個定時器,每隔多少時間執行一次備份 備份方法為,通過java向命令列寫入命令執行 首先在cmd中模擬備份,測試成功後 使用java程式碼實現資料備份功能
牛客網:java入門實現遍歷目錄
專案介紹 遍歷目錄是操作檔案時的一個常見需求。比如寫一個程式,需要找到並處理指定目錄下的所有JS檔案時,就需要遍歷整個目錄。該專案教會你如何使用流式程式設計和lambda表示式,幫助你進一步熟悉java8特性,並且通過它實現目錄遍歷。
Java語言實現雙鏈表
java語言實現雙鏈表其實很簡單,雙鏈表的基本操作有:增、刪、改、差、取得指定節點的內容、判空、節點個數、清除、輸出。 相對比較難一點的是連結串列的刪除,這裡說明一下具體的實現刪除可以在外部寫一個刪除的方法,此處用的方法非常容易理解,不 用像以前那樣考慮是否為頭結點、是否為空等等,只需要兩步操作即可
No.24 我與程式碼的日常:C語言實現簡易通訊錄
#define SIZE 1000 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> typedef struct PersonInfo{ char name[102
分享《OpenCV 3計算機視覺:Python語言實現(第2版)》中文PDF+英文PDF+原始碼
下載:https://pan.baidu.com/s/1gGgEk8Y6X58gfvsmD8U8Xw 更多資料分享:https://www.cnblogs.com/javapythonstudy/ 《OpenCV 3計算機視覺:Python語言實現(第2版)》中文PDF+英文PDF+原始碼中文PDF,20
易學筆記-0:Java語言總結/0.11 Java中輸出的流表示(都是針對位元組陣列byte[ ]操作)
Java中輸出的流表示 針對快取的: ByteArrayOutputStream StringBufferOutputStream 針對檔案的:FileOutputStream 針對物件:ObjectOutputStream
Java語言實現質數演算法
方法一: public class PrimeNumberExample { public static boolean isPrime(long n) { if(n > 2 && (n & 1) == 0)
資料結構與演算法——線性表之順序表(JAVA語言實現 )
資料結構與演算法——線性表之順序表(JAVA語言實現 ) 線性表是由n個數據元素組成的優先序列。 線性表中每個元素都必須有相同的結構,線性表是線性結構中最常用而又最簡單的一種資料結構。線性表由儲存結構是否連續可分為順序表和連結串列。順序表指線性表中每個元素按順序依次儲存,線性表中邏
劍指Offer - 複雜連結串列的複製(Java語言實現)
題目描述 輸入一個複雜連結串列(每個節點中有節點值,以及兩個指標,一個指向下一個節點,另一個特殊指標指向任意一個節點),返回結果為複製後複雜連結串列的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空) 思路分析: 方法1,藉助Hash
非對稱加密的簽名和驗籤、加密和解密的Java語言實現
本文采用java.security包的簽名和驗籤。採用A的私鑰簽名傳送至B,B採用A的公鑰進行驗籤。 加解密可以私鑰加密、公鑰解密(或者公鑰加密、私鑰解密)。 一般用於銀行報文傳輸、支付寶、微信、銀行以及各大銀行的資料交換。 package com.example.demo; impo
Java語言實現六種排序演算法
Java語言實現六種排序演算法 Java語言實現六種排序演算法 氣泡排序 插入排序 歸併排序 快速排序 希爾排序 選擇排序