重寫優先佇列(priority queue)

2021-06-22 19:14:39 字數 1486 閱讀 4391

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...