C 寫演算法之優先佇列

2021-10-02 07:32:51 字數 1321 閱讀 6933

優先佇列不再遵循先入先出的原則,誰的優先順序最高,誰先出隊,分為兩種情況:

1.最大優先佇列,無論入隊順序如何,都是當前最大的元素優先出隊;

2.最小優先佇列,無論入隊順序如何,都是當前最小的元素優先出隊;

優先佇列的實現

二叉堆的特性:

1.最大堆堆頂是整個堆中的最大元素;

2.最小堆的堆頂是整個堆中最小的元素。

因此可以用最大堆實現最大優先佇列,每一次入隊就是堆的插入操作,出隊就是刪除堆頂節點。入隊是先把值放到佇列最後,再上浮;出隊是刪除堆頂元素,取佇列最後乙個值放堆頂,再下沉。

上沉和下浮時間複雜度都是o(logn)。

**實現(二叉堆實現優先佇列):

using system;

using system.collections.generic;

namespace csharptest01

/// /// 入隊

///

public void enqueue(int key)

array[size++] = key;

upadjust();

}public int dequeue()

// 獲取堆頂元素

int head = array[0];

// 讓最後乙個元素移動到堆頂

array[0] = array[--size];

downadjust();

return head;

}/// /// 上浮調整

///

private void upadjust()

array[childindex] = temp;

}/// /// 下沉調整

///

public void downadjust()

// 如果父節點大於任何乙個孩子的值,直接跳出

if (temp >= array[childindex])

array[parentindex] = array[childindex];

parentindex = childindex;

childindex = 2 * childindex + 1;

}array[parentindex] = temp;

}/// /// 佇列擴容

///

private void resize()

}class program}}

演算法之優先佇列

1 概念 優先順序佇列,顧名思義,就是一種根據一定優先順序儲存和取出資料的佇列。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。優先順序佇列是堆的一種常見應用。有最大優先順序佇列 最大堆 和最小優先順序佇列 最小堆 優先順序佇列是一種維護有一組元素構成...

C 寫演算法之佇列的基本操作

用陣列來實現佇列的一種比較好的方式是迴圈佇列。迴圈佇列不但充分利用了陣列的空間,還避免元素整體移動的麻煩。迴圈佇列要注意的是隊頭和隊尾的下標 計算方式 1.新的隊頭下標 front front 1 array.length 2.新的隊尾下標 rear rear 1 array.length 3.隊尾...

演算法之優先順序佇列

1 概念 優先順序佇列,顧名思義,就是一種根據一定優先順序儲存和取出資料的佇列。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。優先順序佇列是堆的一種常見應用。有最大優先順序佇列 最大堆 和最小優先順序佇列 最小堆 優先順序佇列是一種維護有一組元素構成...