最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

8 實(shí)現(xiàn)優(yōu)先隊(duì)列(上)

2023-03-07 19:57 作者:HC_0702  | 我要投稿

本項(xiàng)目GitHub: HuangCheng72/HCSTL: 我的STL實(shí)現(xiàn) (github.com): https://github.com/HuangCheng72/HCSTL

進(jìn)入正文。

在上一篇中,我們已經(jīng)給 vector 和 list 完成了迭代器的部分,現(xiàn)在我們的這兩個(gè)容器可以通過迭代器操作容器里面的數(shù)據(jù)了,現(xiàn)在我們可以實(shí)際地應(yīng)用這兩個(gè)容器了,我們以 vector 為例。

優(yōu)先隊(duì)列(Priority Queue)是一種常用的數(shù)據(jù)結(jié)構(gòu),每次取出的元素都是隊(duì)列的全部元素中具有最高優(yōu)先級的元素(具體視排序規(guī)則而定),優(yōu)先隊(duì)列一般是基于堆(heap)結(jié)構(gòu)實(shí)現(xiàn)的,通常是通過數(shù)組或者二叉樹表示。我們知道,vector本質(zhì)上是一個(gè)可變數(shù)組,因此我們可以考慮在 vector 的基礎(chǔ)上實(shí)現(xiàn)優(yōu)先隊(duì)列。

像這樣,在某種組件的基礎(chǔ)上,實(shí)現(xiàn)或者衍生出另一種組件的過程,就叫適配(配接,Adaption),所得到的新組件,就是所謂的適配器(配接器,Adaptor)。適配器相比較于原組件,是一種特定方向的發(fā)展,著重加強(qiáng)了某方面的能力。適配器的優(yōu)點(diǎn)在于它以原組件為底層數(shù)據(jù)結(jié)構(gòu),貫徹了代碼復(fù)用的原則,大大減少了重復(fù)的工作量,缺點(diǎn)在于它依賴于原組件,如果提供的原組件性能不佳,則適配器的性能必然不佳。

新建頭文件 queue.h,暫時(shí)只考慮C++內(nèi)建類型數(shù)據(jù) ,按照以下原型實(shí)現(xiàn)一個(gè)優(yōu)先隊(duì)列:

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的時(shí)候,通常我們建立堆的過程是:

在數(shù)組中,下標(biāo) i 從1起算時(shí), i 的孩子結(jié)點(diǎn)是 i * 2和 i * 2 + 1 。

類似的,如果 i 從0起算,那么根據(jù)數(shù)學(xué)推理有,( i + 1 ) 的孩子結(jié)點(diǎn)是 ( i + 1 ) * 2 和 ( i + 1 ) * 2 + 1。

所以 i 的孩子結(jié)點(diǎn)是, i * 2 + 1 和 i * 2 + 2。

最好采用 i 從 0 起算的做法,因?yàn)槲覀兪褂玫氖莢ector,返回top的時(shí)候可以返回的是vector.front()。

而且最重要的是我們不知道輸入的數(shù)據(jù)是什么,沒辦法在 i = 0 處放置哨兵結(jié)點(diǎn)。

當(dāng)然,如果要實(shí)現(xiàn)下標(biāo) i 從1起算也是可以的,本教程對此不討論,請自行實(shí)現(xiàn)。

我的實(shí)現(xiàn)如下:

在 main.cpp 中簡單測試一下:

輸出正確結(jié)果,我們可以換一種內(nèi)置類型比如double來試試。

一切正常。

歡迎訪問本項(xiàng)目的GitHub倉庫,如果對您有幫助,麻煩給項(xiàng)目一個(gè)star,謝謝!

HuangCheng72/HCSTL: 我的STL實(shí)現(xiàn) (github.com): https://github.com/HuangCheng72/HCSTL

8 實(shí)現(xiàn)優(yōu)先隊(duì)列(上)的評論 (共 條)

分享到微博請遵守國家法律
宁陵县| 金山区| 滨海县| 阜平县| 颍上县| 余干县| 诏安县| 镇江市| 德惠市| 深州市| 昌江| 冕宁县| 什邡市| 宜章县| 德安县| 清水河县| 乳源| 阿拉尔市| 桐梓县| 黄冈市| 卢湾区| 彰化县| 阳春市| 梨树县| 师宗县| 阜阳市| 阳山县| 东乌珠穆沁旗| 略阳县| 沾化县| 客服| 洞口县| 耿马| 镇平县| 于田县| 秦安县| 宝应县| 昆山市| 凤山县| 任丘市| 武城县|