資料結構06 優先佇列和堆

2021-08-24 23:35:42 字數 2410 閱讀 2282

因為這些日子的懶惰,所以一直沒有更新部落格,實在在很抱歉。這裡我將繼續和大家分享資料結構的知識,希望大家可以喜歡。本篇文章我將會分享關於優先佇列和堆的相關知識,那麼我們來說下,關於這兩種資料結構的各自相關的文字定義。

首先,先說下什麼是優先佇列,其實在前面資料結構02——棧和佇列這篇文章中,我們已經介紹過了關於佇列的知識,之前說過佇列就像我們日常生活中的排隊,先進的先出,但是對於優先佇列,它卻並不遵守這樣的規則,優先佇列表現的更像是我們去醫院急診看病一樣,醫生會根據病人病情的輕重來安排誰先看。對於優先佇列是一種抽象資料型別,它表示了一組值和對這組值的操作,後面我們將會用**來體現。

接下來繼續說一下什麼是堆,其實堆它也是一棵樹,所以我們會經常看到什麼二叉堆、多叉堆這樣的一些名詞。長話短說,我們還是來說下堆的具體定義,當一棵二叉樹的每個節點都大於等於它的兩個子節點,他被稱為堆有序。而對於二叉堆而言,它是能夠很好的體現優先佇列的基本操作的,圖中就是堆的表示方式。

圖1:堆的表示

這裡的堆是基於陣列來實現的,所以這裡對於陣列的**我就不貼出來了,大家可以去前面的文章中看看。在這個節段中,我們的**主要實現了向堆中新增、刪除、搜尋等等相關功能。因為是以最大堆來體現的,因此裡面還實現了siftup和siftdown的相關操作。對於siftup而言,,就是在堆中,它的有序狀態因為某個節點變得比它的父節點更大而被打破,那麼我們就需要通過交換它和它的父節點來修復這樣的乙個不平衡的狀態。而對於siftdown而言,就是因為堆的有序狀態因為某個節點而變得比它的兩個子節點或是其中之一更小而打破了,那麼我們就要來交換他們的位置來修復這樣的不平衡狀態。

圖2:堆的上浮和下沉

// heapify的實現(將任意陣列整理成樹結構)

public maxheap(e arr) }

//返回堆中的元素個數

public int size()

//返回乙個布林值,表示堆是否為空

public boolean isempty()

//返回完全二叉樹的陣列表示中,乙個索引所表示的元素的父節點的索引

public int parent(int index)

//返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引

public int leftchild(int index)

//返回完全二叉樹的陣列表示中,乙個索引所表示的元素的右孩子節點的索引

public int rightchild(int index)

//向堆中新增元素

public void add(e e)

//上浮操作

private void siftup(int k)

}//看堆中最大元素

public e findmax()

return data.get(0); }

//取出堆中最大元素

public e extractmax()

//下沉操作

private void siftdown(int k)

if (data.get(k).compareto(data.get(j)) >= 0)

data.swap(k, j);

k = j;

} }

//取出堆中的最大元素, 並且替換成e元素

public e replace(e e)

}1.優先佇列介面的定義

package com.zfy.headandqueue;

public inte***ce queue

2.優先佇列的實現

package com.zfy.headandqueue;

public class priorityqueue> implements queue

@override

public int getsize()

@override

public boolean isempty()

@override

public e getfront()

@override

public void enqueue(e e)

@override

public e dequeue()

}

結束語:溫故而知新,可以為師矣!

參考:bobobo老師的玩轉資料結構和演算法4

資料結構 堆(優先佇列)

一種樹形資料結構,分大根堆,小根堆。大根堆 max heap 滿足所有父節點不小於其任意子節點。小根堆 min heap 滿足所有父節點不大於其任意子節點。在這裡,我們只考慮二叉堆。二叉堆是一棵完全二叉樹。solution 可見,每堆果子分別被合併了n 1次,n 2次,n 3次 1次 則數量越小的堆...

資料結構 優先佇列(堆)

什麼是堆 堆是一棵具有特定性質的二叉樹 堆的基本要求是堆中所有節點的值必須大於等於 或者小於等於 其孩子節點的值 堆應該是一棵完全二叉樹 堆的表示 由於堆在形式上是一棵完全二叉樹,所以用陣列不會浪費儲存空間 public class heap private int ary private int ...

資料結構 優先佇列(堆)

堆 堆通常是乙個可以被看做一棵樹的陣列物件。堆總是滿足下列性質 結構性質 堆總是一棵完全樹。堆序性 堆中某個節點的值總是不大於或不小於其父節點的值 將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。堆的意義就在於 最快的找到最大 最小值,在堆結構中插入乙個值重新構造堆結構,取走最...