問答題

【案例分析題】

閱讀下列說明和C代碼,回答問題1至問題3,將解答寫在答題紙的對應(yīng)欄內(nèi)。
說明:堆數(shù)據(jù)結(jié)構(gòu)定義如下。對于n個(gè)元素的關(guān)鍵字序列(a1,a2,...,an),當(dāng)且僅當(dāng)滿足下列關(guān)系時(shí)稱其為堆:在一個(gè)堆中,若堆頂元素為最大元素,則稱為大頂堆;若堆頂元素為最小元素,則稱為小頂堆。堆常用完全二叉樹表示,圖8.11是一個(gè)大頂堆的例子。堆數(shù)據(jù)結(jié)構(gòu)常用于優(yōu)先隊(duì)列中,以維護(hù)由一組元素構(gòu)成的集合。對應(yīng)于兩類堆結(jié)構(gòu),優(yōu)先隊(duì)列也有最大優(yōu)先隊(duì)列和最小優(yōu)先隊(duì)列,其中最大優(yōu)先隊(duì)列采用大頂堆,最小優(yōu)先隊(duì)列采用小項(xiàng)堆。以下考慮最大優(yōu)先隊(duì)列。假設(shè)現(xiàn)已建好大頂堆A,且已經(jīng)實(shí)現(xiàn)了調(diào)整堆的函數(shù)heapify(A,n,index)。下面將C代碼中需要完善的3個(gè)函數(shù)說明如下。
(1)heapMaximum(A):返回大頂堆A中的最大元素。
(2)heapExtractMax(A):去掉并返回大頂堆A的最大元素,將最后一個(gè)元素"提前"到堆頂位置,并將剩余元素調(diào)整成大頂堆。(
3)maxHeapInsert(A,key):把元素key插入到大頂堆A的最后位置,再將A調(diào)整成大頂堆。優(yōu)先隊(duì)列采用順序存儲方式,其存儲結(jié)構(gòu)定義如下:C代碼:

問題1:根據(jù)以上說明和C代碼,填充C代碼中的空(1)~(5)。問題2:根據(jù)以上C代碼,函數(shù)heapMaximum,heapExtractMax和maxHeapInsert的時(shí)間復(fù)雜度的緊致上界分別為(6)、(7)和(8)(用O符號表示)。問題3:若將元素10插入到堆A=(15,13,9,5,12,8,7,4,0,6,2,1)中,調(diào)用maxHeapInsert函數(shù)進(jìn)行操作,則新插入的元素在堆A中第(9)個(gè)位置(從1開始)。

答案: 問題1(1)A->int_array[0](2)A->int_array[0]=A->int_array[A->arra...
微信掃碼免費(fèi)搜題