版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
--.z..z.一、單選題(每題2分,共20分)1.對(duì)一個(gè)算法的評(píng)價(jià),不包括如下(B)方面的內(nèi)容。A.健壯性和可讀性 B.并行性 C.正確性 D.時(shí)空復(fù)雜2.在帶有頭結(jié)點(diǎn)的單鏈表HL中要向表頭插入一個(gè)由指針p指向的結(jié)點(diǎn)則執(zhí)行(A )。p->ne*t=HL->ne*t;HL->ne*t=p; B.p->ne*t=HL;HL=p;C.p->ne*t=HL;p=HL; D.HL=p;p->ne*t=HL;3.對(duì)線性表,在下列哪種情況下應(yīng)當(dāng)采用鏈表表示?(B )經(jīng)常需要隨機(jī)地存取元素 B.經(jīng)常需要進(jìn)行插入和刪除操C.表中元素需要占據(jù)一片連續(xù)的存儲(chǔ)空間 D.表中元素的個(gè)數(shù)不變4.一個(gè)棧的輸入序列為123,則下列序列中不可能是棧的輸出序列的( C )A.231C.3125.AOV網(wǎng)是一種(。
B.321D.123有向圖 B.無向圖 C.無向無環(huán)圖 D.有向無環(huán)圖6.采用開放定址法處理散列表的沖突時(shí),其平均查找長(zhǎng)度(BA.低于法處理沖突 B. 高于法處理沖突C.與法處理沖突相同 D.高于二分查找7.若需要利用形參直接訪問實(shí)參時(shí),應(yīng)將形參變量說明為(D)參數(shù)A.值 B.函數(shù) C.指針 D.引用8.的(A。行號(hào) B.列號(hào) C.元素值 D.非零元素個(gè)數(shù)9.快速排序在最壞情況下的時(shí)間復(fù)雜度為(。A.O(logn) B.O(nlogn) C.0(n) D.0(n2)2 210.從二叉搜索樹中查找一個(gè)元素時(shí),其時(shí)間復(fù)雜度大致為(C)。O(n) B.O(1) C.二、運(yùn)算題(每題6分,共24分)
D.O(n2)21.數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)及其相互之間的 當(dāng)結(jié)點(diǎn)之間存在M對(duì)N(M:N)的聯(lián)系時(shí),稱這種結(jié)構(gòu)為 。2.隊(duì)列的插入操作是在隊(duì)列的 尾 進(jìn)行,刪除操作是在隊(duì)列的 首 進(jìn)行。3.當(dāng)用長(zhǎng)度為N的數(shù)組順序存儲(chǔ)一個(gè)棧時(shí),假定用top==N表示???,則示棧滿的條件是 top==0 (要超出才為滿) 。4.對(duì)于一個(gè)長(zhǎng)度為n的單鏈存儲(chǔ)的線性表,在表頭插入元素的時(shí)間復(fù)雜度為 ,在表尾插入元素的時(shí)間復(fù)雜度為 。5.設(shè)W4i從0到7,列下標(biāo)j從0到3,則二維數(shù)組W的數(shù)據(jù)元素共占用__個(gè)字節(jié)。W中第6行的元素和第4列的元素共占用_ _個(gè)字節(jié)。若按行順序放二維數(shù)組W,其起始地址為100,則二維數(shù)組元素W[6,3]的起始地址為_ _。6.廣義表 A= (a,(a,b),((a,b),c)),則它的深度為 ,它的長(zhǎng)度為 。7.二叉樹是指度為2的 樹一棵結(jié)點(diǎn)數(shù)為N的二叉樹其所有結(jié)點(diǎn)的度的總和是 。8.對(duì)一棵二叉搜索樹進(jìn)行中序遍歷時(shí),得到的結(jié)點(diǎn)序列是一個(gè) 對(duì)一棵由算術(shù)表達(dá)式組成的二叉語法樹進(jìn)行后序遍歷得的結(jié)點(diǎn)序列是該算術(shù)表達(dá)式的 。9.對(duì)于一棵具有 n個(gè)結(jié)點(diǎn)的二叉樹,用二叉鏈表存儲(chǔ)時(shí),其指針總數(shù)為 個(gè),其中 個(gè)指針是空閑的。
個(gè)用于指向孩子,00000520到一維數(shù)組A中即編號(hào)為0的結(jié)點(diǎn)存儲(chǔ)到A[0]中其余類推則A[i]元的左孩子元素為 ,右孩子元素為 ,雙親元素為 。11.在線性表的散列存儲(chǔ)中,處理沖突的常用方法有 和 兩種。12.當(dāng)待排序的記錄數(shù)較大,排序碼較隨機(jī)且對(duì)穩(wěn)定性不作要求時(shí),宜采用 排序;當(dāng)待排序的記錄數(shù)較大,存儲(chǔ)空間允許且要求排是穩(wěn)定時(shí),宜采用 排序。三、運(yùn)算題(每題6分,共24分)00010000100000000000700已知一個(gè)6 5稀疏矩陣如下所示試:寫出它的三元組線性表;給出三元組線性表的順序存儲(chǔ)表示。設(shè)有一個(gè)輸入數(shù)據(jù)的序列是{46,25,78,62,12,80}輸入各個(gè)數(shù)據(jù)而生成的二叉搜索樹。-對(duì)于圖6結(jié)點(diǎn)都是按照終點(diǎn)序號(hào)從小到大的次序的,試寫出:從頂點(diǎn)①出發(fā)進(jìn)行深度優(yōu)先搜索所得到的深度優(yōu)先生成樹;從頂點(diǎn)②出發(fā)進(jìn)行廣度優(yōu)先搜索所得到的廣度優(yōu)先生成樹;已知一個(gè)圖的頂點(diǎn)集V和邊集E分別為:V={1,2,3,4,5,6,7};E={<2,1>,<3,2>,<3,6>,<4,3>,<4,5>,<4,6>,<5,1>,<5,7>,<6,1>,<6,2>,<6,5>};若存儲(chǔ)它采用鄰接表,并且每個(gè)頂點(diǎn)鄰接表中的邊結(jié)點(diǎn)都是按照終點(diǎn)序圖6 號(hào)從小到大的次序的,按主教材中介紹的拓樸排序算法進(jìn)行排序,試給出得到的拓樸排序的序列。四、閱讀算法(每題7分,共14分)1.intPrime(intn){inti=1;int*=(int)while(++i<=*)if(n%i==0)if(i>*)return1;elsereturn0;}指出該算法的功能;2.寫出下述算法的功能:voidAJ(adjlistGL,inti,intn){QueueQ;InitQueue(Q);cout<<i<<'';visited[i]=true;QInsert(Q,i);while(!QueueEmpty(Q)){intk=QDelete(Q);edgenode*p=GL[k];while(p!=NULL){. z.-intj=p->adjve*;if(!visited[j]){cout<<j<<'';visited[j]=true;QInsert(Q,j);}p=p->ne*t;}}}五、算法填空(共8分)如下為二分查找的非遞歸算法,試將其填寫完整。IntBinsch(ElemTypeA[],intn,KeyTypeK){intlow=0;inthigh=n-1;while(low<=high){intmid= ;if(K==A[mid].key) returnmid; //elseif(K<[mid].key) ; //繼續(xù)查找else ; //在右子表上繼續(xù)查找}return-1; //查找失敗,返回-1}六、編寫算法(共8分)HL是單鏈表的頭指針,試寫出刪除頭結(jié)點(diǎn)的算法。ElemTypeDeleFront(LNode*&HL)參考答案一、單選題(每題2分,共20分)1.B 2.A 3.B 4.C 5.D 6.B 7.D 8.A 9.D 10.C二、填空題(每空1分,共26分)1.聯(lián)系圖(或圖結(jié)構(gòu))尾首3.top==0. z.-4.O(1)O(n)5.128441086.3 3657.有序 n-15 8.有序序列后綴表達(dá)式(或逆波蘭式)1519.2nn-1n+132-110.2i+12i+2(i-1)/24 5 -2 11.開放定址法法5 1 5 12.快速歸并6 3 7 三、運(yùn)算題(624)圖7 1.(1) ((1,5,1),(3,2,-1),(4,5,-2),(5,1,5),(6,3,7)) (3分)圖8(2)三元組線性表的順序存儲(chǔ)表示如圖7示。2.如圖8所示。DFS:BFS:4.拓樸排序?yàn)椋? 3 6 5 7 2 1四、閱讀算法(每題7分,共14分)1.(1)判斷n是否是素?cái)?shù)(或質(zhì)數(shù))(2)O( n)功能為:從初始點(diǎn)vi出發(fā)廣度優(yōu)先搜索由鄰接表GL五、算法填空分)(low+high)/2 high=mid-1 六、編寫算法分)ElemTypeDeleFront(LNode*&HL){if(HL==NULL){cerr<<"空表"<<endl;e*it(1);}LNode*p=HL;HL=HL->ne*t;ElemType deletep;returntemp;}一、單選題(每題2分,共20分). z.-棧和隊(duì)列的共同特點(diǎn)是(A)。AB.都是先進(jìn)后出C.都是先進(jìn)先出D.沒有共同點(diǎn)用方式存儲(chǔ)的隊(duì)列,在進(jìn)行插入運(yùn)算時(shí)(D ).A.僅修改頭指針 B.頭、尾指針都要修改C.僅修改尾指針 D.頭、尾指針可能都要修3.以下數(shù)據(jù)結(jié)構(gòu)中哪一個(gè)是非線性結(jié)構(gòu)?( D)A.隊(duì)列 B.棧 C.線性表 D.二叉樹A[0][0]存放位置在
,A[2][2]存放位置(10)在676 每個(gè)元素占一個(gè)空間問
存放在什么位置?腳注
表示用(10)10進(jìn)制表示。
(10)
(10)A.688 B.678 C.692 D.696樹最適合用來表示( )。A.有序數(shù)據(jù)元素 B.無序數(shù)據(jù)元素C.元素之間具有分支層次關(guān)系的數(shù)據(jù) D.元素之間無聯(lián)系的數(shù)6.二叉樹的第k層的結(jié)點(diǎn)數(shù)最多為( ).A.2k-1 B.2K+1 C.2K-1 D.2k-1若有18個(gè)元素的有序表存放在一維數(shù)組A[19]中,第一個(gè)元素放A[1]中現(xiàn)進(jìn)行二分查找,則查找A[3]的比較序列的下標(biāo)依次為( )A.1,2,3 B.9,5,2,3C.9,5,3 D.9,4,2,3對(duì)n個(gè)記錄的文件進(jìn)行快速排序,所需要的輔助存儲(chǔ)空間大致為A.O(1)B.O(n) C.O(1ogn) D.O(n2)29.對(duì)于線性表(7,34,55,25,64,46,20,10)進(jìn)行散列存儲(chǔ)時(shí),若選用H(K)=K%9作為散列函數(shù),則散列地址為1的元素有()個(gè),A.1 B.2 C.3 D.410.設(shè)有6個(gè)結(jié)點(diǎn)的無向圖,該圖至少應(yīng)有( )條邊才能確保是一個(gè)連圖。A.5 B.6 C.7 二、填空題(每空126分)通常從四個(gè)方面評(píng)價(jià)算法的質(zhì)量: 、 、 和 。一個(gè)算法的時(shí)間復(fù)雜度為其數(shù)量級(jí)表示為 。2假定一棵樹的廣義表表示為(C(E(,則樹中所含的結(jié)點(diǎn)數(shù)為 個(gè),樹的深度為 ,樹的度為 。4.后綴算式923+-102/-的值為 中綴算對(duì)應(yīng)的后. z.-綴算式為 。5.若用鏈表存儲(chǔ)一棵二叉樹時(shí),每個(gè)結(jié)點(diǎn)除數(shù)據(jù)域外,還有指向左孩子和右孩的兩個(gè)指針。在這種存儲(chǔ)結(jié)構(gòu)中個(gè)結(jié)點(diǎn)的二叉樹共有 個(gè)指針域,其中有 個(gè)指針域是存放了地址,有 個(gè)指針是空指針。6.對(duì)于一個(gè)具有n個(gè)頂點(diǎn)和e條邊的有向圖和無向圖,在其對(duì)應(yīng)的鄰接表中,所含邊結(jié)點(diǎn)分別有 個(gè)和 個(gè)。AOV網(wǎng)是一種 的圖。在一個(gè)具有n個(gè)頂點(diǎn)的無向完全圖中,包含條邊,在一個(gè)具有n頂點(diǎn)的有向完全圖中,包含有 條邊。假定一個(gè)線性表為Key%4數(shù)的元素成為一個(gè)子表,則得到的四個(gè)子表分別為、 、 和 。向一棵B_樹插入元素的過程中,若最終引起樹根結(jié)點(diǎn)的分裂,則新樹比原樹的高度 。在堆排序的過程中,對(duì)任一分支結(jié)點(diǎn)進(jìn)行篩運(yùn)算的時(shí)間復(fù)雜度為 整個(gè)堆排序過程的時(shí)間復(fù)雜度為 。在快速排序、堆排序、歸并排序中排序是穩(wěn)定的三、運(yùn)算題(每題6分,共24分)A中存儲(chǔ)了一個(gè)線性表,表頭指針為A[0].ne*t,試寫出該線性表。A01234567data605078903440ne*t357204110
請(qǐng)畫出圖10的鄰接矩陣和鄰接表。已知一個(gè)圖的頂點(diǎn)集V和邊集EV={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};用克魯斯卡爾算法得到最小生成樹,試寫出在最小生成樹中依次得到的各條邊。畫出向小根堆中加入數(shù)據(jù)4,2,5,8,3時(shí),每加入一個(gè)數(shù)據(jù)后堆的變化。四、閱讀算法(每題7分,共14分)1.LinkListmynote(LinkListL){//L是不帶頭結(jié)點(diǎn)的單鏈表的頭指針if(L&&L->ne*t){q=L;L=L->ne*t;p=L;S1: while(p->ne*t)p=p->ne*t;S2: . z.--.z..z.}return L;}請(qǐng)回答下列問題:說明語句S1的功能;說明語句組S2的功能;設(shè)鏈表表示的線性表為,a
),寫出算法執(zhí)行后的返回值所表示的線1 2 n性表。2.voidABC(BTNode*BT){if BT{ABC(BT->left);ABC(BT->right);cout<<BT->data<<'';}}該算法的功能是:五、算法填空(共8分)二叉搜索樹的查找——遞歸算法:boolFind(BTreeNode*BST,ElemType&item){if(BST==NULL)returnfalse;//查找失敗else{if(item==BST->data){item=BST->data;//查找成功return elseif(item<BST->data)return Find( else returnFind( ,item);}//if}六、編寫算法(共8分)統(tǒng)計(jì)出單鏈表HL中結(jié)點(diǎn)的值等于給定值*的結(jié)點(diǎn)數(shù)。intCount*(LNode*HL,ElemType*)參考答案一、單選題(每題2分,共20分)1.A 2.D 3.D 4.C 5.C 6.D 7.D 8.C 9.D 10.A二、填空題(每空1分,共26分)1.正確性易讀性強(qiáng)壯性高效率2.O(n)3.9 3 34.-1 34**+2Y*3/-5.2n n-1 n+16.e 2e7.有向無回路8.n(n-1)/2 n(n-1)9(1,4((7(23,56)10.增加111.O(logn) O(nlogn)2 212.歸并三、運(yùn)算題(每題6分,共24分)1(7,5,4,6,3,9)01111鄰接表如圖11所示:
1 1 1 00 1 0 11 0 1 10 1 0 11 1 1
圖11用克魯斯卡爾算法得到的最小生成樹為:(1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, 見圖124245834 2 圖12 2424583四、閱讀算每題7分,414分)4 5 4 51.(1)查詢鏈表的尾結(jié)點(diǎn) 8(2)將第一個(gè)結(jié)點(diǎn)到鏈表的尾部,作為新的尾結(jié)點(diǎn))返回的線性表為a,a2,a)23 n12.遞歸地后序遍歷鏈?zhǔn)酱鎯?chǔ)35。8五、算法填空(每空2分,共8分)8true BST->left六、編寫算法(8分)
4BST->rightintCount*(LNode*HL,ElemType*){ inti=0;LNode*p=HL;//iwhile(p!=NULL){if(P->data==*)p=p->ne*t;}//while,出循環(huán)時(shí)i中的值即為*結(jié)點(diǎn)個(gè)數(shù)returni;}//Count*一、單選題(每小題2分,共8分)1在一個(gè)長(zhǎng)度為n的順序線性表中順序查找值為*的元素時(shí)查找成功時(shí)的平均查找長(zhǎng)(即*與元素的平均比較次數(shù)假定查找每個(gè)元素的概率都相等為( )A n B n/2 C (n+1)/2 D (n-1)/22在一個(gè)單鏈表中,若q所指結(jié)點(diǎn)是p所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),若在q與p之間插一個(gè)s所指的結(jié)點(diǎn),則執(zhí)( )。As→link=p→link;p→link=s;Bp→link=s;s→link=q;Cp→link=s→link;s→link=p;Dq→link=s;s→link=p;3、棧的插入和刪除操作在()進(jìn)行。A 棧頂 B 棧底 C 任意位置 D 指定位置4、由權(quán)值分別為11,8,6,2,5的葉子結(jié)點(diǎn)生成一棵哈夫曼樹,它的帶權(quán)路徑長(zhǎng)度為()A 24 B 71 C 48 D 53二、填空題(每空1分,共32分)1數(shù)據(jù)的邏輯結(jié)構(gòu)被分為 、 和 四種。2、一種抽象數(shù)據(jù)類型包括 和 兩個(gè)部分。3、在下面的數(shù)組a中存儲(chǔ)著一個(gè)線性表,表頭指針為a[o].ne*t,則該線性為 。a 0 1 2 3 4 5 6 7 846046035674263827402514、在以為表頭指針的帶表頭附加結(jié)點(diǎn)的單鏈表和循環(huán)單鏈表中判斷鏈表為空的件分別為 和 。5、用具有n個(gè)元素的一維數(shù)組存儲(chǔ)一個(gè)循環(huán)隊(duì)列,則其隊(duì)首指針總是指隊(duì)首元素的 ,該循環(huán)隊(duì)列的最大長(zhǎng)度為 。6、當(dāng)堆棧采用順序存儲(chǔ)結(jié)構(gòu)時(shí),棧頂元素的值可用———————表示當(dāng)堆棧采用存儲(chǔ)結(jié)構(gòu)時(shí),棧頂元素的值可用 表示。7、一棵高度為5的二叉樹中最少含有 個(gè)結(jié)點(diǎn),最多含 個(gè)結(jié)點(diǎn);一棵高度為5的理想平衡樹中,最少含有 個(gè)結(jié)點(diǎn),最多含有 個(gè)結(jié)點(diǎn)。8、在圖的鄰接表中,每個(gè)結(jié)點(diǎn)被稱為 ,通常它包含三個(gè)域一是 ;二是 ;三是 。9、在一個(gè)索引文件的索引表中,每個(gè)索引項(xiàng)包含對(duì)應(yīng)記錄的 和 兩項(xiàng)數(shù)據(jù)。10、假定一棵樹的廣義表表示為(C(E(,則樹中所含的結(jié)點(diǎn)數(shù)為 個(gè)樹的深度為 ,樹的度為 結(jié)點(diǎn)H的雙親結(jié)點(diǎn)為 ,孩子結(jié)點(diǎn)為 。11、在堆排序的過程中,對(duì)任一分支結(jié)點(diǎn)進(jìn)行篩運(yùn)算的時(shí)間復(fù)雜度為 ,整個(gè)堆排序過程的時(shí)間復(fù)雜度為 。12在對(duì)m階的B_樹插入元素的過程中每向一個(gè)結(jié)點(diǎn)插入一個(gè)索引(葉子結(jié)點(diǎn)中的索引項(xiàng)為關(guān)鍵字和空指針)后,若該結(jié)點(diǎn)的索引項(xiàng)數(shù)等 個(gè),則必須把它分裂為 個(gè)結(jié)點(diǎn)。三、運(yùn)算題(每小題6分,共24分)1、已知一組記錄的排序碼為(46,79,56,38,40,80,95,24,寫出對(duì)其進(jìn)行快速排序的每一次劃分結(jié)果。2、一個(gè)線性表為B=12,23,45,5720,0,78,31,15,3,設(shè)散列表為HT[0..12],散列函數(shù)為H(key)=key%13請(qǐng)畫出散列表,并計(jì)算等概率情況下查找成功的平均查找長(zhǎng)度。3、已知一棵二叉樹的前序遍歷的結(jié)果序列是ABECKFGHIJ,中序遍歷的結(jié)果是EBCDAFHIGJ,試寫出這棵二叉樹的后序遍歷結(jié)果。4、已知一個(gè)圖的頂點(diǎn)集V各邊集G如下:V0,1,2,3,4,5,6,7,8,9};E={(0,1(0,4(1,2(1,7(2,8(3,4(3,8(5,6,5,8(5,9(6,7(78(8,9)}當(dāng)它用鄰接矩陣表示和鄰接表表示時(shí),分別寫出從頂點(diǎn)V0出發(fā)按深度優(yōu)先搜索遍歷得到的頂點(diǎn)序列和按廣度優(yōu)先搜索遍歷等到的頂點(diǎn)序列。假定每個(gè)頂點(diǎn)鄰接表中的結(jié)點(diǎn)是按頂點(diǎn)序號(hào)從大到小的次序的。圖鄰接表表示時(shí)深度優(yōu)先序列廣度優(yōu)先序列四圖鄰接表表示時(shí)深度優(yōu)先序列廣度優(yōu)先序列答問題 (每小題8分, 共 16分)1、假定從鍵盤上輸入一批整數(shù),依次為:78 63 45 30 91 34 –1,寫出輸出結(jié)果。#include<iostream.h>#include<stdlib.h>consstintstackma*size=30;typedefintelemtype;structstack{elemtypestack[stackma*size];inttop;};#include"stack.h”Void main(){stacka;initstack(a);int*;cin>>*;while(*!=-1){push(a,*);cin>>*;}while(!stackempty(a))cout<<pop(a)<<”cout<<end1;}該算法的輸出結(jié)果為: .2、閱讀以下二叉樹操作算法,指出該算法的功能Template<calss type>void BinTree<Type>:unknown(BinTreeNode<Type>*t) {BinTreeNode<Type>*p=t,if(p!=NULL){temp=p→leftchild;p→leftchild=p→rightchild;p→rightchild=temp;unknown(p→leftchild);undnown(p→rightchild);}}該算法的功能是: 五、算法填空,在畫有橫線的地方填寫合適的內(nèi)容(10分)對(duì)順序存儲(chǔ)的有序表進(jìn)行二分查找的遞歸算法。intBinsch(ElemTypeA[],intlow,inthigh,KeyTypeK){if(low<=high){intmid=1if(K==A[mid].key)returnmid;elseif(K<A[mid].key)return2}else
else
return3return 4六、編寫算法(10分)編寫算法,將一個(gè)結(jié)點(diǎn)類型為L(zhǎng)node的單鏈表按逆序,即若原單鏈表中存儲(chǔ)元素的次序?yàn)閍,……a1
,an-1
,則逆序后變?yōu)?a,an
n-1
,……a。1Void contrary(Lnode*&HL)數(shù)據(jù)結(jié)構(gòu)試題(答案)一、單選題(每小題2分,共8分)題號(hào) 1答案
2 3 4D A B二、填空題(每空1分,共32分1:集合、線性、樹、圖;(3,5,2,6,47;4:HL→ne*t=NULL; HL=HL→ne*t;5:前一個(gè)位置; n-1;6:S.stack[S.top]; 7:5 318:邊結(jié)點(diǎn)、鄰接點(diǎn)域、權(quán)域、鏈域;9:索引值域、開始位置域;10:10、3、3、B、I和J;1:(logn、O(nlogn);2 212:m、 m-1三、運(yùn)算題(每小題6分,共24分1、第一次[382440]46[56809579]第二次24[3840]46[56809579]第三次24384046[56809579]第四次2438404656[809579]第五次243840465679[8095]第六次2438404656798095劃分次序劃分結(jié)果劃分次序劃分結(jié)果0 1 2 3 4 5 6 7 8 9 10 11 12781578150357452031233612
=14/10=1.4SUCC3、此二叉樹的后序遍歷結(jié)果是:EDCBIHJGFA4、圖 深度優(yōu)先序列
廣度優(yōu)先序列鄰接矩陣表示時(shí)鄰接表表示時(shí)
0,1,2,8,3,4,5,6,7,90,4,3,8,9,5,6,7,1,2
0,1,4,2,7,3,8,6,5,90,4,1,3,7,2,8,6,9,5四、閱讀算法,回答問題(每小題8分,共16分)1、1、該算法的輸入結(jié)果是91 30 45 63 782、2、該算法的功能是:交換二叉樹的左右子樹的遞歸算法。五、算法填空,在畫有橫線的地方填寫合適的內(nèi)容(10分)1low+hig)/2;是:Binsch(A,low,mid–1,K);是:Binsch(A,mid+1,high,K);4是:-1;六、編寫算法(10分)根據(jù)編程情況,酌情給分。{Lnode*P=HL;HL=NULL;While(p!=null){Lnode*q=p;P=p→ne*t;q→ne*t=HL;HL=q;}}第一部分選擇題(30分)一、項(xiàng)選擇題(本大題共15小題,每小題2分,共30分)在每小題列出的四個(gè)內(nèi)。算法指的是()A.計(jì)算機(jī)程序 B.解決問題的計(jì)算方法C.排序算法 D.解決問題的有限運(yùn)算序2.線性表采用鏈?zhǔn)酱鎯?chǔ)時(shí),結(jié)點(diǎn)的存儲(chǔ)地址()A.必須是不連續(xù)的B.連續(xù)與否均可C.必須是連續(xù)的D將長(zhǎng)度為n的單鏈表在長(zhǎng)度為m的單鏈表之后的算法的時(shí)間復(fù)雜度為A.O(1) B.O(n) C.O(m) D.O(m+n)()減少存取時(shí)間,降低下溢發(fā)生的機(jī)率B.節(jié)省存儲(chǔ)空間,降低上溢發(fā)生的機(jī)率C.減少存取時(shí)間,降低上溢發(fā)生的機(jī)率D設(shè)數(shù)組data[m]作為循環(huán)隊(duì)列SQ的存儲(chǔ)空間,front為隊(duì)頭指針,rear為隊(duì)尾指針,則執(zhí)行出隊(duì)操作后其頭指針front()front=front+1 B.front=(front+1)%(m-1)C.front=(front-1)%m D.front=(front+1)%m如下陳述中正確的是()串是一種特殊的線性表 B.串的長(zhǎng)度必須大于C.串中元素只能是字母 D.空串就是空白串若目標(biāo)串的長(zhǎng)度為n,模式串的長(zhǎng)度為[n/3的時(shí)間復(fù)雜度是()A.O(3) B.O(n) C.O(n2) 8.一個(gè)非空廣義表的表頭()不可能是子表 B.只能是子表C.只能是原子 D.可以是子表或原假設(shè)以帶行表的三元組表表示稀疏矩陣,則和下列行表0 2 3 3 5對(duì)應(yīng)的稀疏矩陣是()在一棵度為3的樹中,度為3的結(jié)點(diǎn)個(gè)數(shù)為2,度為2的結(jié)點(diǎn)個(gè)數(shù)為1,則度為0的結(jié)點(diǎn)個(gè)數(shù)為()A.4B.5C.6D.7在含n個(gè)頂點(diǎn)和e條邊的無向圖的鄰接矩陣中,零元素的個(gè)數(shù)為( )A.e B.2e C.n2-e D.n2-2e假設(shè)一個(gè)有n個(gè)頂點(diǎn)和e*v相i關(guān)的所有弧的時(shí)間復(fù)雜度是( )A.O(n) B.O(e) C.O(n+e) D.O(n*e)13.用*種排序方法對(duì)關(guān)鍵字序列(25,84,21,47,15,27,68,35,20)進(jìn)行排序時(shí),序列的變化情況如下:20,15,21,25,47,27,68,35,8415,20,21,25,35,27,47,68,8415,20,21,25,27,35,47,68,84則所采用的排序方法是()A.選擇排序 B.希爾排序 C.歸并排序 D.快速排14.適于對(duì)動(dòng)態(tài)查找表進(jìn)行高效率查找的組織結(jié)構(gòu)是()A.有序表 B.分塊有序表 C.三叉排序樹 D.線性鏈15.不定長(zhǎng)文件是指()-A.文件的長(zhǎng)度不固定 B.記錄的長(zhǎng)度不固定C.字段的長(zhǎng)度不固定 D.關(guān)鍵字項(xiàng)的長(zhǎng)度不固定第二部分非選擇題(共70分)二、填空題(本大題共10小題,每小題2分,若有兩個(gè)空格,每個(gè)空格1分,共20分)不寫解答過程,將正確的答案寫在每小題的空格內(nèi)。錯(cuò)填或不填均無分。機(jī)的。head可用p表示為head=。棧頂?shù)奈恢檬请S著操作而變化的。在串S="structure”中,以t假設(shè)一個(gè)9階的上三角矩陣A按列優(yōu)先順序壓縮存儲(chǔ)在一維數(shù)組B中,其中B[0]存儲(chǔ)矩陣中第1個(gè)元素a
,則B[31]中存放的元素是。1,1已知一棵完全二叉樹中共有768結(jié)點(diǎn),則該樹中共有個(gè)葉子結(jié)點(diǎn)。應(yīng)的廣度優(yōu)先遍歷序列為。23.在單鏈表上難以實(shí)現(xiàn)的排序方法有和。24.在有序表(12,24,36,48,60,72,84)字72時(shí)所需進(jìn)行的關(guān)鍵字比較次數(shù)為。25.多重表文件和倒排文件都?xì)w屬于文件。三、解答題(本大題共4小題,每小題5分,共20分26.畫出下列廣義表的共享結(jié)構(gòu)圖形表示P(z),(*,y)),((*,y),*),(z)27.請(qǐng)畫出與下列二叉樹對(duì)應(yīng)的森林。28.已知一個(gè)無向圖的頂點(diǎn)集為{a,b,c,d,e},其鄰接矩陣如下所a (1)畫出該圖的圖形;b (2)根據(jù)鄰接矩陣從頂點(diǎn)a出發(fā)進(jìn)行深度優(yōu)先遍歷和廣度優(yōu)先遍歷,寫c 相應(yīng)的遍歷序列。d 29.已知一個(gè)散列表如下圖所示:e 35 20 33 48 590 1 2 3 4 5 6 7 8 9 10 11 12其散列函數(shù)為h(key)=key%13,處理沖突的方法為雙重散列法,探查序列為h=(h(key)+i*h1(key))%m i=0,1,…,m-1i其中h1(key)=key%11+1回答下列問題:對(duì)表中關(guān)鍵字和48進(jìn)行查找時(shí),所需進(jìn)行的比較次數(shù)各為. z.-多少?該散列表在等概率查找時(shí)查找成功的平均查找長(zhǎng)度為多少?四、算法閱讀題(1ss小題5分,共20分)0 1 2ss大小,其返回值為:str(s,s)=
1 2當(dāng)ss1 2 1 2請(qǐng)?jiān)诳瞻滋幪钊脒m當(dāng)?shù)膬?nèi)容。intstr(LinkStrings1,LinkStrings2){//s1和s2為兩個(gè)鏈串的頭指針while(s1&&s2){if(s1->date<s2->date)return-1;if(s1->date>s2->date)return1;①;②;}if(③)return-1;if(④)return1;⑤;}①②③④⑤閱讀下面的算法LinkListmynote(LinkListL){//L是不帶頭結(jié)點(diǎn)的單鏈表的頭指針if(L&&L->ne*t){q=L;L=L->ne*t;p=L;S1: while(p->ne*t)p=p->ne*t;S2: }return L;}請(qǐng)回答下列問題:(1)說明語句S1的功能;(2)說明語句組S2的功能;設(shè)鏈表表示的線性表為,a
),寫出算法執(zhí)行后的返回值所表示的線性表。
1 2 n. z.-假設(shè)兩個(gè)隊(duì)列共享一個(gè)循環(huán)向量空間(下圖,其類型Queue2定義如下:typedefstruct{DateTypedata[Ma*Size];intfront[2],rear[2];}Queue2;對(duì)于i=0或1,front[i]和rear[i]分別為第i個(gè)隊(duì)列的頭指針和尾指針。請(qǐng)對(duì)以下算法填空,實(shí)現(xiàn)第i個(gè)隊(duì)列的入隊(duì)操作。intEnQueue(Queue2*Q,inti,DateType*){//若第i個(gè)隊(duì)列不滿,則元素*入隊(duì)列,并返回1;否則返回0if(i<0||i>1)return0;if(Q->rear[i]==Q->front[①]return0;Q->data[②]=*;Q->rear[i]=[③];return1;}①②③33.typedefstructnode{DateTypedata;Structnode*ne*t;}ListNode;typedefListNode*LinkList;LinkListLeafhead=NULL;VoidInorder(BinTreeT){If(T){
LinkLists;Inorder(T->lchild);If((!T->lchild)&&(!T->rchild)){s=(ListNode*)malloc(sizeof(ListNode));s->data=T->data;s->ne*t=Leafhead;Leafhead=s;}. z.-Inorder(T->rchild);}}對(duì)于如下所示的二叉樹(1)畫出執(zhí)行上述算法后所建立的結(jié)構(gòu);(2)說明該算法的功能。五、算法設(shè)計(jì)題(本題共10分34.閱讀下列函數(shù)arrange()intarrange(inta[],int1,inth,int*){//1和h分別為數(shù)據(jù)區(qū)的下界和上界inti,j,t;i=1;j=h;while(i<j){while(i<j&&a[j]>=*)j--;while(i<j&&a[j]>=*)i++;if(i<j){ t=a[j];a[j]=a[i];a[i]=t;}}if(a[i]<*) returnelse returni-1;}寫出該函數(shù)的功能;寫一個(gè)調(diào)用上述函數(shù)實(shí)現(xiàn)下列功能的算法:對(duì)一整型數(shù)組b[n]中的元素進(jìn)數(shù)。數(shù)據(jù)結(jié)構(gòu)試題參考答案一、單項(xiàng)選擇題(本大題共15小題,每小題2分,共30分)1.D2.B3.C4.B5.D6.A7.C8,D9,A10.C11.D 12.C13 . D14.C 15.B二、填空題(本大題共10小題,每小題2分,共20分)16.存儲(chǔ)(或存儲(chǔ)結(jié)構(gòu)) 18.進(jìn)棧和退棧 19.1220.a(chǎn)4,8
21.384快速排序、堆排序、希爾排序2 25
22.a(chǎn)befcdg. z.-三、解答題(本大題共4小題,每小題5分,共20分26.圖1 圖227.28圖的圖形為:29(1)35203348進(jìn)行查找的比較次數(shù)為3、3211;9(2)平均查找長(zhǎng)度ASL
5 5四、算法閱讀題(本大題共4小題,每小題5分,共20分)30.①S1=S1->ne*t②s2=s2->ne*t③s2(或s2!=NULL或s2&&!s1)④s1(或s1!=NULL或s1&&!s2)⑤return031.(1)將第一個(gè)結(jié)點(diǎn)到鏈表的尾部,作為新的尾結(jié)點(diǎn)返回的線性表為(a,a,…,a,a)2 3 n 132.①(i+1)%2(或1-i)②Q->rear[i]③(Q->rear[i]+)%Ma*size33.(1)Leafhead F H G D ∧(2為頭指針的逆序單鏈表(或按二叉樹中葉子結(jié)點(diǎn)數(shù)據(jù)自右至左成一個(gè)鏈表。五、算法設(shè)計(jì)題(本題共10分)34(1)a[]中的元素并返回分界值i,使所有<*的元素均落在a[1..i]上,使所有≥*的元素均落在a[i+1..h]上。intf(intb[],intn) 或intf(intb[],intn){ {intp,q; intp,q;p=arrange(b,0,n-1,0); q=arrange(b,p+1,n-1,1);q=arrange(b,0,p,0);returnq-p; returnp-q;} }. z.-一、選擇題(20分)1.組成數(shù)據(jù)的基本單位是(數(shù)據(jù)項(xiàng) (B)數(shù)據(jù)類型 (C)數(shù)據(jù)元素(D)數(shù)據(jù)變量2.設(shè)數(shù)據(jù)結(jié)構(gòu)),其中<3,4>,<4,1>},則數(shù)據(jù)結(jié)構(gòu)A是(。(A)線性結(jié)構(gòu) (B)樹型結(jié)構(gòu) (C)圖型結(jié)構(gòu) (D)集3.?dāng)?shù)組的邏輯結(jié)構(gòu)不同于下列()的邏輯結(jié)構(gòu)。(A)線性表 (B)棧 (C)隊(duì)列 (D)4.二叉樹中第i(i≥1)層上的結(jié)點(diǎn)數(shù)最多有()個(gè)。(A)2i (B)2i (C)2i-1 (D)2i-1設(shè)指針變量p指向單鏈表結(jié)點(diǎn)A,則刪除結(jié)點(diǎn)A的后繼結(jié)點(diǎn)B(。p->ne*t=p->ne*t->ne*t(C)p=p->ne*t->ne*t
(B)p=p->ne*t(D)p->ne*t=p設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素E1、E2、E3、E4、E5和E6依次通S,一個(gè)元素出棧后即進(jìn)入隊(duì)列Q6個(gè)元素出列的順序?yàn)镋2E4E3E6、E5和E1,則棧S(。(A)6 (B)4 (C)3 (D)2將10階對(duì)稱矩陣壓縮存儲(chǔ)到一維數(shù)組A中,則數(shù)組A的長(zhǎng)度最少為((A)100 (B)40 (C)55 (D)80A有3個(gè)兄弟結(jié)點(diǎn)且結(jié)點(diǎn)B為結(jié)點(diǎn)AB的度數(shù)(。(A)3 (B)4 (C)5 (D)1根據(jù)二叉樹的定義可知二叉樹共有()種不同的形態(tài)(A)4 (B)5 (C)6 (D)7設(shè)有以下四種排序方法,則()的空間復(fù)雜度最大。冒泡排序 (B)快速排序 (C)堆排序 (D)希爾排二、填空題(30分)設(shè)順序循環(huán)隊(duì)列Q[0:m-1]的隊(duì)頭指針和隊(duì)尾指針分別為F和R,其中隊(duì)頭指針F指向當(dāng)前隊(duì)頭元素的前一個(gè)位置,隊(duì)尾指針R指向當(dāng)前隊(duì)尾元素所在的置,則出隊(duì)列的語句為F= ;。設(shè)線性表中有n個(gè)數(shù)據(jù)元素,則在順序存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)順序查找的平均時(shí)間雜度為 ,在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上實(shí)現(xiàn)順序查找的平均時(shí)間復(fù)雜度為 。設(shè)一棵二叉樹中有n個(gè)結(jié)點(diǎn),則當(dāng)用二叉鏈表作為其存儲(chǔ)結(jié)構(gòu)時(shí),該二叉鏈中共有 個(gè)指針域, 個(gè)空指針域。. z.-設(shè)指針變量p指向單鏈表中結(jié)點(diǎn)A,指針變量s指向被插入的結(jié)點(diǎn)B,則在點(diǎn) A 的 后 面 插 入 結(jié) 點(diǎn) B 的 操 作 序 列 。設(shè)無向圖G中有n個(gè)頂點(diǎn)和e條邊,則其對(duì)應(yīng)的鄰接表中個(gè)表結(jié)點(diǎn)和 個(gè)表結(jié)點(diǎn)。設(shè)無向圖G中有n個(gè)頂點(diǎn)e條邊所有頂點(diǎn)的度數(shù)之和為則e和m有 關(guān)系。設(shè)一棵二叉樹的前序遍歷序列和中序遍歷序列均為則該二叉樹的后序歷序列為 。設(shè)一棵完全二叉樹中有21個(gè)結(jié)點(diǎn),如果按照從上到下、從左到右的順序從1開始順序編號(hào),則編號(hào)為8的雙親結(jié)點(diǎn)的編號(hào)是 ,編號(hào)為8的左子結(jié)點(diǎn)的編號(hào)是 。下列程序段的功能實(shí)現(xiàn)子串t在主串s確語句。int inde*(chars[],chart[]){i=j=0;while(i<strlen(s)&&j<strlen(t))if(s[i]==t[j]){i=i+l; j=j+l;}else{i= j= ;}if(j==strlen(t))return(i-strlen(t));elsereturn(-1);}設(shè)一個(gè)連通圖G中有n個(gè)頂點(diǎn)e條邊,則其最小生成樹上有 條邊。三、應(yīng)用題(30分)設(shè)完全二叉樹的順序存儲(chǔ)結(jié)構(gòu)中存儲(chǔ)數(shù)據(jù)設(shè)給定一個(gè)權(quán)值集合W=(3,5,7,9,11棵哈夫曼樹并計(jì)算哈夫曼樹的帶權(quán)路徑長(zhǎng)度WPL。3.1924.散列表的長(zhǎng)度為8,散列函數(shù)H(k)=kmod7,要求分別用線性探測(cè)和鏈地址法作為解決沖突的方法設(shè)計(jì)哈希表。5.(所右圖所示和廣度優(yōu)先遍歷的序列并給出該圖的最小生成樹。四、算法設(shè)計(jì)題(20分)設(shè)計(jì)判斷單鏈表中結(jié)點(diǎn)是否關(guān)于中心對(duì)稱算法。. z.--.z..z.設(shè)計(jì)在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上建立一棵二叉樹的算法。設(shè)計(jì)判斷一棵二叉樹是否是二叉排序樹的算法。數(shù)據(jù)結(jié)構(gòu)試卷參考答案一、選擇題1.C2.C3.D4.C5.A6.C7.C8.B9.B10.B二、填空題1.(F+1)%2.O(n),O(n)3.2n,n+14.s->ne*t=p->ne*t;s->ne*t=s5.n,2e6.m=2e7.CBA8.4,169.i-j+1,010.n-1三、應(yīng)用題
h0h81h鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)略,前序ABDEC,中序DBEACh2CA。哈夫曼樹略,WPL=78
3h25323.(18,5,16,19,2,23,,62119618723)
h468564.線性探測(cè): 8 10 25 32 27 68鏈地址法:6
275.深度:125364,廣度:123456,最小生成樹T的邊集為E={(1,4),(1,3),(3,5),(5,6),(5,6)}四、算法設(shè)計(jì)題1.設(shè)計(jì)判斷單鏈表中結(jié)點(diǎn)是否關(guān)于中心對(duì)稱算法。typedefstruct{ints[100];inttop;}sqstack;intlklistsymmetry(lklist*head){sqstackstack; stack.top=-1;lklist*p;for(p=head;p!=0;p=p->ne*t){stack.top++;stack.s[stack.top]=p->data;}for(p=head;p!=0;p=p->ne*t) if stack.top=stack.top-1;elsereturn(0);return(1);}1. 2.typedefchardatatype;typedefstructnode{datatypedata;structnode*lchild,*rchild;}bitree;voidcreatebitree(bitree*&bt){charch;scanf("%c",&ch);if(ch=='#'){bt=0;return;}bt=(bitree*)malloc(sizeof(bitree));bt->data=ch;createbitree(bt->lchild);createbitree(bt->rchild);}3.設(shè)計(jì)判斷一棵二叉樹是否是二叉排序樹的算法。intminnum=-32768,flag=1;typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidinorder(bitree*bt){if(bt!=0){inorder(bt->lchild);inorder(bt->rchild);}}一、選擇題(24分)
if(minnum>bt->key)flag=0; minnum=bt->key;數(shù)據(jù)結(jié)構(gòu)試卷(二)下面關(guān)于線性表的敘述錯(cuò)誤的是(。線性表采用順序存儲(chǔ)必須占用一片連續(xù)的存儲(chǔ)空間線性表采用鏈?zhǔn)酱鎯?chǔ)不必占用一片連續(xù)的存儲(chǔ)空間線性表采用鏈?zhǔn)酱鎯?chǔ)便于插入和刪除操作的實(shí)現(xiàn)線性表采用順序存儲(chǔ)便于插入和刪除操作的實(shí)現(xiàn)設(shè)哈夫曼樹中的葉子結(jié)點(diǎn)總數(shù)為m有()個(gè)空指針域。(A)2m-1 (B)2m (C)2m+1 (D)4m設(shè)順序循環(huán)隊(duì)列Q[0:M-1]的頭指針和尾指針分別為F和R,頭指針F總是指向隊(duì)頭元素的前一位置,尾指針R(。(A)R-F (B)F-R (C)(R-F+M)%M (D)(F-R+M)%M*棵二叉樹的中序遍歷序列為ABCD,前序遍歷序列為CABD到序列為(。BADC (B)BCDA (C)CDAB (D)5*完全無向圖中有n個(gè)頂點(diǎn),則該完全無向圖中有()條邊。(A)n(n-1)/2 (B)n(n-1) (C)n2 (D)n2-1*棵二叉樹中有2000個(gè)結(jié)點(diǎn),則該二叉樹的最小高度為(。(A)9 (B)10 (C)11 (D)12*有向圖中有n個(gè)頂點(diǎn),則該有向圖對(duì)應(yīng)的鄰接表中有()個(gè)表頭結(jié)點(diǎn)(A)n-1 (B)n (C)n+1 (D)2n-15,2,6,3,8),以第一個(gè)記錄關(guān)鍵字5為基準(zhǔn)進(jìn)行一趟快速排序的結(jié)果為(。(A)2,3,5,8,6 (B)3,2,5,8,6-(C)3,2,5,6,8 (D)(24為了能有效地應(yīng)用 HASH查找技術(shù),必須解決的兩個(gè)問題是 和 。typedefstruct{ints[100];inttop;}sqstack;voidpush(sqstack&stack,int*){if(stack.top==m-1)printf("overflow”);else{ ; ;}}中序遍歷二叉排序樹所得到的序列序列(填有序或無序。快速排序的最壞時(shí)間復(fù)雜度,平均時(shí)間復(fù)雜度。設(shè)*棵二叉樹中度數(shù)為0的結(jié)點(diǎn)數(shù)為N,度數(shù)為1的結(jié)點(diǎn)數(shù)為N,則該二叉樹中度數(shù)為20 1的結(jié)點(diǎn)數(shù)為 ;若采用二叉鏈表作為該二叉樹的存儲(chǔ)結(jié)構(gòu),則該二叉樹中共有 個(gè)空指針域。設(shè)*無向圖中頂點(diǎn)數(shù)和邊數(shù)分別為n和e,所有頂點(diǎn)的度數(shù)之和為d,則e= 。7.設(shè)一組初始記錄關(guān)鍵字序列則利用篩選法建立的始堆。v241v132v142348.設(shè)*無向圖 G的鄰接表為v3 ,則從頂點(diǎn)V41 ;廣度優(yōu)先遍歷序列。三、應(yīng)用題(36分)
開始的深度優(yōu)先遍歷序列為),則分別給出第4趟簡(jiǎn)單選擇排序和第4趟直接插入排序后的結(jié)果。設(shè)指針變量p指向雙向鏈表中結(jié)點(diǎn)A,指針變量q指向被插入結(jié)點(diǎn)BA的后面插入結(jié)點(diǎn)B的操作序列(設(shè)雙向鏈表中結(jié)點(diǎn)的兩個(gè)指針域分別為llink和rlin。分查找,要求計(jì)算出查找關(guān)鍵字62時(shí)的比較次數(shù)并計(jì)算出查找成功時(shí)的平均查找長(zhǎng)度。4.設(shè)一棵樹TA,B),(A,C),(A,D),(B,E),(C,F(xiàn)),(C,G)},要求用孩子兄弟表示法(二叉鏈表)表示出該樹的存儲(chǔ)結(jié)構(gòu)并將該樹轉(zhuǎn)化成對(duì)應(yīng)的二叉樹。.設(shè)有無向圖(如右圖所示生成樹所走過的邊的集合。6.設(shè)有一組初始記(45,80,48,40,22,78),要求構(gòu)造一棵二叉排序樹并給出構(gòu)造過程。四、算法設(shè)計(jì)題(16分)設(shè)有一組初始記錄關(guān)鍵字序列K,KK,要求設(shè)計(jì)一個(gè)算法能夠在O(n1 2 n間復(fù)雜度內(nèi)將線性表劃分成兩部分,其中左半部分的每個(gè)關(guān)鍵字均小于K,右半部分的每i個(gè)關(guān)鍵字均大于等于K。i設(shè)有兩個(gè)集合A和集合B,要求設(shè)計(jì)生成集合C=A∩B的算法,其中集合、B和C用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)表示。. z.--.z..z.一、選擇題
數(shù)據(jù)結(jié)構(gòu)試卷(二)參考答案1.D 2.B 3.C 4.A 5.A 6.C 7.B 8.C二、填空題1.構(gòu)造一個(gè)好的HASH函數(shù),確定解決沖突的方法2.stack.top++,stack.s[stack.top]=*有序4.O(n2),O(nlog25.N-1,2N+N0 0 16.d/27.(31,38,54,56,75,80,55,63)8.(1,3,4,2),(1,3,2,4)三、應(yīng)用題1.(22,40,45,48,80,78),(40,45,48,80,22,78)2.q->llink=p;q->rlink=p->rlink;p->rlink->llink=q;p->rlink=q;3.2,ASL=91*1+2*2+3*4+4*2)=25/9樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)略,二叉樹略5.E={(1,3),(1,2),(3,5),(5,6),(6,4)}6.略四、算法設(shè)計(jì)題設(shè)有一組初始記錄關(guān)鍵字序列KKK,要求設(shè)計(jì)一個(gè)算法能夠在O(n)的時(shí)間1 2 n復(fù)雜度內(nèi)將線性表劃分成兩部分,其中左半部分的每個(gè)關(guān)鍵字均小于K,右半部分的每個(gè)i關(guān)鍵字均大于等于K。ivoidquickpass(intr[],ints,intt){inti=s,j=t,*=r[s];while(i<j){while(i<j&&r[j]>*)j=j-1;if(i<j){r[i]=r[j];i=i+1;}while(i<j&&r[i]<*)i=i+1;if(i<j){r[j]=r[i];j=j-1;}}r[i]=*;}設(shè)有兩個(gè)集合A和集合B,要求設(shè)計(jì)生成集合C=A∩B的算法,其中集合AB和C用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)表示。typedefstructnode{intdata;structnode*ne*t;}lklist;voidintersection(lklist*ha,lklist*hb,lklist*&hc){lklist*p,*q,*t;for(p=ha,hc=0;p!=0;p=p->ne*t){ for(q=hb;q!=0;q=q->ne*t)if(q->data==p->data)break;if(q!=0){t=(lklist*)malloc(sizeof(lklist));t->data=p->data;t->ne*t=hc;hc=t;}}}數(shù)據(jù)結(jié)構(gòu)試卷(三)一、選擇題(30分)1*數(shù)據(jù)結(jié)構(gòu)的二元組形式表示為08<0,09>},則數(shù)據(jù)結(jié)構(gòu)A是(。線性結(jié)構(gòu) (B)樹型結(jié)構(gòu) (C)物理結(jié)構(gòu) (D)圖型結(jié)2.下面程序的時(shí)間復(fù)雜為()for(i=1,s=0;i<=n;i++){t=1;for(j=1;j<=i;j++)t=t*j;s=s+t;}(A)O(n) (B)O(n2) (C)O(n3) (D)O(n4)設(shè)指針變量p指向單鏈表中結(jié)點(diǎn)A,若刪除單鏈表中結(jié)點(diǎn)A列為(。q=p->ne*t;p->data=q->data;p->ne*t=q->ne*t;free(q);q=p->ne*t;q->data=p->data;p->ne*t=q->ne*t;free(q);q=p->ne*t;p->ne*t=q->ne*t;free(q);q=p->ne*t;p->data=q->data;free(q);設(shè)有n個(gè)待排序的記錄關(guān)鍵字,則在堆排序中需要()個(gè)輔助記錄單元。1 (B)n (C)nlogn (D)n225.設(shè)一組初始關(guān)鍵字記錄關(guān)鍵字為(20,15,14,18,21,36,40,10),則以20為基準(zhǔn)記錄的一趟快速排序結(jié)束后的結(jié)果( )(A)10,15,14,18,20,36,40,21(B)10,15,14,18,20,40,36,21(C)10,15,14,20,18,40,36,2l(D)15,10,14,18,20,36,40,21設(shè)二叉排序樹中有n個(gè)結(jié)點(diǎn),則在二叉排序樹的平均平均查找長(zhǎng)度為(。(A)O(1) (B)O(logn) (C) (D)O(n2)2設(shè)無向圖G中有n個(gè)頂點(diǎn)e條邊,則其對(duì)應(yīng)的鄰接表中的表頭結(jié)點(diǎn)和表結(jié)點(diǎn)的個(gè)數(shù)分別為(。n,e (B)e,n (C)2n,e (D)n,2e設(shè)強(qiáng)連通圖中有n個(gè)頂點(diǎn),則該強(qiáng)連通圖中至少有()條邊。(A)n(n-1) (B)n+1 (C)n (D)n(n+1)設(shè)有5000個(gè)待排序的記錄關(guān)鍵字,如果需要用最快的方法選出其中最小的10鍵字,則用下列()方法可以達(dá)到此目的。快速排序 (B)堆排序 (C)歸并排序 (D)插入排10.下列四種排序中()的空間復(fù)雜度最大。(A)插入排序 (B)冒泡排序 (C)堆排序 (D)歸并排二、填空(48分,其中最后兩小題各6分)數(shù)據(jù)的物理結(jié)構(gòu)主要包和 兩種情況。設(shè)一棵完全二叉樹中有500個(gè)結(jié)點(diǎn),則該二叉樹的深度;若用二叉鏈表作該完全二叉樹的存儲(chǔ)結(jié)構(gòu),則共個(gè)空指針域。設(shè)輸入序列為1、、3,則經(jīng)過棧的作用后可以得種不同的輸出序列。設(shè)有向圖G用鄰接矩陣A[n][n]作為存儲(chǔ)結(jié)構(gòu)則該鄰接矩陣中第i行上所有元素之和等頂點(diǎn)i的 ,第i列上所有元素之和等于頂點(diǎn)i的 。設(shè)哈夫曼樹中共有n個(gè)結(jié)點(diǎn),則該哈夫曼樹中個(gè)度數(shù)為1的結(jié)點(diǎn)。設(shè)有向圖G中有n個(gè)頂點(diǎn)e條有向邊,所有的頂點(diǎn)入度數(shù)之和為d,則e和d的關(guān)系為 。 遍歷二叉排序樹中的結(jié)點(diǎn)可以得到一個(gè)遞增的關(guān)鍵字序列(序。設(shè)查找表中有 100個(gè)元素,如果用二分法查找方法查找數(shù)據(jù)元素 *,則最多需要比較 是否在查找表中。不論是順序存儲(chǔ)結(jié)構(gòu)的棧還是鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的棧,其入棧和出棧操作的時(shí)間復(fù)雜度均為 。設(shè)有n個(gè)結(jié)點(diǎn)的完全二叉樹,如果按照從自上到下、從左到右從1開始順序編號(hào),則第個(gè)結(jié)點(diǎn)的雙親結(jié)點(diǎn)編號(hào),右孩子結(jié)點(diǎn)的編號(hào)。11.設(shè)一組初始記錄關(guān)鍵字(72,73,71,23,94,16,5),則以記錄關(guān)鍵字72為基準(zhǔn)的趟快速排序結(jié)果。12.設(shè)有向圖G中有向邊的集合E={<1,2>,<2,3>,<1,4>,<4,2>,<4,3>},則該圖的一種拓?fù)湫蛄小?structrecord{intkey;intothers;};inthashsqsearch(structrecordhashtable[],intk){inti,j; j=i=k%p;while(hashtable[j].key!=k&&hashtable[j].flag!=0){j=( )%m;if(i==j)if( )return(j);elsereturn(-1);}下列算法實(shí)現(xiàn)在二叉排序樹上查找關(guān)鍵值typedefstructnode{intkey;structnode*lchild;structnode*rchild;}bitree;bitree *bstsearch(bitree*t,int k){if(t==0)return(0);else while(t!=0)if(t->key==k) ;elseif(t->key>k)t=t->lchild;else ;}三、算法設(shè)計(jì)題(22分)1.設(shè)計(jì)在單鏈表中刪除值相同的多余結(jié)點(diǎn)的算法。2.設(shè)計(jì)一個(gè)求結(jié)點(diǎn)*在二叉樹中的雙親結(jié)點(diǎn)算法。數(shù)據(jù)結(jié)構(gòu)試卷(三)參考答案一、選擇題1.B2.B3.A4.A5.A6.B7.D8.C9.B10.D第3小題分析:首先用指針變量q指向結(jié)點(diǎn)A的后繼結(jié)點(diǎn)B,然后將結(jié)點(diǎn)B的值復(fù)制到結(jié)點(diǎn)A中,最后刪除結(jié)點(diǎn)B。第9小題分析:9快速排序、歸并排序和插入排序必須等到整個(gè)排序結(jié)束后才能夠求出最小的10個(gè)數(shù),而堆排序只需要在初始堆的基礎(chǔ)上再進(jìn)行10次篩選即可,每次篩選的時(shí)間復(fù)雜度為O(log2n)。二、填空題1.順序存儲(chǔ)結(jié)構(gòu)、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)2.9,5013.54.出度,入度5.06.e=d7.中序8.79.O(1)10.i/2,2i+111.(5,16,71,23,72,94,73)12.(1,4,3,2)13.j+1,hashtable[j].key==k14.return(t),t=t->rchild第8小題分析:二分查找的過程可以用一棵二叉樹來描述,該二叉樹稱為二叉判定樹。在有序表上進(jìn)行二分查找時(shí)的查找長(zhǎng)度不超過二叉判定樹的高度1+log2n。三、算法設(shè)計(jì)題typedefintdatatype;typedefstructnode{datatypedata;structnode*ne*t;}lklist;voiddelredundant(lklist*&head){lklist*p,*q,*s;for(p=head;p!=0;p=p->ne*t){for(q=p->ne*t,s=q;q!=0;)if(q->data==p->data){s->ne*t=q->ne*t;free(q);q=s->ne*t;}else{s=q,q=q->ne*t;}}}*在二叉樹中的雙親結(jié)點(diǎn)算法。typedefstructnode{datatypedata;structnode*lchild,*rchild;}bitree;bitree*q[20];intr=0,f=0,flag=0;voidpreorder(bitree*bt,char*){if(bt!=0&&flag==0)if(bt->data==*){flag=1;return;}else{r=(r+1)%20;q[r]=bt;preorder(bt->lchild,*);preorder(bt->rchild,*);}}voidparent(bitree*bt,char*){inti;preorder(bt,*);for(i=f+1;i<=r;i++)if(q[i]->lchild->data==*||q[i]->rchild->data)break;if(flag==0)printf("notfound*\n");elseif(i<=r)printf("%c",bt->data);elseprintf("notparent");}數(shù)據(jù)結(jié)構(gòu)試卷(四)一、選擇題(30分)設(shè)一維數(shù)組中有n個(gè)數(shù)組元素,則讀取第i個(gè)數(shù)組元素的平均時(shí)間復(fù)雜度為(。O(n) (B)O(nlogn) (C)O(1) (D)O(n2)2設(shè)一棵二叉樹的深度為k,則該二叉樹中最多有()個(gè)結(jié)點(diǎn)。(A)2k-1 (B)2k (C)2k-1 (D)2k-1*無向圖中有n個(gè)頂點(diǎn)e條邊,則該無向圖中所有頂點(diǎn)的入度之和為(。n (B)e (C)2n (D).在二叉排序樹中插入一個(gè)結(jié)點(diǎn)的時(shí)間復(fù)雜度為(。(A)O(1) (B)O(n) (C)O(logn) (D)O(n2)25.設(shè)*有向圖的鄰接表中有n個(gè)表頭結(jié)點(diǎn)和m個(gè)表結(jié)點(diǎn),則該圖中有()條有向邊。(A)n (B)n-1 (C)m (D)m-16.設(shè)一組初始記錄關(guān)鍵字序列為(345,253,674,924,627),則用基數(shù)排序需要進(jìn)行趟的分配和回收才能使得初始關(guān)鍵字序列變成有序序列。(A)3 (B)4 (C)5 (D)設(shè)用鏈表作為棧的存儲(chǔ)結(jié)構(gòu)則退棧操作(。必須判別棧是否為滿 (B)必須判別棧是否為空(C)判別棧元素的類型 (D)對(duì)棧不作任何判8.下列四種排序中()的空間復(fù)雜度最大。(A)快速排序 (B)冒泡排序 (C)希爾排序 (D)堆設(shè)二叉樹中度數(shù)為0的結(jié)點(diǎn)數(shù)為N,度數(shù)為1的結(jié)點(diǎn)數(shù)為N2的結(jié)點(diǎn)數(shù)為N,則下列等式成立的是(。N=N+1 (B)N=N
0 l 2(C)N=N+1 (D)N=2N+l0 1 0 l 2 0 2 0 1設(shè)有序順序表中有n*過(。(A)logn+1 (B)logn-1 (C)logn (D)log(n+1)2 2 2 2二、填空題(42分)設(shè)有n個(gè)無序的記錄關(guān)鍵字,則直接插入排序的時(shí)間復(fù)雜度,快速排序的均時(shí)間復(fù)雜度。設(shè)指針變量 p指向雙向循環(huán)鏈表中的結(jié)點(diǎn) *,則刪除結(jié)點(diǎn)*需要執(zhí)行的語句序列為 (分別為llink和rlin。根據(jù)初始關(guān)鍵字序(19,22,01,38,10)建立的二叉排序樹的高度。深度為k的完全二叉樹中最少個(gè)結(jié)點(diǎn)。設(shè)初始記錄關(guān)鍵字序列為(K,K,…,K),則用篩選法思想建堆必須從第 個(gè)元素開始進(jìn)行篩選。
1 2 n設(shè)哈夫曼樹中共有99個(gè)結(jié)點(diǎn),則該樹中個(gè)葉子結(jié)點(diǎn);若采用二叉鏈表作存儲(chǔ)結(jié)構(gòu),則該樹中個(gè)空指針域。設(shè)有一個(gè)順序循環(huán)隊(duì)列中有M個(gè)存儲(chǔ)單元?jiǎng)t該循環(huán)隊(duì)列中最多能夠存?zhèn)€隊(duì)列元素;當(dāng)前實(shí)際存?zhèn)€隊(duì)列元素(設(shè)頭指針F指向當(dāng)前隊(duì)頭元素的一個(gè)位置,尾指針指向當(dāng)前隊(duì)尾元素的位置。設(shè)順序線性表中有n個(gè)數(shù)據(jù)元素則第i個(gè)位置上插入一個(gè)數(shù)據(jù)元素需要移動(dòng)表 個(gè)數(shù)據(jù)元素;刪除第i個(gè)位置上的數(shù)據(jù)元素需要移動(dòng)表個(gè)元素。9.設(shè)一組初始記錄關(guān)鍵字序列(20,18,22,16,30,19),則以20為中軸的一趟快速排序結(jié)果。10.設(shè)一組初始記錄關(guān)鍵字序列為(20,18,22,16,30,19),則根據(jù)這些初始關(guān)鍵字序列建成的初始堆。*無向圖G中有n個(gè)頂點(diǎn),用鄰接矩陣A作為該圖的存儲(chǔ)結(jié)構(gòu),則頂點(diǎn)i和頂點(diǎn)j為鄰接點(diǎn)的條件。設(shè)無向圖對(duì)應(yīng)的鄰接矩陣為A,則A中第i上非0元素的個(gè)第i列上非元素的個(gè)數(shù)(填等于,大于或小于。設(shè)前序遍*二叉樹的序列為ABCD,中序遍歷該二叉樹的序列為BADC,則后序遍該二叉樹的序列。設(shè)散列函數(shù)H(k)=kmodhashtalbe中查找關(guān)鍵字值等于k的結(jié)點(diǎn),成功時(shí)返回指向關(guān)鍵字0。typedefstructnode{intkey;structnode*ne*t;}lklist;voidcreatelkhash(lklist*hashtable[]){inti,k; lklist*s;for(i=0;i<m;i++) for(i=0;i<n;i++){s=(lklist*)malloc(sizeof(lklist));s->key=a[i];k=a[i]%p;s->ne*t=hashtable[k]; ;}}三、算法設(shè)計(jì)題(28分)中結(jié)點(diǎn)空間設(shè)計(jì)出三個(gè)單鏈表的算法,使每個(gè)單鏈表只包含同類字符。設(shè)計(jì)在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上交換二叉樹中所有結(jié)點(diǎn)左右子樹的算法。在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上建立一棵二叉排序樹。數(shù)據(jù)結(jié)構(gòu)試卷(四)參考答案一、選擇題1.C 2.D 3.D 4.B6.A 7.B 8.A 二、填空題1.O(n2),O(nlogn)22.p>llink->rlink=p->rlink;p->rlink->llink=p->rlink3.34.2k-15.n/26.50,517.m-1,(R-F+M)%M8.n+1-i,n-i9.(19,18,16,20,30,22)10.(16,18,19,20,32,22)11.A[i][j]=112.等于13.BDCA14.hashtable[i]=0,hashtable[k]=s三、算法設(shè)計(jì)題
5.C10.A結(jié)點(diǎn)空間設(shè)計(jì)出三個(gè)單鏈表的算法,使每個(gè)單鏈表只包含同類字符。typedefchardatatype;typedefstructnode{datatypedata;structnode*ne*t;}lklist;voidsplit(lklist*head,lklist*&ha,lklist*&hb,lklist*&hc){lklist*p;ha=0,hb=0,hc=0;for(p=head;p!=0;p=head){head=p->ne*t;p->ne*t=0;if(p->data>='A'&&p->data<='Z'){p->ne*t=ha;ha=p;}elseif(p->data>='0'&&p->data<='9'){p->ne*t=hb;hb=p;}else{p->ne*t=hc;hc=p;}}}typedefstructnode{intdata;structnode*lchild,*rchild;}bitree;voidswapbitree(bitree*bt){bitree*p;if(bt==0)return;swapbitree(bt->lchild);swapbitree(bt->rchild);p=bt->lchild;bt->lchild=bt->rchild;}#definen10typedefstructnode{intkey;structnode*lchild,*rchild;}bitree;voidbstinsert(bitree*&bt,intkey){if(bt==0){bt=(bitree*)malloc(sizeof(bitree));bt->key=key;bt->lchild=bt->rchild=0;}elseif(bt->key>key)bstinsert(bt->lchild,key);elsebstinsert(bt->rchild,key);}voidcreatebsttree(bitree*&bt){inti;for(i=1;i<=n;i++)bstinsert(bt,random(100));}數(shù)據(jù)結(jié)構(gòu)試卷(五)(30分).?dāng)?shù)據(jù)的最小單位是(數(shù)據(jù)項(xiàng) (B)數(shù)據(jù)類型 (C)數(shù)據(jù)元素 (D)數(shù)據(jù)變量2.設(shè)一組初始記錄關(guān)鍵字序列則以增量d=4的一趟希爾排序結(jié)束后前4條記錄關(guān)鍵字為((A)40,50,20,95(B)15,40,60,20(C)15,20,40,45(D)45,40,15,203.設(shè)一組初始記錄關(guān)鍵字序列為(25,50,15,35,80,85,20,40,36,70),其中含有5個(gè)長(zhǎng)度為2果為(。(A)15,25,35,50,20,40,80,85,36,70(B)15,25,35,50,80,20,85,40,70,36(C)15,25,35,50,80,85,20,36,40,70(D)函數(shù)substr("DATASTRUCTURE”,9(。"STRUCTURE” (B)"DATA”(C)"ASTRUCTUR” (D)"DATASTRUCTURE”設(shè)一個(gè)有序的單鏈表中有n則該操作的時(shí)間復(fù)雜度為(。(A)O(logn) (B)O(1) (C)O(n2) (D)O(n)2設(shè)一棵m叉樹中度數(shù)為0的結(jié)點(diǎn)數(shù)為N,度數(shù)為1的結(jié)點(diǎn)數(shù)為N,……,度數(shù)為m的0 l結(jié)點(diǎn)數(shù)為N,則N(。0N+N+……+Nm (B)l 2l+N+2N+3N+……+(m-1)Nm2 3 4(C)N+2N+3N+……+(m-1)Nm (D)2N+3N+……+(m+1)Nm2 3 4 l 21000*最多需要比較()次。(A)25 (B)10 (C)7 (D)18.設(shè)連通圖G中的邊集E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度臨時(shí)彩鋼活動(dòng)房租賃合同范本3篇
- 2024碎磚再利用工程采購合同書3篇
- 2024消防無人機(jī)系統(tǒng)采購合同
- 2025年度鮮蛋養(yǎng)殖戶互助合作供銷合同范本(2025版)3篇
- 二零二五年度航空物流樞紐建設(shè)與運(yùn)營合同3篇
- 2025年度項(xiàng)目部承包智慧社區(qū)建設(shè)項(xiàng)目合同2篇
- 2024版工程勞務(wù)分包合同參考范本
- 2025便利店品牌升級(jí)商品采購合作協(xié)議3篇
- 2024簡(jiǎn)單的家政服務(wù)合同協(xié)議
- 2025年度私人住宅買賣合同(含社區(qū)服務(wù))3篇
- 2025年河北供水有限責(zé)任公司招聘筆試參考題庫含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說課稿-2024-2025學(xué)年高中英語人教版(2019)必修第一冊(cè)
- 農(nóng)發(fā)行案防知識(shí)培訓(xùn)課件
- 社區(qū)醫(yī)療抗菌藥物分級(jí)管理方案
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術(shù)規(guī)范
- 2024年九年級(jí)上德育工作總結(jié)
- 2024年儲(chǔ)罐呼吸閥項(xiàng)目可行性研究報(bào)告
- 除氧器出水溶解氧不合格的原因有哪些
- 沖擊式機(jī)組水輪機(jī)安裝概述與流程
- 新加坡SM2數(shù)學(xué)試題
- 畢業(yè)論文-水利水電工程質(zhì)量管理
評(píng)論
0/150
提交評(píng)論