算法 + 數據結構=程序
算法通常是決定程序效率的關鍵,但一切算法最終都要在相應的數據結構上實現。
數據結構是計算機存儲、組織數據的方式,是指相互之間存在一種或多種特定關系的數據元素的集合。許多算法的精髓就是在於選擇了合適的數據結構作為基礎。
選擇數據結構的考慮要素:
1、數據結構要適應問題的狀態描述。在程序中,要涉及到狀態的存儲、轉換等。選擇的數據結構必需先適用於描述狀態,並使對狀態的各種操作能夠明確地定義在數據結構上。
2、數據結構應與所選擇的算法相適應。數據結構是為算法服務的,其選擇要充分考慮算法的各種操作。
數據結構對算法的影響:
1、數據結構的存儲能力。如果數據結構存儲能力強、存儲信息多,算法將會較好設計。反之對於過於簡單的數據結構,可能就要設計一套比較復雜的算法了。在這一點上,經常體現時間與空間的矛盾。
2、定義在數據結構上的操作。“數據結構”一詞之所以不同於“變量”,主要在於數據結構上定義了基本操作,這些操作就好比工具,有了好的工具,算法設計也會比較輕松。
數據結構
根據數據元素之間關系的不同特性,通常可以歸類為下列四類基本結構:
(1)集合結構:元素間關系僅是同屬一個集合。
(2)線性結構:元素間存在一對一的關系。
(3)樹形結構:元素間的關系是一對多的關系。
(4)圖形結構:元素間的關系是多對多的關系。
一、線性結構
線性結構是N個數據元素構成的有限序列。線性結構存儲方式分為順序存儲結構和鏈式存儲結構兩種。
順序存儲結構
平時使用的數組就是這種結構,比如Pascal:a:[1..100] oflongint; C++:int a[100]。
當需要在順序存儲的線性表中插入一個數據元素時,需要順序移動后續的元素以“騰”出某個合適的位置放置新元素。
鏈式存儲結構
二維數組與線性表
如果某一線性表,它的每一個數據元素分別是一個線性表,這樣的二維表在數據實現上通常使用二維數組。二維數組的一個形象比喻:多個縱隊形成的方塊 m * n。
數組地址計算問題
題目描述:已知N*(N+1)/ 2個數據,按行的順序存入數組b[1],b[2],…中。其中第一個下標表示行,第二個下標表示列。若aij (i>=j,j=1,2,…,,n)存於b[k]中,問:k,i,j之間的關系如何表示?
答案:K=i*(i-1)/2+j
棧與卡特蘭數:略,可參考:
隊列
先進先出。允許插入的一端稱為隊尾(rear),允許刪除的一端稱為隊頭(front)。
循環隊列
頭指針指向隊列中隊頭元素的前一個位置,尾指針指示隊尾元素在隊列中的當前位置。
二、樹型結構
基本概念:根、葉子、子樹。
結點的度:結點擁有的子樹數
二叉樹的遍歷和性質:略,可參考:
三、圖形結構
圖常用的存儲結構:鄰接矩陣
歐拉圖
歐拉通路(回路):通過圖G的每條邊一次且僅一次,而且走遍每個結點的通路(回路),就是歐拉通路(回路)。存在歐拉回路的圖就是歐拉圖。
歐拉回路要求邊不能重復,結點可以重復。筆不離開紙,不重復地走完所有的邊,且走過所有結點,也就是所謂的一筆畫。
歐拉圖或通路的判定
1、無向連通圖G是歐拉圖,G不含奇數度結點(G的所有結點度數為偶數);
2、非平凡連通圖G含有歐拉通路,G最多有兩個奇數度的結點;
3、連通有向圖D含有有向歐拉回路(即歐拉圖),D中每個結點的入度=出度。
哈密頓圖
哈密頓通路(回路):通過圖G的每個結點一次,且僅一次的通路(回路),就是哈密頓通路(回路)。存在哈密頓回路的圖就是哈密頓圖。
每日練習
1、一個向量第一個元素的存儲地址是100,每個元素的長度是2,則第5個元素的地址是( ) 。
A)110 B)108 C) 100 D) 109
2、設有一個含有13個元素的Hash表(0~12),Hash函數是:H(key)=key% 13,其中% 是求余數運算。用線性探查法解決沖突,則對於序列(2、8、31、20、19、18、53、27),18應放在第幾號格中( ) 。
A) 5 B) 9 C) 4 D) 0
3、在一個有向圖中,所有頂點的入度之和等於所有頂點的出度之和的( ) 倍。
A) 1/2 B)1 C) 2 D) 4
4、要使1...8號格子的訪問順序為:8、2、6、5、7、3、1、4,則下圖中的空格中應填入( )。
A) 6 B) 0 C) 5 D) 3
5、設棧S和隊列Q的初始狀態為空,元素e1,e2,e3,e4,e5,e6依次通過棧S,一個元素出棧后即進入隊列Q,若出隊的順序為e2,e4,e3,e6,e5,e1,則棧S的容量至少應該為( ) 。
A) 2 B) 3 C) 4 D) 5
6、若已知一個棧的入棧順序是1,2,3,…,n,其輸出序列為P1,P2,P3,…,Pn,若P1是n,則Pi是( )
A)i B)n-1 C)n-i+1 D)不確定
7、以下哪一個不是棧的基本運算( )
A)刪除棧頂元素 B)刪除棧底的元素
C)判斷棧是否為空 D)將棧置為空棧
8、下面關於算法的錯誤說法是( )
A)算法必須有輸出 B)算法必須在計算機上用某種語言實現
C)算法不一定有輸入 D)算法必須在有限步執行后能結束
9、在順序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的關鍵碼比較的次數為( )
A)2 B)3 C)4 D)5
10、無向圖G=(V,E),其中V={a,b,c,d,e,f}E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)}對該圖進行深度優先遍歷,得到的頂點序列正確的是( )
A) a,b,e,c,d,f B)a,c,f,e,b,d C)a,e,b,c,f,d D)a,b,e,d,f,c
11、某數列有1000個各不相同的單元,由低至高按序排列;現要對該數列進行二分法檢索(binary-search),在最壞的情況下,需檢視( )個單元。
A.1000 B. 10 C.100 D. 500
12、線性表若采用鏈表存貯結構,要求內存中可用存貯單元地址( )
A.必須連續 B. 部分地址必須連續 C.一定不連續 D. 連續不連續均可
13、下列敘述中,正確的是( )
A.線性表的線性存貯結構優於鏈表存貯結構 B.隊列的操作方式是先進后出
C.棧的操作方式是先進先出 D. 二維數組是指它的每個數據元素為一個線性表的線性表
14、設循環隊列中數組的下標范圍是1~n,其頭尾指針分別為f和r,則其元素個數為( )
A.r-f B.r-f+1 C.(r-f) MOD n+1 D.(r-f+n) MOD n
15、表達式(1+34)*5-56/7 的后綴表達式為( )。
A)1+34*5-56/7 B) -*+1 34 5/56 7 C) 1 34 +5*56 7/-
D) 1 34 5* +56 7/- E) 1 34+5 56 7-*/
16、已知元素(8,25,14,87,51,90,6,19,20),問這些元素以怎樣的順序進入棧,才能使出棧的順序滿足:8在51前面;90在87的后面;20在14的后面;25在6的前面;19在90的后面。( )。(題意是全部進棧,再依次出棧)
A)20,6,8,51,90,25,14,19,87
B)51,6,19,20,14,8,87,90,25
C)19,20,90,7,6,25,51,14,87
D)6,25,51,8,20,19,90,87,14
E)25,6,8,51,87,90,19,14,20
17、假設我們用d=(a1,a2,...,a5),表示無向圖G的5個頂點的度數,下面給出的哪(些)組d 值合理( )。
A){5,4,4,3,1} B){4,2,2,1,1} C){3,3,3,2,2}
D){5,4,3,2,1} E){2,2,2,2,2}
18、完全二叉樹的結點個數為4 * N + 3,則它的葉結點個數為( )。
A. 2 * N B. 2 * N - 1 C. 2 * N + 1 D. 2 * N - 2 E. 2 * N + 2
19、二叉樹T的寬度優先遍歷序列為AB C D E F G H I,已知A是C的父結點,D 是G 的父結點,F 是I 的父結點,樹中所有結點的最大深度為3(根結點深度設為0),可知F的父結點是( )。
A. 無法確定 B. B C. C D.D E. E
20、在所有排序方法中,關鍵字比較的次數與記錄的初始排列次序無關的是( ) 。
A) 希爾排序 B) 起泡排序 C) 插入排序 D) 選擇排序
21、已知,按中序遍歷二叉樹的結果為:abc
問:有多少種不同形態的二叉樹可以得到這一遍歷結果,並畫出這些二叉樹。
22、根據Nocomachns定理,任何一個正整數n的立方一定可以表示成n個連續的奇數的和。例如:
13=1
23=3+ 5
33=7+9+11
43=13+15+17+19
在這里,若將每一個式中的最小奇數稱為X,那么當給出n之后,請寫出X與n之間的關系表達式。
23、將數組{32, 74, 25, 53, 28, 43, 86, 47}中的元素按從小到大的順序排列,每次可以交換任意兩個元素,最少需要交換____次。
24、取火柴游戲的規則如下:一堆火柴有N 根,A、B 兩人輪流取出。每人每次可以取1根或2 根,最先沒有火柴可取的人為敗方,另一方為勝方。如果先取者有必勝策略則記為1,先取者沒有必勝策略記為0。當N 分別為100,200,300,400,500 時,先取者有無必勝策略的標記順序為___(回答應為一個由0和/或1組成的字符串)
歷年真題
1.完全二叉樹有2*N-1的結點,則它的葉子結點數目是( )。
A.N-1 B.2*N C.N D.2N-1 E.N/2
2.將數組{8,23,4,16,77,-5,53,100}中元素從大到小按順序排序,每次可以交換任意兩個元素,最少要交換( )次。
A.4 B.5 C.6 D.7 E.8
3.遞歸過程和函數調用時,處理參數和返回地址,通常使用一種稱為( )的數據結構。
A.隊列 B.多維數組 C.線性表 D.鏈表 E.棧
4.對有序數組{5,13,19,21,37,56,64,75,88,92,100}進行二分查找,等概率情況下,查找成功的平均查找長度(平均比較次數)是()。
A.35/11 B.34/11 C.33/11 D.32/11 E.34/10
5.設T是一棵有n個定點的樹,以下說法正確的是( )。
A.T是聯通的,無環的 B.T是聯通的,有n-1條邊
C.T是無環的,有n-1條邊 D.以上都不對
6. 對有序數組{5, 13, 19, 21, 37, 56, 64, 75, 88,92,100}進行二分查找,成功查找元素19的查找長度(比較次數)是( )。
A.1 B. 2 C. 3 D. 4
7. 在32*32點陣的“字庫”中,漢字“北”與“京”的字模占用字節數之和是( )。
A. 512 B. 256 C. 384 D. 128
8. 在關系數據庫中, 存放在數據庫中的數據的邏輯結構以( )為主
A. 二叉樹 B. 多叉樹 C. 哈希表 D.C+樹 E. 二維表
9. 歐拉圖G是指可以構成一個閉回路的圖,且圖G的每一條邊恰好在這個閉回路上出現一次(即一筆畫成)。在以下各個描述中,不一定是歐拉圖的是( )。
A. 圖G中沒有度為奇數的頂點
B. 包含歐拉環游的圖(歐拉環游是指通過圖中每邊恰好一次的閉路徑)
C. 包含歐拉閉跡的圖(歐拉跡是指通過圖中每邊恰好一次的路徑)
D. 存在一條回路,通過每個頂點恰好一次
E. 本身閉跡的圖
10.高度為n的均衡的二叉樹是指:如果去掉葉結點及相應的樹枝,它應該是高度為n-1的滿二叉樹。在這里,樹高等於葉結點的最大深度,根結點的深度為0,如果某個均衡的二叉樹共有2381個結點,則該樹的樹高為()。
A. 10 B. 11 C. 12 D. 13 E. 210 – 1
11.將5個數的序列排序,不論原先的順序如何,最少都可以通過()次比較,完成從小到大的排序。
A. 6 B. 7 C. 8 D. 9 E. 10
12. 在下列各種排序算法中,不是以“比較”作為主要操作的算法是()。
A. 選擇排序 B. 冒泡排序 C. 插入排序 D. 基數排序
13.高度為n的均衡的二叉樹是指:如果去掉葉結點及相應的樹枝,它應該是高度為n-1的滿二叉樹。在這里,樹高等於葉結點的最大深度,根結點的深度為0,如果某個均衡的二叉樹共有2381個結點,則該樹的樹高為()。
A. 10 B. 11 C. 12 D. 13
14.將5個數的序列排序,不論原先的順序如何,最少都可以通過()次比較,完成從小到大的排序。
A.6 B. 7 C. 8 D. 9
15. 字符串“ababacbab”和字符串“abcba”的最長公共子串是()。
A. abcba B. cba C. abc D. ab E. bcba
16. 完全二叉樹的結點個數為4 * N + 3,則它的葉結點個數為()。
A. 2 * N B. 2 * N - 1 C. 2 * N + 1 D. 2 * N - 2 E. 2 * N+ 2
17. 平面上有五個點A(5, 3), B(3, 5), C(2, 1),D(3, 3), E(5, 1)。以這五點作為完全圖G 的頂點,每兩點之間的直線距離是圖G 中對應邊的權值。圖G 的最小生成樹中的所有邊的權值綜合為()。
A. 8 B. 7+ 5 C. 9 D. 6+ 5 E. 4+2 2 + 5
18. 一位藝術史學家有20000 幅1024* 768 的真彩色(24位)圖像,如果將這些圖像以位圖形式保存在CD 光盤上(一張CD 光盤的容量按600M計算),大約需要()張CD光盤。
A. 1 B. 10 C.100 D. 1000 E. 10000
19. 完全二叉樹的結點個數為11,則它的葉結點個數為()。
A. 4 B.3 C.5 D. 2 E. 6
20. 平面上有五個點A(5, 3), B(3, 5), C(2, 1), D(3, 3), E(5, 1)。以這五點作為完全圖G 的頂點,每兩點之間的直線距離是圖G中對應邊的權值。以下哪條邊不是圖G 的最小生成樹中的邊()。
A. AD B. BD C. CD D. DE E. EA
21.某大學計算機專業的必修課及其先修課程如下表所示:
請你判斷下列課程安排方案哪個(些)是合理的( )。
A. C0, C1, C2, C3,C4, C5, C6, C7 B. C0, C1, C2, C3, C4,C6, C7, C5
C. C0, C1, C6, C7,C2, C3, C4, C5 D. C0, C1, C6, C7, C5,C2, C3, C4
E. C0, C1, C2, C3,C6, C7, C5, C4
22. 滿二叉樹的葉結點個數為N,則它的結點總數為( )。
A.N B. 2 * N C. 2 * N – 1 D. 2 * N + 1 E. 2N – 1
23. 在下圖中,從頂點( )出發存在一條路徑可以遍歷圖中的每條邊一次,而且僅遍歷一次。
A.A點 B. B點 C. C點 D. D點 E. E點