復習題1[共12頁]
《復習題1[共12頁]》由會員分享,可在線閱讀,更多相關《復習題1[共12頁](12頁珍藏版)》請在裝配圖網上搜索。
1、一、選擇題 1-1 下列關于數(shù)據(jù)和邏輯結構的敘述中,哪一個是不正確的( )。 A ) 數(shù)據(jù)的邏輯結構是數(shù)據(jù)間關系的描述 B) 數(shù)據(jù)的邏輯結構抽象反映數(shù)據(jù)元素間的邏輯關系 C) 數(shù)據(jù)的邏輯結構具體反映數(shù)據(jù)在計算機中的存儲方式 D) 數(shù)據(jù)的邏輯結構分為線性結構和非線性結構 C 1-2 以下關于數(shù)據(jù)的存儲結構的敘述中哪一條是正確的( )。 A) 數(shù)據(jù)的存儲結構是數(shù)據(jù)間關系的抽象描述 B) 數(shù)據(jù)的存儲結構是邏輯結構在計算機存儲器中的實現(xiàn) C) 數(shù)據(jù)的存儲結構分為線性結構和非線性結構 D) 數(shù)據(jù)的存儲結構對數(shù)據(jù)運算的具體實現(xiàn)沒有影響 B 二、簡答題
2、1-1 數(shù)據(jù)結構的存儲方式有哪幾種? 1-2 算法的時間復雜度僅與問題的規(guī)模相關嗎 ? 1-1 數(shù)據(jù)結構的存儲方式有哪幾種? 【解析】 常用的存儲表示方法有四種 : 1 、順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現(xiàn)。由此得到的存儲表示稱為順序存儲結構,通常借助程序語言的數(shù)組描述。 2 、鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針字段表示。由此得到的存儲表示稱為鏈式存儲結構 , 通常借助于程序語言的指針類型描述。 3 、索引存儲方法:除建立存儲結點信息外,
3、還建立附加的索引表來標識結點的地址。組成索引表的索引項由結點的關鍵字和地址組成。若每個結點在索引表中都有一個索引項,則該索引表稱之為稠密索引( Dense Index )。若一組結點在索引表中只對應一個索引項,則該索引表稱為稀疏索引。 4 、散列存儲方法:就是根據(jù)結點的關鍵字直接計算出該結點的存儲地址。 1-2 算法的時間復雜度僅與問題的規(guī)模相關嗎 ? 【解析】 算法的時間復雜度不僅與問題的規(guī)模相關,還與輸入實例中的初始狀態(tài)有關。但在最壞的情況下,其時間復雜度就是只與求解問題的規(guī)模相關的。我們在討論時間復雜度時,一般就是以最壞情況下的時間復雜度為準的。 三、應用題: 分析以
4、下程序段的時間復雜度。 int i , j , k ; for ( i=0 ; i 〈 n ; i++ 〉 // ① for ( j=0 ; j 〈 n ; j++ 〉 // ② { c[i][j]=0 ; // ③ for ( k=0 ; k 〈 n ; k++ 〉 // ④ c[i][j]=c[i][j]+a[i][k]+b[k][j] ; // ⑤ } 【解析】 語句①的循環(huán)控制變量 i 要增加到 n ,測試到 i=n 成立才會終止,故它的頻度為 n+1 ; 語句②作為語句①循環(huán)體內的語句應該執(zhí)行 n 次,但語句②本身要執(zhí)行 n+1 次,故語句
5、②的頻度是 n ( n+1 ); 同理可得語句③、④和⑤的頻度分別是 n 2 , n 2 ( n+1 )和 n 3 。該程序段所有語句的頻度之和為: T ( n ) =2n3 +3n 2 +2n+1 其復雜度為 O ( n 3 )。 一、簡答 1 何時選用順序表、何時選用鏈表作為線性表的存儲結構為宜? 2 在順序表中插入和刪除一個結點需平均移動多少個結點?具體的移動次數(shù)取決于哪兩個因素? 3 為什么在單循環(huán)鏈表中設置尾指針比設置頭指針更好? 4 在單鏈表、雙鏈表和單循環(huán)鏈表中,若僅知道指針p指向某結點,不知道頭指針,能否將結點*p從相應的鏈表中刪去?若可以,其
6、時間復雜度各為多少? 5 下述算法的功能是什么? LinkList Demo(LinkList L){ // L 是無頭結點單鏈表 ListNode *Q,*P; if(L&&L->next){ Q=L;L=L->next;P=L; while (P->next) P=P->next; P->next=Q; Q->next=NULL; } return L; } // Demo 6、試描述頭指針、頭結點、開始結點的區(qū)別、并說明頭指針和頭結點的作用。 二、下列函數(shù)的功能是,對以帶頭結點的單鏈表作為存儲結構的兩個遞增有
7、序表(表中不存在值相同的數(shù)據(jù)元素)進行如下操作:將所有在Lb表中存在而La表中不存在的結點插入到La中,其中La和Lb分別為兩個鏈表的頭指針。請在空缺處填入合適內容,使其成為一個完整的算法。 void union (LinkList La, LinkList Lb){ /*本算法的功能是將所有Lb表中存在而La表中不存在的結點插入到La表中*/ LinkList pre = La, q; LinkList pa = La -> next; LinkList pb = Lb -> next; free (Lb); while (pa && pb){ if (pa ->
8、data
9、指針的大小為4個字節(jié)。如果采用有30個元素的數(shù)組存儲,那么當數(shù)組中有效元素個數(shù)n滿足什么條件時,數(shù)組的存儲效率比不帶頭結點的單鏈表更高。 數(shù)組總的空間240個字節(jié),數(shù)組的效率為8n/240;鏈表的總空間為12n,效率為8n/12n。故可得:n〉20 四、畫出執(zhí)行下列各語句后各指針及鏈表的示意圖。 L=(LinkList)malloc(sizeof(Lnode)); P=L; for(i=1;i<=4;i++){ p->next=(LinkList) malloc(sizeof(Lnode)); p=p->next; P->data=i*2-1;} P
10、->next=NULL; for(i=4;i>=1;i--) InsertList (L,i+1,i*2); for(i=1;i<=3;i++) DeleteList (L,i); 2、順序隊列一般應該組織成為循環(huán)隊列的形式,而且一般隊列頭或為隊列尾其中之一虛指一位,滿隊列時實際上數(shù)組中還有一個空閑位置。請分析這樣設置的理由。 有利于判斷隊列是空還是滿。因為隊列有n+2種狀態(tài):空,1個元素, 2個元素,…, n個元素,滿。但實際上rear只有n種可能的取值,故必須尋求其他途徑解決隊空和隊滿。當然也有其他方法。 3、隊列可以用循環(huán)單鏈表來實現(xiàn),故可以只設置一
11、個頭指針或者只設置一個尾指針。請分析對于循環(huán)單鏈表實現(xiàn)的隊列,用那種方案更合適。 設置尾指針。因為是循環(huán)單鏈表,設置尾指針,可以在O(1)的時間內找到頭;如果只設置頭指針,要在O(n)時間內找到尾。設置尾指針,入隊和出隊的時間復雜度均為O(1),設置頭指針,出隊O(1),入隊O(n)。 一、單項選擇題 1、由于二叉樹中每個結點的度最大為2,所以二叉樹是一種特殊的樹,這種說法 (A)正確 (B)錯誤 2、某二叉樹的先序遍歷序列和后序遍歷序列正好相反,則該二叉樹一定是 (A)空或只有一個結點 (B) 完全二叉樹 (C)二叉排序樹 (D) 高度等于其節(jié)點數(shù)
12、3、深度為5的二叉樹至多有 多少個結點 (A)16 (B)32 (C)31 (D)10 4、根據(jù)使用頻率為5個字符設計的哈夫曼編碼不可能是 (A)111,110,10,01,00 (B)000,001,010,011,1 (C)100,11,10,1,0 (D)001,000,01,11,10 二、填空題 1、樹和二叉樹的主要差別是 , 。 2、深度為k的完全二叉樹至少有 個結點,至多有 個結點。 3、一棵二叉樹的第i(i1)層最多有 個結點;一棵有n(n>0)個結點的滿二叉樹共有
13、 個葉子結點和 個非葉子結點。 1、 (1)每個結點最多有兩棵子樹; (2)子樹有左右之分 2、2k-1,2k-1, 3、2i-1, 2 log2n , n- 2 log2n 1、一棵度為2的樹與一棵二叉樹有何區(qū)別? 2、具有三個結點的樹和具有三個結點的二叉樹它們的所有不同形態(tài)有哪些? 3、請說明一棵二叉樹進行先序、中序和后序遍歷,其葉結點的次序是否會發(fā)生變化?為什么? 1、解答:度為2的樹結點有兩個分支,沒有左右之分;一棵二叉樹的結點也可有兩個分支,但有左右之分,且左右不能交換。 3.解答:二叉樹中葉結點必在某結點的左或
14、右子樹中,三種遍歷方法對左右子樹的遍歷都是按先左后右的原則進行。所以在三種遍歷序列中葉結點的相對次序是不會發(fā)生變化的。 4、假設一棵二叉樹的結點數(shù)為33個,則它的最小高度為( ),最大高度為( )。 5、一個高度為h的滿m叉樹,第k層最多有( )個結點,整棵樹最多有( )個結點。 4、最小高度為:6,最大高度為:33 5、第k層最多有 mk-1,整棵樹最多有(mk-1)/(m- 1) 6、一個二叉樹的對稱序列和后序序列分別是DCBAEFG和DCBGFEA,請給出該二叉樹的前序序列。 6、ABCDEFG 7 有7個帶權結點,其權值分別為4,7,8,2,5,16,
15、30,以它們?yōu)槿~子結點構造一顆哈夫曼樹(要求按每個結點的左子樹根結點的權值小于或等于右子樹根結點的權值的次序構造),并計算出其帶權路徑長度WPL。 可得帶權路徑長度: WPL=(2+4)5+(5+7+8)4+162+301=172 1、一個n個頂點的無向圖最多有 條邊。 (A)n (B)n(n-1) (C)n(n-1)/2 (D)2n 2、 (A)1/2 (B)1 (C)2 (D)4 3.兩種遍歷算法。 1、設線性表(a1,a2,…,a500)元素的值由小到大排列,對一個給定的k值用折半法查找線性表,在查找不成功的情況下至多
16、需比較 次 1. log2n+1 2 試述順序查找法、折半查找法和分塊查找法對被查找的表中元素的要求。對長度為n的表來說,三種查找法在查找成功時的查找長度各是多少? 查找要求:順序查找法:表中元素可以任意存放,(n+1)/2 折半查找法:有序存放 log2(n+1)-1 分塊查找法:分塊有序(n/s+s)/2+1,b為塊數(shù),s為塊中記錄數(shù) 1.數(shù)據(jù)的基本單位是( C?。? A.數(shù)據(jù)項 B.數(shù)據(jù)類型 C.數(shù)據(jù)元素 D.數(shù)據(jù)變量 2.下列程序的時間復雜度為( C?。? i=0;s=0; while(s
17、 18、)
A.s.elem[top]=e; B.s.elem[top+1]=e;
s.top=s.top+1; s.top=s.top+1;
C.s.top=s.top+1; D.s.top=s.top+1;
s.elem[top+1]=e; s.elem[top]=e;
6.循環(huán)隊列sq中,用數(shù)組elem[0??25]存放數(shù)據(jù)元素,sq.front指示隊頭元素的前一個位置,sq.rear指示隊尾元素的當前位置,設當前sq.front為20,sq.rear為12,則當前隊列中的元素個數(shù)為( D )
A.8 B.16
C.17 D.18
8.含有10個結點的二叉樹中,度為 19、0的結點數(shù)為4,則度為2的結點數(shù)為(A )
A.3 B.4
C.5 D.6
10.有n個結點的有向完全圖的弧數(shù)是( C ?。?
A.n2 B.2n
C.n(n-1) D.2n(n+1)
11.設圖的鄰接鏈表如題12圖所示,則該圖的邊的數(shù)目是(B?。?
A.4 B.5
C.10 D.20
12.已知一個有序表為(13,18,24,35,47,50,62,83,90,115,134),當二分檢索值為90的元素時,檢索成功需比較的次數(shù)是( B )
A.1 B.2
C.3 D.4
13.排序算法中,第一趟排序后,任一元素都不能確定其最終位置的算法是( 20、)
A.選擇排序 B.快速排序
C.冒泡排序 D.插入排序
14.數(shù)據(jù)結構是( D?。?
A.一種數(shù)據(jù)類型
B.數(shù)據(jù)的存儲結構
C.一組性質相同的數(shù)據(jù)元素的集合
D.相互之間存在一種或多種特定關系的數(shù)據(jù)元素的集合
15.算法分析的目的是( B?。?
A.辨別數(shù)據(jù)結構的合理性
B.評價算法的效率
C.研究算法中輸入與輸出的關系
D.鑒別算法的可讀性
16.在線性表的下列運算中,不改變數(shù)據(jù)元素之間結構關系的運算是( D?。?
A.插入 B.刪除
C.排序 D.定位
17.若進棧序列為1,2,3,4,5,6,且進棧和出??梢源┎暹M行,則可能出現(xiàn)的出棧序列為( B )
21、A.3,2,6,1,4,5 B.3,4,2,1,6,5
C.1,2,5,3,4,6 D.5,6,4,2,3,1
18.二維數(shù)組A[8][9]按行優(yōu)先順序存儲,若數(shù)組元素A[2][3]的存儲地址為1087,A[4][7]的存儲地址為1153,則數(shù)組元素A[6][7]的存儲地址為( A )
A.1207 B.1209
C.1211 D.1213
19.在按層次遍歷二叉樹的算法中,需要借助的輔助數(shù)據(jù)結構是( A )
A.隊列 B.棧
C.線性表 D.有序表
20.在任意一棵二叉樹的前序序列和后序序列中,各葉子之間的相對次序關系(B?。?
A.不一定相同 B.都相同
C.都不相同 D 22、.互為逆序
1.稱算法的時間復雜度為O(f(n)),其含義是指算法的執(zhí)行時間和___ f(n)____的數(shù)量級相同。
2.假設為循環(huán)隊列分配的向量空間為Q[20],若隊列的長度和隊頭指針值分別為13和17,則當前尾指針的值為_10___。
3.一棵含999個結點的完全二叉樹的深度為_______。
4.含n個頂點的無向連通圖中至少含有______條邊。
6.在數(shù)據(jù)結構中,數(shù)據(jù)的邏輯結構分為集合、________、樹形結構和圖狀結構等四類。
7. 順序表的存儲密度為________,而鏈表的存儲密度為________。
是指一個結點中數(shù)據(jù)域所占的存儲單元和整個結點所占的存儲 23、單元之比
8. 對于棧只能在________插入和刪除元素。
9. 在循環(huán)隊列中,存儲空間為0~n-1,設隊頭指針front指向隊頭元素前一個空閑元素,隊尾指針指向隊尾元素,那么隊滿標志為front=(rear+1)%n,隊空標志為________。
10. 三個結點可構成________種不同形態(tài)的二叉樹。
1.若對具有n個元素的有序的順序表和無序的順序表分別進行順序查找,試在下述兩種情況下分別討論兩者在等概率時的平均查找長度:
(1)查找不成功,即表中無關鍵字等于給定值K的記錄;
(2)查找成功,即表中有關鍵字等于給定值K的記錄。
答:查找不成功時,需進行n+1次 24、比較才能確定查找失敗。因此平均查找長度為n+1,這時有序表和無序表是一樣的。
查找成功時,平均查找長度為(n+1)/2,有序表和無序表也是一樣的。因為順序查找與表的初始序列狀態(tài)無關。
2.給出樹如下圖所示,請寫出先序遍歷和中序遍歷的節(jié)點次序。
3.一棵度為2的有序樹與一棵二叉樹有何區(qū)別?
答:
一棵度為二的有序樹與一棵二叉樹的區(qū)別在于:有序樹的結點次序是相對于另一結點而言的,如果有序樹中的子樹只有一個孩子時,這個孩子結點就無須區(qū)分其左右次序,而二叉樹無論其孩子數(shù)是否為2,均需確定其左右次序,也就是說二叉樹的結點次序不是相對于另一結點而言而是確定的。
4.設將整數(shù) 25、1,2,3,4依次進棧,但只要出棧時棧非空,則可將出棧操作按任何次序夾入其中,請回答下述問題:
(1)若入、出棧次序為Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),則出棧的數(shù)字序列為何(這里Push(i)表示i進棧,Pop( )表示出棧)?
(2)能否得到出棧序列1423和1432?并說明為什么不能得到或者如何得到。
答: (1)出棧序列為:1324
(2)不能得到1423序列。因為要得到14的出棧序列,則應做Push(1),Pop(),Push(2),Push (3),Push(4),Pop()。 26、這樣,3在棧頂,2在棧底,所以不能得到23的出棧序列。能得到1432的出棧序列。具體操作為:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。
1.指出下述程序段的功能是什么?
void Demo1(SeqStack *S){
int i; arr[64] ; n=0 ;
while ( StackEmpty(S)) arr[n++]=Pop(S);
for (i=0, i< n; i++) Push(S, arr[i]);
} //Demo1
程序段的功能是將一棧中的元素按反序 27、重新排列,也就是原來在棧頂?shù)脑胤诺綏5?,棧底的元素放到棧頂。此棧中元素個數(shù)限制在64個以內。
2.已知二叉樹的先序序列和中序序列分別為HDACBGFE和ADCBHFEG,畫出該二叉樹.
3.以二叉鏈表為存儲結構, 寫一算法交換各結點的左右子樹。
答:
要交換各結點的左右子樹,最方便的辦法是用后序遍歷算法,每訪問一個結點時把兩棵子樹的指針進行交換,最后一次訪問是交換根結點的子樹。
void ChangeBinTree(BinTree *T)
{ //交換子樹
if(*T)
{ //這里以指針為參數(shù)使得交換在實參的結點上進行后序遍歷
28、 BinTree temp;
ChangeBinTree(&(*T)->lchild);
ChangeBinTree(&(*T)->rchild);
temp=(*T)->lchild;
(*T)->lchild=(*T)->rchild;
(*T)->rchild=temp;信道容量
1. 假設用于通信的電文由字符集{a,b,c,d,e,f,g,h}中的字母構成,這8個字母在電文中出現(xiàn)的概率分別為{0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}.為這8個字母設計哈夫曼編碼。
(1)哈夫曼編碼
根據(jù)上圖可得編碼表:
a:1001
b:01
c:10111
d:1010
e:11
f:10110
g:00
h:1000
2.給出下圖的從結點a開始的遍歷次序,1)深度優(yōu)先;2)廣度優(yōu)先。
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。