優先順序佇列(堆)

2021-10-17 15:55:27 字數 1751 閱讀 7805

2、 堆(heap)

3、 優先順序佇列

使用陣列儲存二叉樹結構,方式即將二叉樹用層序遍歷方式放入陣列中。一般只適合表示完全二叉樹,因為非完全二叉樹會有空間的浪費。這種方式的主要用法就是堆的表示。

已知雙親(parent)的下標,則:

左孩子(left)下標 = 2 * parent + 1;

右孩子(right)下標 = 2 *parent + 2;

已知孩子(不區分左右)(child)下標,則:

雙親(parent)下標 = (child - 1) / 2;

堆邏輯上是一棵完全二叉樹

堆物理上是儲存在陣列中

滿足任意結點的值都大於其子樹中結點的值,叫做大堆,或者大根堆,或者最大堆

反之,則是小堆,或者小根堆,或者最小堆

堆的基本作用是,快速找集合中的最值

**如下:

//向下調整

//size:array中哪部分內容是堆

//index:從哪個位置開始進行向下調整

public

static

void

shiftdown

(int

array,

int size,

int index)

// 上述條件結束後,child肯定對應左右子樹中比較大的元素。

// 在拿當前的這個child和parent位置的元素比較一下

if(array[child]

>array[parent]

)else

parent = child;

child =

2*parent+1;

}}//建堆

public

static

void

createheap

(int

array,

int size)

}//入佇列

public

static

void

shiftup

(int

array,

int index)

int t = array[parent]

; array[parent]

= array[index]

; array[index]

= t;

index = parent;}}

//出佇列

public

class

mypriorityqueue

public

intpoll()

public

intpeek()

}

public

static

void

shiftup

(int

array,

int index)

int t = array[parent]

; array[parent]

= array[index]

; array[index]

= t;

index = parent;}}

public

class

mypriorityqueue

public

intpoll()

public

intpeek()

}

堆(優先順序佇列)

c 的 stl 中提供了 優先佇列 這一容器,它和普通的 fifo 佇列都定義在 中,有 push 和 pop 過程,分別表示 往佇列裡加入新元素 和 從佇列裡刪除隊首元素 唯一的區別是,在優先佇列中,元素並不是按照進入佇列的先後順序排列,而是按照優先順序的高低順序排列 換句話說,pop 刪除的是優...

堆 優先順序佇列

1一般二叉樹的順序儲存 層序遍歷方式 使用陣列儲存二叉樹結構,即將二叉樹 按照層序遍歷 的方式放入陣列.這種方式一般只適用於完全二叉樹,一般的二叉樹會造成空間浪費比較嚴重.2堆 heap 在邏輯上就是乙個 完全二叉樹,在物理上儲存在 陣列 中.1 滿足任意結點的值都大於其子樹的結點的值.叫做大堆,反...

優先順序佇列 堆

1.1 堆的概念 堆邏輯上是一棵完全二叉樹 堆物理上是儲存在陣列中位元科技 滿足任意結點的值都大於其子樹中結點的值,叫做大堆,或者大根堆,或者最大堆 反之,則是小堆,或者小根堆,或者最小堆 堆的基本作用是,快速找集合中的最值 1.2儲存方式 使用陣列儲存二叉樹結構,方式是將二叉樹用層序遍歷方式放入陣...