stl裡面的優先佇列沒有查詢功能,但是在寫a*演算法時必須要對優先佇列進行資料查詢,那麼就只能自己實現了。相比於stl庫里的優先佇列,增加了查詢功能。
參考文章:
#ifndef priority_queue_x_h
#define priority_queue_x_h
#include using namespace std;
/** 1, 建立最小堆,二叉堆是完全二叉樹。資料的儲存結構可以用陣列
2, 堆得資料插入操作:每次插入都是將新資料放在陣列最後,通過呼叫函式heapadjustup實現
3, 堆的資料刪除操作:每次只能刪除第0個資料,把最後乙個資料值賦給根節點,然後從根節點開始一次自上而下的調整,借助函式heapadjustdown。
4, 對於節點i,它的左孩子是 2*i+1,右孩子是 2*i+2。第乙個節點在陣列的下標0處
*/templateclass priority_queue
t& top();
void pop();
void pop(t & tar);
void push(t & dat);
bool find(t & dst);
bool empty() const;
void make_queue_sorted(vector&dst);
private:
void buildheap();
void heapadjustup(int i);
void heapadjustdown(int i);
private:
unsigned int t_size;
vectorvar;
};templatevoid _swap(t &a, t& b)
templatet& priority_queue::top()
}templatebool priority_queue::empty() const
templatebool priority_queue::find(t & dst)
var[i] = temp;
}templatevoid priority_queue::pop()
}templatevoid priority_queue::pop(t & tar)
var[i] = temp;
}templatevoid priority_queue::push(t & dat)
templatevoid priority_queue::make_queue_sorted(vector&dst)
{ unsigned int size, i;
//臨時儲存資料
size = t_size;
vectortmpvec;
tmpvec.resize(var.size());
memcpy(tmpvec.data(), var.data(), var.size()*sizeof(t));
//排序
for(i=0; i
優先佇列(3道優先佇列問題)
優先佇列是一種十分強大的資料結構,它保持了一種動態的有序性,對於不斷改變有入隊的操作,而又需要某種最大或最小的操作的問題是再合適不過了,通常優先佇列的實現是由最小堆或者最大堆完成的,並通過堆排序保持佇列的有序性,模擬佇列的結構,在實際比賽中要寫乙個堆排序還是要一定的時間的,但是stl中queue容器...
佇列以及優先佇列
1.佇列 佇列的定義 標頭檔案 include 佇列是一種先進先出的資料結構 佇列的宣告 queueq 宣告字元型別 queueq 宣告結構體型別 以及可以宣告一些自定義的型別 佇列的操作 入佇列 s.push x 出佇列 s.pop 返回佇列的資料數量 s.size 判斷佇列是否為空 s.empt...
堆疊,佇列,優先佇列
包含標頭檔案 include定義 stacks 特點 先進後出。即 像瓶子一樣。先進來的資料在底部。例 輸入 1 2 3 4 5 輸出 5 4 3 2 1 棧的基本操作 s.push a 把元素a入棧。s.pop 刪除棧頂元素。s.top 返回棧頂元素,但不會刪除。s.size 返回棧中元素個數。s...