国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ì)列(上)的評論 (共 條)

分享到微博請遵守國家法律
方正县| 宁波市| 宜春市| 定兴县| 哈巴河县| 北安市| 社旗县| 东兰县| 南投市| 江达县| 塘沽区| 喀喇沁旗| 宜兰县| 深水埗区| 玉林市| 蓬莱市| 桐城市| 左云县| 大兴区| 安仁县| 黄平县| 乌兰浩特市| 台山市| 朝阳市| 大兴区| 永川市| 桦南县| 涿鹿县| 始兴县| 崇左市| 靖州| 张家川| 池州市| 长顺县| 兰坪| 昌乐县| 铁力市| 常州市| 始兴县| 侯马市| 勐海县|