優先佇列不再遵循先入先出的原則,誰的優先順序最高,誰先出隊,分為兩種情況:
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 概念 優先順序佇列,顧名思義,就是一種根據一定優先順序儲存和取出資料的佇列。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。優先順序佇列是堆的一種常見應用。有最大優先順序佇列 最大堆 和最小優先順序佇列 最小堆 優先順序佇列是一種維護有一組元素構成...