




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2006年《數(shù)據結構》期終考試試卷(A)班級學號姓名班級學號姓名一、簡答題(每小題6分,共30分)假設一個線性鏈表的類名為linkedList,鏈表結點的類名為ListNode,它包含兩個數(shù)據成員data和link。data存儲該結點的數(shù)據,link是鏈接指針。下面給定一段遞歸打印一個鏈表中所有結點中數(shù)據的算法:voidPrintList(ListNode*L){if(L!=NULL){cout<<L->data<<endl;PrintList(L->link);}試問此程序在什么情況下不實用?給出具體修改后的可實用的程序?⑴此程序在內存容量不足時不適用。因為需要一個遞歸工作棧。當鏈表越長,遞歸工作棧的深度越深,需要的存儲越多??刹捎梅沁f歸算法節(jié)省存儲。voidPrintList(ListNode*L){while(L!=NULL){cout<<L->data<<endl;L=L->link;如果每個結點占用2個磁盤塊因而需要2次磁盤訪問才能實現(xiàn)讀寫,那么在一棵有n個關鍵碼的2m階B樹中,每次搜索需要的最大磁盤訪問次數(shù)是多少?⑵在2m階B樹中關鍵碼個數(shù)n與B樹高度h之間的關系為hWlog((n+1)/2)+1,那么每次搜索最大磁盤訪問次數(shù)為2hmax=2logm((n+1)/2)+2。給定一棵保存有n個關鍵碼的m階B樹。從某一非葉結點中刪除一個關鍵碼需要的最大磁盤訪問次數(shù)是多少?⑶在m階B樹中關鍵碼個數(shù)n與B樹最大高度h的關系為h=log「血2]((n+1)/2)+1。若設尋找被刪關鍵碼所在非葉結點讀盤次數(shù)為h’,被刪關鍵碼是結點中的&則從該結點的p.出發(fā)沿最左鏈到葉結點的讀盤次數(shù)為hh’。當把問題轉化為刪除葉結點的k0時,可能會引起結點的調整或合并。極端情況是從葉結點到根結點的路徑上所有結點都要調整,除根結點外每一層讀入1個兄弟結點,寫出2個結點,根結點寫出1個結點,假設內存有足夠空間,搜索時讀入的盤塊仍然保存在內存,則結點調整時共讀寫盤3(h1)+1??偣驳拇疟P訪問次數(shù)為h’+(hh’)+3(h1)+1=4h2=4(log「m/2l((n+1)/2)+1)2==4%刃血+1)/2)+2給定一個有n個數(shù)據元素的序列,各元素的值隨機分布。若要將該序列的數(shù)據調整成為一個堆,那么需要執(zhí)行的數(shù)據比較次數(shù)最多是多少?(4)設堆的高度為h=「log2(n+1)],當每次調用siftDown算法時都要從子樹的根結點調整到葉結點,假設某子樹的根在第i層(1WiWh1),第h層的葉結點不參加比較。從子樹根結點到葉結點需要比較hi層,每層需要2次比較:橫向在兩個子女里選一個,再縱向做父子結點的比較。因此,在堆中總的比較次數(shù)為因為2h-1WnW2卜1,且,則設有兩個分別有n個數(shù)據元素的有序表,現(xiàn)要對它們進行兩路歸并,生成一個有2n個數(shù)據元素的有序表。試問最大數(shù)據比較次數(shù)是多少?最少數(shù)據比較次數(shù)是多少?(5)兩個長度為n的有序表,當其中一個有序表的數(shù)據全部都小于另一個有序表的數(shù)據時,關鍵碼的比較次數(shù)達到最小(=n)。而當兩個有序表的數(shù)據交錯排列時,關鍵碼的比較次數(shù)達到最大(=2n-1)。二、簡作題(每小題5分,共15分)針對如下的帶權無向圖其中,每條邊上所注的芻為該邊的編號,冒號后面是該邊所對應的權值。使用Prim算法,從頂點A出發(fā)求出上圖的最小生成樹。要求給出生成樹構造過程中依次選擇出來的邊的序列(用邊的編號表示),權值相等時編號小的邊優(yōu)先。(不必畫圖)使用Kruskal算法求出上圖的最小生成樹。要求給出生成樹構造過程中依次選擇出來的邊的序列(用邊的編號表示),權值相等時編號小的邊優(yōu)先。(不必畫圖)(3)上面求出的最小生成樹是唯一的嗎?試舉理由說明。使用Prim算法(2)e1:3⑶這樣選A最小生成限定了選擇的機會。假e,:3He8:4ei7:e1:3⑶這樣選A最小生成限定了選擇的機會。假e,:3He8:4ei7:7―弓苛一ioB'、勺:4X3e~:211:"Ze12:6Cei3:1時先選編號小的,7.限定在具有相等權'值的華中的選擇次序,結果可能e1e5e9e7e11e15e13e2/p>
就可能不唯一了。三、簡作題(共10分)假設一個散列表中已裝入100個表項并采用線性探查法解決沖突,要求搜索到表中已有表項時的平均搜索次數(shù)不超過4,插入表中沒有的表項時找到插入位置的平均探查次數(shù)不超過50.5。請根據上述要求確定散列表的容量,并用除留余數(shù)法設計相應的散列函數(shù)。三、簡作題(共10分)由前一式得到,由后一式得到,綜合得因n=100,有,,可取m=117。用除留余數(shù)法設計散列函數(shù):Hash(key)=key%113 (注:117不是質數(shù),117=9*13)四、算法設計題(每小題5分,共15分)設中序線索化二叉樹的類聲明如下:template<classType>〃中序線索化二叉樹的結點類〃線索標志〃線索或子女指針〃結點中所包含的數(shù)據〃中序線索化二叉樹類〃中序線索化二叉樹的結點類〃線索標志〃線索或子女指針〃結點中所包含的數(shù)據〃中序線索化二叉樹類intleftThread,rightThread;ThreadNode<Type>*leftChild,*rightChild;Typedata;};template<classType>classinOrderThreadTree{public:ThreadNode<Type>*getRoot(){returnroot;}〃其他公共成員函數(shù)private:ThreadNode<Type>*root; //樹的根指針};試依據上述類聲明,分別編寫下面的函數(shù)。ThreadNode<Type>*getPreorderFirst(ThreadNode<Type>*p);〃尋找以p為根指針的中序線索化二叉樹在前序下的第一個結點。ThreadNode<Type>*getPreorderNext(ThreadNode<Type>*p)〃尋找結點*p的在中序線索化二叉樹中前序下的后繼結點。voidpreorder(inOrderThreadTree<Type>&T);〃應用以上兩個操作,在中序線索化二叉樹上做前序遍歷。四、 算法設計題(每小題5分,共15分)tamplate<classType>ThreadNode<Type>*getPreorderFirst(ThreadNode<Type>*p){returnp;}template<classType>ThreadNode<Type>*getPreorderNext(ThreadNode<Type>*p){if(p->leftThread==0)returnp->leftChild;if(p->rightThread==0)returnp->rightChild;while(p->rightThread!=0&&p->rightChild!=NULL)p=p->rightChild;returnp->rightChild;⑶}template<classType>voidpreorder(inOrderThreadTree<Type>&T)(ThreadNode<Type>*p=getRoot();p=getPreorderFirst(p);while(p!=NULL){cout<<p->data<<endl;p=getPreorderNext(p);}}五、 算法分析題(每小題5分,共15分)下面給出一個排序算法,其中n是數(shù)組A[]中元素總數(shù)。template<classType>voidunknown(Typea[],intn){intd=1,j;while(d<n/3)d=3*d+1;while(d>0){for(inti=d;i<n;i++){Typetemp=a[i];j=i;while(j>=d&&a[j-d]>temp){a[j]=a[j-d];j-=d;}a[j]=temp;
d/=3;閱讀此算法,說明它的功能。對于下面給出的整數(shù)數(shù)組,追蹤第一趟while(d>0)內的每次for循環(huán)結束時數(shù)組中數(shù)據的變化。(為清楚起見,本次循環(huán)未涉及的不移動的數(shù)據可以不寫出,每行僅寫出一個for循環(huán)的變化)以上各次循環(huán)的數(shù)據移動次數(shù)分別是多少。五、算法分析題(每小題5分,共15分)希爾排序第一趟while循環(huán)內各for循環(huán)結束時數(shù)組中數(shù)據的變化:步a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]移動次數(shù)77 44 99 66 33 55 88 22 44 1177 44 99 66 33 55 88 22 44 11各趟數(shù)據移動次數(shù)見表的最右一欄。六、算法設計題(每小題5各趟數(shù)據移動次數(shù)見表的最右一欄。六、算法設計題(每小題5分,共15分)下面是隊列和棧的類聲明:template<classType>classqueue{public:queue();queue(constqueue&qu);queue&operator=(constqueue&qu);boolisEmpty();Type&getFront();voidpush(constType&item);voidpop();// 〃隊列的構造函數(shù)〃隊列的復制構造函數(shù)〃賦值操作〃判斷隊列空否,=1為空,=0不空〃返回隊頭元素的值〃將新元素插入到隊列的隊尾//從隊列的隊頭刪除元素〃其他成員函數(shù)template<classType>template<classType>classstack{public:stack();boolisEmpty();voidpush(conststack&item);voidpop();Type&getTop();〃棧的構造函數(shù)〃判斷??辗?。=1???,=0不空〃將新元素進?!m斣赝藯!ǚ祷貤m斣氐闹翟嚴脳:完犃械某蓡T函數(shù),編寫以下針對隊列的函數(shù)的實現(xiàn)代碼(要求非遞歸實現(xiàn))?!澳孓D”函數(shù)template<classType>voidreverse(queue<Type>&Q);(5分)“判等”函數(shù)boolqueue::operator==(constqueue&Q);(5分)“清空”函數(shù)voidqueue::clear();(5分)六、算法設計題(每小題5分,共15分)⑴#include“stack”template<classType>voidreverse(queue<Type>&Q){ 〃普通函數(shù)stack<Type>S;Typetmp;while(!Q.isEmpty()){tmp=Q.getFront();Q.Pop();S.Push(tmp);}while(!S.isEmpty()){tmp=S.getTop();S.Pop();Q.EnQueue();}};boolqueue::operator==(constqueue&Q){ 〃成員函數(shù)queue<Type>Q1,Q2;Typet1,t2;boolfinished=true;while(!is.Empty()){t1=getFront();Pop();Q1.Push(t1);//從左隊列退出,進臨時隊列t2=Q.getFront();Q.Pop();Q2.Push(t2);//從右隊列退出,進臨時隊列if(t1!=t2){finished=false;b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 2 More than fun (Understanding ideas 2) 教學設計-2024-2025學年外研版(2024)七年級英語上冊
- 2025年合同法典:房產合同規(guī)范樣本
- 2025網站開發(fā)合同協(xié)議書范本
- 活性炭材料使用操作規(guī)范
- 2025廣告宣傳物料制作委托合同
- 2025版承包合同范本下載
- 2025廣告代理協(xié)議的合同范本
- 2025年郴州下載貨運從業(yè)資格證模擬考試
- 《高效課件制作與優(yōu)化》
- 2025年伊春貨運上崗證考試題答案
- 實驗室生物安全程序文件
- 企業(yè)融資方式介紹課件
- 藥品生產監(jiān)督管理辦法
- 幼兒園幼兒小籃球活動體能測試表
- 福建省普通高中學生綜合素質學期評價表
- 五年級下冊數(shù)學課件 -4.1 用數(shù)對確定位置 ︳青島版 (共20張PPT)
- 柏拉圖分析案例
- 二襯帶模注漿施工方案
- 《英語委婉語與忌語》PPT課件.ppt
- 調查問卷設計-課件PPT
- 照金參觀學習心得
評論
0/150
提交評論