數據結構課后習題答案[1]_第1頁
數據結構課后習題答案[1]_第2頁
數據結構課后習題答案[1]_第3頁
數據結構課后習題答案[1]_第4頁
數據結構課后習題答案[1]_第5頁
已閱讀5頁,還剩66頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第 1 章 緒 論 1. 填空 在順序表中,等概率情況下,插入和刪除一個元素平均需移動( )個元素,具體移動元素的個數與( )和( )有關。【解答】表長的一半,表長,該元素在表中的位置 順序表中第一個元素的存儲地址是100,每個元素的長度為2,則第5個元素的存儲地址是( )。【解答】108【分析】第5個元素的存儲地址=第1個元素的存儲地址(51)2=108 設單鏈表中指針p 指向結點A,若要刪除A的后繼結點(假設A存在后繼結點),則需修改指針的操作為( )。【解答】p-next=(p-next)-next 單鏈表中設置頭結點的作用是( )。【解答】為了運算方便【分析】例如在插入和刪除操作時不必

2、對表頭的情況進行特殊處理。 非空的單循環鏈表由頭指針head指示,則其尾結點(由指針p所指)滿足( )。【解答】p-next=head【分析】如圖2-8所示。 在由尾指針rear指示的單循環鏈表中,在表尾插入一個結點s的操作序列是( );刪除開始結點的操作序列為( )。【解答】s-next =rear-next; rear-next =s; rear =s;(將S的指針域先弄成表尾指針域,而表尾指針域是代表下個結點的地址信息,所以要將指針域要用S替代,最后把表尾給S)q=rear-next-next; rear-next-next=q-next; delete q;【分析】操作示意圖如圖2-9

3、所示: 一個具有n個結點的單鏈表,在指針p所指結點后插入一個新結點的時間復雜度為( );在給定值為x的結點后插入一個新結點的時間復雜度為( )。【解答】(1),(n)【分析】在p所指結點后插入一個新結點只需修改指針,所以時間復雜度為(1)(是表示常數計算時間);而在給定值為x的結點后插入一個新結點需要先查找值為x的結點,所以時間復雜度為(n)。 可由一個尾指針唯一確定的鏈表有( )、( )、( )。【解答】循環鏈表,循環雙鏈表,雙鏈表2. 選擇題 線性表的順序存儲結構是一種( )的存儲結構,線性表的鏈接存儲結構是一種( )的存儲結構。 A 隨機存取 B 順序存取 C 索引存取 D 散列存取【解

4、答】A,B【分析】參見2.2.1。 線性表采用鏈接存儲時,其地址( )。A 必須是連續的 B 部分地址必須是連續的C 一定是不連續的 D 連續與否均可以【解答】D【分析】線性表的鏈接存儲是用一組任意的存儲單元存儲線性表的數據元素,這組存儲單元可以連續,也可以不連續,甚至可以零散分布在內存中任意位置。 單循環鏈表的主要優點是( )。A 不再需要頭指針了 B 從表中任一結點出發都能掃描到整個鏈表;C 已知某個結點的位置后,能夠容易找到它的直接前驅;D 在進行插入、刪除操作時,能更好地保證鏈表不斷開。【解答】B 鏈表不具有的特點是( )。A 可隨機訪問任一元素 B 插入、刪除不需要移動元素C 不必事

5、先估計存儲空間 D 所需空間與線性表長度成正比【解答】A 若某線性表中最常用的操作是取第i 個元素和找第i個元素的前驅,則采用( )存儲方法最節省時間。A 順序表 B 單鏈表 C 雙鏈表 D 單循環鏈表【解答】A【分析】線性表中最常用的操作是取第i 個元素,所以,應選擇隨機存取結構即順序表,同時在順序表中查找第i個元素的前驅也很方便。單鏈表和單循環鏈表既不能實現隨機存取,查找第i個元素的前驅也不方便,雙鏈表雖然能快速查找第i個元素的前驅,但不能實現隨機存取。 若鏈表中最常用的操作是在最后一個結點之后插入一個結點和刪除第一個結點,則采用( )存儲方法最節省時間。A 單鏈表 B 帶頭指針的單循環鏈

6、表 C 雙鏈表 D 帶尾指針的單循環鏈表【解答】D【分析】在鏈表中的最后一個結點之后插入一個結點需要知道終端結點的地址,所以,單鏈表、帶頭指針的單循環鏈表、雙鏈表都不合適,考慮在帶尾指針的單循環鏈表中刪除第一個結點,其時間性能是O(1),所以,答案是D 。 若鏈表中最常用的操作是在最后一個結點之后插入一個結點和刪除最后一個結點,則采用( )存儲方法最節省運算時間。A 單鏈表 B 循環雙鏈表 C單循環鏈表 D 帶尾指針的單循環鏈表【解答】B【分析】在鏈表中的最后一個結點之后插入一個結點需要知道終端結點的地址,所以,單鏈表、單循環鏈表都不合適,刪除最后一個結點需要知道終端結點的前驅結點的地址,所以

7、,帶尾指針的單循環鏈表不合適,而循環雙鏈表滿足條件。 在具有n個結點的有序單鏈表中插入一個新結點并仍然有序的時間復雜度是( )。A O(1) B O(n) C O(n2) D O(nlog2n)【解答】B【分析】首先應順序查找新結點在單鏈表中的位置。 對于n個元素組成的線性表,建立一個有序單鏈表的時間復雜度是( )。A O(1) B O(n) C O(n2) D O(nlog2n)【解答】C【分析】該算法需要將n個元素依次插入到有序單鏈表中,而插入每個元素需O(n)。 使用雙鏈表存儲線性表,其優點是可以( )。A 提高查找速度 B 更方便數據的插入和刪除C 節約存儲空間 D 很快回收存儲空間【

8、解答】B【分析】在鏈表中一般只能進行順序查找,所以,雙鏈表并不能提高查找速度,因為雙鏈表中有兩個指針域,顯然不能節約存儲空間,對于動態存儲分配,回收存儲空間的速度是一樣的。由于雙鏈表具有對稱性,所以,其插入和刪除操作更加方便。 在一個單鏈表中,已知q所指結點是p所指結點的直接前驅,若在q和p之間插入s所指結點,則執行( )操作。A s-next=p-next; p-next=s; B q-next=s; s-next=p; C p-next=s-next; s-next=p; D p-next=s; s-next=q;【解答】B【分析】注意此題是在q和p之間插入新結點,所以,不用考慮修改指針的

9、順序。 在循環雙鏈表的p所指結點后插入s所指結點的操作是( )。A p-next=s; s-prior=p; p-next-prior=s; s-next=p-next; B p-next=s; p-next-prior=s; s-prior=p; s-next=p-next;C s-prior=p; s-next=p-next; p-next=s; p-next-prior=s;D s-prior=p; s-next=p-next; p-next-prior=s; p-next=s【解答】D【分析】在鏈表中,對指針的修改必須保持線性表的邏輯關系,否則,將違背線性表的邏輯特征,圖2-10給出備

10、選答案C和D的圖解。3. 判斷題 線性表的邏輯順序和存儲順序總是一致的。【解答】錯。順序表的邏輯順序和存儲順序一致,鏈表的邏輯順序和存儲順序不一定一致。 線性表的順序存儲結構優于鏈接存儲結構。【解答】錯。兩種存儲結構各有優缺點。 設p,q是指針,若p=q,則*p=*q。【解答】錯。p=q只能表示p和q指向同一起始地址,而所指類型則不一定相同。 線性結構的基本特征是:每個元素有且僅有一個直接前驅和一個直接后繼。【解答】錯。每個元素最多只有一個直接前驅和一個直接后繼,第一個元素沒有前驅,最后一個元素沒有后繼。 在單鏈表中,要取得某個元素,只要知道該元素所在結點的地址即可,因此單鏈表是隨機存取結構。

11、【解答】錯。要找到該結點的地址,必須從頭指針開始查找,所以單鏈表是順序存取結構。4請說明順序表和單鏈表各有何優缺點,并分析下列情況下,采用何種存儲結構更好些。 若線性表的總長度基本穩定,且很少進行插入和刪除操作,但要求以最快的速度存取線性表中的元素。 如果n個線性表同時并存,并且在處理過程中各表的長度會動態發生變化。 描述一個城市的設計和規劃。【解答】順序表的優點: 無需為表示表中元素之間的邏輯關系而增加額外的存儲空間; 可以快速地存取表中任一位置的元素(即隨機存取)。順序表的缺點: 插入和刪除操作需移動大量元素; 表的容量難以確定; 造成存儲空間的“碎片”。單鏈表的優點: 不必事先知道線性表

12、的長度; 插入和刪除元素時只需修改指針,不用移動元素。單鏈表的缺點: 指針的結構性開銷; 存取表中任意元素不方便,只能進行順序存取。 應選用順序存儲結構。因為順序表是隨機存取結構,單鏈表是順序存取結構。本題很少進行插入和刪除操作,所以空間變化不大,且需要快速存取,所以應選用順序存儲結構。 應選用鏈接存儲結構。鏈表容易實現表容量的擴充,適合表的長度動態發生變化。 應選用鏈接存儲結構。因為一個城市的設計和規劃涉及活動很多,需要經常修改、擴充和刪除各種信息,才能適應不斷發展的需要。而順序表的插入、刪除的效率低,故不合適。5算法設計 設計一個時間復雜度為(n)的算法,實現將數組An中所有元素循環右移k

13、個位置。【解答】算法思想請參見主教材第一章思想火花。下面給出具體算法。分析算法,第一次調用Reverse函數的時間復雜度為O(k),第二次調用Reverse函數的時間復雜度為O(n-k),第三次調用Reverse函數的時間復雜度為O(n),所以,總的時間復雜度為O(n)。 已知數組An中的元素為整型,設計算法將其調整為左右兩部分,左邊所有元素為奇數,右邊所有元素為偶數,并要求算法的時間復雜度為(n)。【解答】從數組的兩端向中間比較,設置兩個變量i和j,初始時i=0,j=n-1,若Ai為偶數并且Aj為奇數,則將Ai與Aj交換。具體算法如下:分析算法,兩層循環將數組掃描一遍,所以,時間復雜度為(n

14、)。 試編寫在無頭結點的單鏈表上實現線性表的插入操作的算法,并和帶頭結點的單鏈表上的插入操作的實現進行比較。【解答】參見2.2.3。 試分別以順序表和單鏈表作存儲結構,各寫一實現線性表就地逆置的算法。【解答】順序表的逆置,即是將對稱元素交換,設順序表的長度為length,則將表中第i個元素與第length-i-1個元素相交換。具體算法如下:單鏈表的逆置請參見2.2.4算法2-4和算法2-6。 假設在長度大于1的循環鏈表中,即無頭結點也無頭指針,s為指向鏈表中某個結點的指針,試編寫算法刪除結點s的前驅結點。【解答】利用單循環鏈表的特點,通過指針s可找到其前驅結點r以及r的前驅結點p,然后將結點r

15、刪除,如圖2-11所示,具體算法如下: 已知一單鏈表中的數據元素含有三類字符:字母、數字和其他字符。試編寫算法,構造三個循環鏈表,使每個循環鏈表中只含同一類字符。【解答】在單鏈表A中依次取元素,若取出的元素是字母,把它插入到字母鏈表B 中,若取出的元素是數字,則把它插入到數字鏈表D中,直到鏈表的尾部,這樣表B,D,A中分別存放字母、數字和其他字符。具體算法如下: 設單鏈表以非遞減有序排列,設計算法實現在單鏈表中刪去值相同的多余結點。【解答】從頭到尾掃描單鏈表,若當前結點的元素值與后繼結點的元素值不相等,則指針后移;否則刪除該后繼結點。具體算法如下: 判斷帶頭結點的雙循環鏈表是否對稱。【解答】設

16、工作指針p和q分別指向循環雙鏈表的開始結點和終端結點,若結點p和結點q的數據域相等,則工作指針p后移,工作指針q前移,直到指針p和指針q指向同一結點(循環雙鏈表中結點個數為奇數),或結點q成為結點p的前驅(循環雙鏈表中結點個數為偶數)。如圖2-12所示。學習自測及答案 1. 已知一維數組A采用順序存儲結構,每個元素占用4個存儲單元,第9個元素的地址為144,則第一個元素的地址是( )。A 108 B 180 C 176 D 112【解答】D2在長度為n的線性表中查找值為x的數據元素的時間復雜度為: ( )。 A O(0) B O(1) C O(n) D O(n2)【解答】C3在一個長度為n的順

17、序表的第i(1in+1)個元素之前插入一個元素,需向后移動( )個元素,刪除第i(1in)個元素時,需向前移動( )個元素。【解答】n-i+1,n-i 4在單鏈表中,除了頭結點以外,任一結點的存儲位置由( )指示。【解答】其前驅結點的指針域 5當線性表采用順序存儲結構時,其主要特點是( )。【解答】邏輯結構中相鄰的結點在存儲結構中仍相鄰6在雙鏈表中,每個結點設置了兩個指針域,其中一個指向( )結點,另一個指向( )結點。【解答】前驅,后繼7設A是一個線性表(a1, a2, , an),采用順序存儲結構,則在等概率的前提下,平均每插入一個元素需要移動的元素個數為多少?若元素插在ai與ai+1之間

18、(1in)的概率為 ,則平均每插入一個元素所要移動的元素個數又是多少?【解答】 ,。8線性表存放在整型數組Aarrsize的前elenum 個單元中,且遞增有序。編寫算法,將元素x插入到線性表的適當位置上,以保持線性表的有序性,并且分析算法的時間復雜度。【解答】本題是在一個遞增有序表中插入元素x,基本思路是從有序表的尾部開始依次取元素與x比較,若大于x,此元素后移一位,再取它前面一個元素重復上述步驟;否則,找到插入位置,將x插入。具體算法如下:9. 已知單鏈表中各結點的元素值為整型且遞增有序,設計算法刪除鏈表中所有大于mink且小于maxk的所有元素,并釋放被刪結點的存儲空間。【解答】因為是在

19、有序單鏈表上的操作,所以,要充分利用其有序性。在單鏈表中查找第一個大于mink的結點和第一個小于maxk的結點,再將二者間的所有結點刪除。10設單循環鏈表L1,對其遍歷的結果是:x1, x2, x3, xn-1, xn。請將該循環鏈表拆成兩個單循環鏈表L1和L2,使得L1中含有原L1表中序號為奇數的結點且遍歷結果為:x1, x3, ;L2中含有原L1表中序號為偶數的結點且遍歷結果為: , x4, x2。【解答】算法如下:第 3 章 特殊線性表棧、隊列和串 課后習題講解 1. 填空 設有一個空棧,棧頂指針為1000H,現有輸入序列為1、2、3、4、5, 經過push,push,pop,push,

20、pop,push,push后,輸出序列是( ),棧頂指針為( )。【解答】23,1003H 棧通常采用的兩種存儲結構是( );其判定棧空的條件分別是( ),判定棧滿的條件分別是( )。【解答】順序存儲結構和鏈接存儲結構(或順序棧和鏈棧),棧頂指針top= -1和top=NULL,棧頂指針top等于數組的長度和內存無可用空間( )可作為實現遞歸函數調用的一種數據結構。【解答】棧【分析】遞歸函數的調用和返回正好符合后進先出性。 表達式a*(b+c)-d的后綴表達式是( )。【解答】abc+*d-【分析】將中綴表達式變為后綴表達式有一個技巧:將操作數依次寫下來,再將算符插在它的兩個操作數的后面。 棧

21、和隊列是兩種特殊的線性表,棧的操作特性是( ),隊列的操作特性是( ),棧和隊列的主要區別在于( )。【解答】后進先出,先進先出,對插入和刪除操作限定的位置不同 循環隊列的引入是為了克服( )。【解答】假溢出 數組Qn用來表示一個循環隊列,front為隊頭元素的前一個位置,rear為隊尾元素的位置,計算隊列中元素個數的公式為( )。【解答】(rear-front+n)% n【分析】也可以是(rear-front)% n,但rear-front的結果可能是負整數,而對一個負整數求模,其結果在不同的編譯器環境下可能會有所不同。 用循環鏈表表示的隊列長度為n,若只設頭指針,則出隊和入隊的時間復雜度分

22、別是( )和( )。【解答】(1),(n)【分析】在帶頭指針的循環鏈表中,出隊即是刪除開始結點,這只需修改相應指針;入隊即是在終端結點的后面插入一個結點,這需要從頭指針開始查找終端結點的地址。 串是一種特殊的線性表,其特殊性體現在( )。【解答】數據元素的類型是一個字符 兩個串相等的充分必要條件是( )。【解答】長度相同且對應位置的字符相等【分析】例如abcabc ,abcbca。2. 選擇題 若一個棧的輸入序列是1,2,3,n,輸出序列的第一個元素是n,則第i個輸出元素是( )。A 不確定 B n-i C n-i-1 D n-i+1【解答】D【分析】此時,輸出序列一定是輸入序列的逆序。 設棧

23、S和隊列Q的初始狀態為空,元素e1、e2、e3、e4、e5、e6依次通過棧S,一個元素出棧后即進入隊列Q,若6個元素出隊的順序是e2、e4、e3、e6、e5、e1,則棧S的容量至少應該是( )。A 6 B 4 C 3 D 2【解答】C【分析】由于隊列具有先進先出性,所以,此題中隊列形同虛設,即出棧的順序也是e2、e4、e3、e6、e5、e1。 一個棧的入棧序列是1,2,3,4,5,則棧的不可能的輸出序列是( )。A 54321 B 45321 C 43512 D 12345 【解答】C【分析】此題有一個技巧:在輸出序列中任意元素后面不能出現比該元素小并且是升序(指的是元素的序號)的兩個元素。

24、設計一個判別表達式中左右括號是否配對的算法,采用( )數據結構最佳A 順序表 B 棧 C 隊列 D 鏈表【解答】B【分析】每個右括號與它前面的最后一個沒有匹配的左括號配對,因此具有后進先出性。 在解決計算機主機與打印機之間速度不匹配問題時通常設置一個打印緩沖區,該緩沖區應該是一個( )結構。A 棧 B隊列 C 數組 D線性表【解答】B【分析】先進入打印緩沖區的文件先被打印,因此具有先進先出性。 一個隊列的入隊順序是1,2,3,4,則隊列的輸出順序是( )。A 4321 B 1234 C 1432 D 3241【解答】B【分析】隊列的入隊順序和出隊順序總是一致的。 棧和隊列的主要區別在于( )。

25、A 它們的邏輯結構不一樣 B 它們的存儲結構不一樣C 所包含的運算不一樣 D 插入、刪除運算的限定不一樣【解答】D【分析】棧和隊列的邏輯結構都是線性的,都有順序存儲和鏈接存儲,有可能包含的運算不一樣,但不是主要區別,任何數據結構在針對具體問題時包含的運算都可能不同。 設數組Sn作為兩個棧S1和S2的存儲空間,對任何一個棧只有當Sn全滿時才不能進行進棧操作。為這兩個棧分配空間的最佳方案是( )。A S1的棧底位置為0,S2的棧底位置為n-1B S1的棧底位置為0,S2的棧底位置為n/2C S1的棧底位置為0,S2的棧底位置為nD S1的棧底位置為0,S2的棧底位置為1【解答】A【分析】兩棧共享空

26、間首先兩個棧是相向增長的,棧底應該分別指向兩個棧中的第一個元素的位置,并注意C+中的數組下標是從0開始的。 設有兩個串p和q,求q在p中首次出現的位置的運算稱作( )。A 連接 B 模式匹配 C 求子串 D 求串長【解答】B3. 判斷題 有n個元素依次進棧,則出棧序列有(n-1)/2種。【解答】錯。應該有 種。 棧可以作為實現過程調用的一種數據結構。【解答】對。只要操作滿足后進先出性,都可以采用棧作為輔助數據結構。 在棧滿的情況下不能做進棧操作,否則將產生“上溢”。【解答】對。 在循環隊列中,front指向隊頭元素的前一個位置,rear指向隊尾元素的位置,則隊滿的條件是front=rear。【

27、解答】錯。這是隊空的判定條件,在循環隊列中要將隊空和隊滿的判定條件區別開。 空串與空格串是相同的。【解答】錯。空串的長度為零,而空格串的長度不為0,其長度是串中空格的個數。4. 設有一個棧,元素進棧的次序為A,B,C,D,E,能否得到如下出棧序列,若能,請寫出操作序列,若不能,請說明原因。 C,E,A,B,D C,B,A,D,E【解答】不能,因為在C、E出棧的情況下,A一定在棧中,而且在B的下面,不可能先于B出棧。可以,設為進棧操作,為入棧操作,則其操作序列為IIIOOOIOIO。5. 舉例說明順序隊列的“假溢出”現象。【解答】假設有一個順序隊列,如圖3-6所示,隊尾指針rear=4,隊頭指針

28、front=1,如果再有元素入隊,就會產生“上溢”,此時的“上溢”又稱為“假溢出”,因為隊列并不是真的溢出了,存儲隊列的數組中還有2個存儲單元空閑,其下標分別為0和1。6. 在操作序列push(1)、push(2)、pop、push(5)、push(7)、pop、push(6)之后,棧頂元素和棧底元素分別是什么?(push(k)表示整數k入棧,pop表示棧頂元素出棧。)【解答】棧頂元素為6,棧底元素為1。其執行過程如圖3-7所示。7 在操作序列EnQueue(1)、 EnQueue(3)、 DeQueue、EnQueue(5)、EnQueue(7)、DeQueue、EnQueue(9)之后,隊

29、頭元素和隊尾元素分別是什么?(EnQueue(k)表示整數k入隊,DeQueue表示隊頭元素出隊)。【解答】隊頭元素為5,隊尾元素為9。其執行過程如圖3-8所示。8空串和空格串有何區別?串中的空格符有何意義?空串在串處理中有何作用?【解答】不含任何字符的串稱為空串,其長度為零。僅含空格的串稱為空格串,它的長度為串中空格符的個數。串中的空格符可用來分隔一般的字符,便于人們識別和閱讀,但計算串長時應包括這些空格符。空串在串處理中可作為任意串的子串。9. 算法設計 假設以不帶頭結點的循環鏈表表示隊列,并且只設一個指針指向隊尾結點,但不設頭指針。試設計相應的入隊和出隊的算法。【解答】出隊操作是在循環鏈

30、表的頭部進行,相當于刪除開始結點,而入隊操作是在循環鏈表的尾部進行,相當于在終端結點之后插入一個結點。由于循環鏈表不帶頭結點,需要處理空表的特殊情況。入隊算法如下:出隊算法如下: 設順序棧S中有2n個元素,從棧頂到棧底的元素依次為a2n,a2n-1,a1,要求通過一個循環隊列重新排列棧中元素,使得從棧頂到棧底的元素依次為a2n,a2n-2,a2,a2n-1,a2n-3,a1,請設計算法實現該操作,要求空間復雜度和時間復雜度均為O(n)。【解答】操作步驟為: 將所有元素出棧并入隊; 依次將隊列元素出隊,如果是偶數結點,則再入隊,如果是奇數結點,則入棧; 將奇數結點出棧并入隊; 將偶數結點出隊并入

31、棧; 將所有元素出棧并入隊; 將所有元素出隊并入棧即為所求。 用順序存儲結構存儲串S,編寫算法刪除S中第 i個字符開始的連續j個字符。【解答】先判斷串S中要刪除的內容是否存在,若存在,則將第i+j-1之后的字符前移j個位置。算法如下: 對于采用順序存儲結構的串S,編寫一個函數刪除其值等于ch的所有字符。【解答】從后向前刪除值為ch的所有元素,這樣所有移動的元素中沒有值為ch的元素,能減少移動元素的次數,提高算法的效率。算法如下: 對串的模式匹配KMP算法設計求模式滑動位置的next函數。【解答】參見3.2.5學習自測及答案 1在一個具有n個單元的順序棧中,假定以地址低端(即下標為0的單元)作為

32、棧底,以top作為棧頂指針,當出棧時,top的變化為( )。A 不變 B top=0; C top=top-1; D top=top+1;【解答】C2一個棧的入棧序列是a, b, c, d, e,則棧的不可能的出棧序列是( )。A edcba B cdeba C debca D abcde 【解答】C3從棧頂指針為top的鏈棧中刪除一個結點,用x保存被刪除結點的值,則執行( )。A x=top; top=top-next; B x=top-data;C top=top-next; x=top-data; D x=top-data; top=top-next;【解答】D4設元素1, 2, 3,

33、P, A依次經過一個棧,進棧次序為123PA,在棧的輸出序列中,有哪些序列可作為C+程序設計語言的變量名。【解答】PA321, P3A21, P32A1, P321A, AP3215.設S=I_ am_ a_ teacther,其長度為( )。【解答】15第 4 章 廣義線性表多維數組和廣義表 課后習題講解 1. 填空 數組通常只有兩種運算:( )和( ),這決定了數組通常采用( )結構來實現存儲。【解答】存取,修改,順序存儲【分析】數組是一個具有固定格式和數量的數據集合,在數組上一般不能做插入、刪除元素的操作。除了初始化和銷毀之外,在數組中通常只有存取和修改兩種操作。 二維數組A中行下標從1

34、0到20,列下標從5到10,按行優先存儲,每個元素占4個存儲單元,A105的存儲地址是1000,則元素A1510的存儲地址是( )。【解答】1140【分析】數組A中每行共有6個元素,元素A1510的前面共存儲了(15-10)6+5個元素,每個元素占4個存儲單元,所以,其存儲地址是1000+140=1140。 設有一個10階的對稱矩陣A采用壓縮存儲,A00為第一個元素,其存儲地址為d,每個元素占1個存儲單元,則元素A85的存儲地址為( )。【解答】d+41【分析】元素A85的前面共存儲了(1+2+8)+5=41個元素。 稀疏矩陣一般壓縮存儲方法有兩種,分別是( )和( )。【解答】三元組順序表,

35、十字鏈表 廣義表(a), (b),c),(d)的長度是(),深度是(),表頭是(),表尾是()。【解答】3,4,(a),(b),c),(d) 已知廣義表LS=(a,(b,c,d),e),用Head和Tail函數取出LS中原子b的運算是( )。【解答】Head(Head(Tail(LS)2. 選擇題 二維數組A的每個元素是由6個字符組成的串,行下標的范圍從08,列下標的范圍是從09,則存放A至少需要()個字節,A的第8列和第5行共占()個字節,若A按行優先方式存儲,元素A85的起始地址與當A按列優先方式存儲時的( )元素的起始地址一致。A 90 B 180 C 240 D 540 E 108 F

36、 114 G 54 H A85 I A310 J A58 K A49【解答】D,E,K【分析】數組A為9行10列,共有90個元素,所以,存放A至少需要906=540個存儲單元,第8列和第5行共有18個元素(注意行列有一個交叉元素),所以,共占108個字節,元素A85按行優先存儲的起始地址為d+810+5=d+85,設元素Aij按列優先存儲的起始地址與之相同,則d+j9+i=d+85,解此方程,得i=4,j=9。 將數組稱為隨機存取結構是因為()A 數組元素是隨機的 B 對數組任一元素的存取時間是相等的C 隨時可以對數組進行訪問 D 數組的存儲結構是不定【解答】B 下面的說法中,不正確的是()A

37、 數組是一種線性結構 B 數組是一種定長的線性結構 C 除了插入與刪除操作外,數組的基本操作還有存取、修改、檢索和排序等D 數組的基本操作有存取、修改、檢索和排序等,沒有插入與刪除操【解答】C【分析】數組屬于廣義線性表,數組被創建以后,其維數和每維中的元素個數是確定的,所以,數組通常沒有插入和刪除操作。 對特殊矩陣采用壓縮存儲的目的主要是為了()A 表達變得簡單 B 對矩陣元素的存取變得簡單C 去掉矩陣中的多余元素 D 減少不必要的存儲空間【解答】D【分析】在特殊矩陣中,有很多值相同的元素并且他們的分布有規律,沒有必要為值相同的元素重復存儲。 下面()不屬于特殊矩陣。A 對角矩陣 B 三角矩陣

38、 C 稀疏矩陣 D 對稱矩陣 【解答】C 若廣義表A滿足Head(A)=Tail(A),則A為( )A ( ) B ( ) C ( ),( ) D( ),( ),( )【解答】B 下面的說法中,不正確的是()A 廣義表是一種多層次的結構 B 廣義表是一種非線性結構C 廣義表是一種共享結構 D 廣義表是一種遞歸【解答】B【分析】從各層元素各自具有的線性關系講,廣義表屬于線性結構。 下面的說法中,不正確的是()A 對稱矩陣只須存放包括主對角線元素在內的下(或上)三角的元素即可。B 對角矩陣只須存放非零元素即可。C 稀疏矩陣中值為零的元素較多,因此可以采用三元組表方法存儲。D 稀疏矩陣中大量值為零的

39、元素分布有規律,因此可以采用三元組表方法存儲【解答】D【分析】稀疏矩陣中大量值為零的元素分布沒有規律,因此采用三元組表存儲。如果零元素的分布有規律,就沒有必要存儲非零元素的行號和列號,而需要按其壓縮規律找出相應的映象函數。3. 判斷題 數組是一種復雜的數據結構,數組元素之間的關系既不是線性的,也不是樹形的。【解答】錯。例如二維數組可以看成是數據元素為線性表的線性表。 使用三元組表存儲稀疏矩陣的元素,有時并不能節省存儲空間。【解答】對。因為三元組表除了存儲非零元素值外,還需要存儲其行號和列號。 稀疏矩陣壓縮存儲后,必會失去隨機存取功能。【解答】對。因為壓縮存儲后,非零元素的存儲位置和行號、列號之

40、間失去了確定的關系。 線性表可以看成是廣義表的特例,如果廣義表中的每個元素都是單元素,則廣義表便成為線性表。【解答】對。 若一個廣義表的表頭為空表,則此廣義表亦為空表。【解答】錯。如廣義表L=( ),(a,b)的表頭為空表,但L不是空表。4一個稀疏矩陣如圖4-4所示,寫出對應的三元組順序表和十字鏈表存儲表示。【解答】對應的三元組順序表如圖4-5所示,十字鏈表如圖4-6所示。5已知A為稀疏矩陣,試從空間和時間角度比較采用二維數組和三元組順序表兩種不同的存儲結構完成求 運算的優缺點。【解答】設稀疏矩陣為m行n列,如果采用二維數組存儲,其空間復雜度為(mn);因為要將所有的矩陣元素累加起來,所以,需

41、要用一個兩層的嵌套循環,其時間復雜度亦為(mn)。如果采用三元組順序表進行壓縮存儲,假設矩陣中有t個非零元素,其空間復雜度為(t),將所有的矩陣元素累加起來只需將三元組順序表掃描一遍,其時間復雜度亦為(t)。當t 0)個結點的滿二叉樹共有( )個葉子結點和( )個非終端結點。【解答】2i-1,(n+1)/2,(n-1)/2【分析】設滿二叉樹中葉子結點的個數為n0,度為2的結點個數為n2,由于滿二叉樹中不存在度為1的結點,所以n=n0+n2;由二叉樹的性質n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。 設高度為h的二叉樹上只有度為0和度為2的結點,該二叉樹的結點數可能達到的最大值

42、是( ),最小值是( )。【解答】2h -1,2h-1【分析】最小結點個數的情況是第1層有1個結點,其他層上都只有2個結點。 深度為k的二叉樹中,所含葉子的個數最多為( )。【解答】2k-1【分析】在滿二叉樹中葉子結點的個數達到最多。 具有100個結點的完全二叉樹的葉子結點數為( )。【解答】50【分析】100個結點的完全二叉樹中最后一個結點的編號為100,其雙親即最后一個分支結點的編號為50,也就是說,從編號51開始均為葉子。 已知一棵度為3的樹有2個度為1的結點,3個度為2的結點,4個度為3的結點。則該樹中有( )個葉子結點。【解答】12【分析】根據二叉樹性質3的證明過程,有n0=n2+2

43、n3+1(n0、n2、n3分別為葉子結點、度為2的結點和度為3的結點的個數)。 某二叉樹的前序遍歷序列是ABCDEFG,中序遍歷序列是CBDAFGE,則其后序遍歷序列是( )。【解答】CDBGFEA【分析】根據前序遍歷序列和后序遍歷序列將該二叉樹構造出來。 在具有n個結點的二叉鏈表中,共有( )個指針域,其中( )個指針域用于指向其左右孩子,剩下的( )個指針域則是空的。【解答】2n,n-1,n+1 在有n個葉子的哈夫曼樹中,葉子結點總數為( ),分支結點總數為( )。【解答】n,n-1【分析】n-1個分支結點是經過n-1次合并后得到的。2. 選擇題 如果結點A有3個兄弟,B是A的雙親,則結點

44、B的度是()。A 1 B 2 C 3 D 4【解答】D 設二叉樹有n個結點,則其深度為( )。A n-1 B n C +1 D 不能確定【解答】D【分析】此題并沒有指明是完全二叉樹,則其深度最多是n,最少是 +1。 二叉樹的前序序列和后序序列正好相反,則該二叉樹一定是( )的二叉樹。A 空或只有一個結點 B 高度等于其結點數C 任一結點無左孩子 D 任一結點無右孩子【解答】B【分析】此題注意是序列正好相反,則左斜樹和右斜樹均滿足條件。 線索二叉樹中某結點R沒有左孩子的充要條件是( )。A R.lchild=NULL B R.ltag=0 C R.ltag=1 D R.rchild=NULL【解

45、答】C【分析】線索二叉樹中某結點是否有左孩子,不能通過左指針域是否為空來判斷,而要判斷左標志是否為1。 深度為k的完全二叉樹至少有( )個結點,至多有( )個結點,具有n個結點的完全二叉樹按層序從1開始編號,則編號最小的葉子的序號是( )。A 2k-2+1 B 2k-1 C 2k -1 D 2k1 -1 E 2k+1 F 2k+1 -1 G 2k -1+1 H 2k【解答】B,C,A【分析】深度為k的完全二叉樹最少結點數的情況應是第k層上只有1個結點,最多的情況是滿二叉樹,編號最小的葉子應該是在結點數最少的情況下,葉子結點的編號。 一個高度為h的滿二叉樹共有n個結點,其中有m個葉子結點,則有(

46、 )成立。A n=h+m B h+m=2n C m=h-1 D n=2m-1【解答】D【分析】滿二叉樹中沒有度為1的結點,所以有m個葉子結點,則度為2的結點個數為m-1。 任何一棵二叉樹的葉子結點在前序、中序、后序遍歷序列中的相對次序( )。A 肯定不發生改變 B 肯定發生改變 C 不能確定 D 有時發生變化【解答】A【分析】三種遍歷次序均是先左子樹后右子樹。 如果T 是由有序樹T轉換而來的二叉樹,那么T中結點的前序序列就是T 中結點的( )序列,T中結點的后序序列就是 T 中結點的()序列。A 前序 B 中序 C 后序 D 層序【解答】A,B 設森林中有4棵樹,樹中結點的個數依次為n1、n2

47、、n3、n4,則把森林轉換成二叉樹后,其根結點的右子樹上有( )個結點,根結點的左子樹上有( )個結點。A n1-1 B n1 C n1+n2+n3 D n2+n3+n4【解答】D,A【分析】由森林轉換的二叉樹中,根結點即為第一棵樹的根結點,根結點的左子樹是由第一棵樹中除了根結點以外其余結點組成的,根結點的右子樹是由森林中除第一棵樹外其他樹轉換來的。 討論樹、森林和二叉樹的關系,目的是為了( )。A 借助二叉樹上的運算方法去實現對樹的一些運算B 將樹、森林按二叉樹的存儲方式進行存儲并利用二叉樹的算法解決樹的有關問題C 將樹、森林轉換成二叉樹D 體現一種技巧,沒有什么實際意義【解答】B3. 判斷

48、題 在線索二叉樹中,任一結點均有指向其前驅和后繼的線索。【解答】錯。某結點是否有前驅或后繼的線索,取決于該結點的標志域是否為1。 在二叉樹的前序遍歷序列中,任意一個結點均處在其子女的前面。【解答】對。由前序遍歷的操作定義可知。 二叉樹是度為2的樹。【解答】錯。二叉樹和樹是兩種不同的樹結構,例如,左斜樹是一棵二叉樹,但它的度為1。 由樹轉換成二叉樹,其根結點的右子樹總是空的。【解答】對。因為根結點無兄弟結點。 用一維數組存儲二叉樹時,總是以前序遍歷存儲結點。【解答】錯。二叉樹的順序存儲結構是按層序存儲的,一般適合存儲完全二叉樹。4證明:對任一滿二叉樹,其分枝數B2(n0-1) 。(其中,n0為終

49、端結點數)【解答】因為在滿二叉樹中沒有度為1的結點,所以有:n=n0+n2 設B為樹中分枝數,則n=B+1所以B=n0 +n2-1再由二叉樹性質:n0=n2+1代入上式有:B=n0+n0-1-1=2(n0-1)5證明:已知一棵二叉樹的前序序列和中序序列,則可唯一確定該二叉樹。【解答】證明采用歸納法。設二叉樹的前序遍歷序列為a1a2a3 an,中序遍歷序列為b1b2b3 bn。當n=1時,前序遍歷序列為a1,中序遍歷序列為b1,二叉樹只有一個根結點,所以,a1= b1,可以唯一確定該二叉樹;假設當n=k時,前序遍歷序列a1a2a3 ak和中序遍歷序列b1b2b3 bk可唯一確定該二叉樹,下面證明

50、當n=k+1時,前序遍歷序列a1a2a3 akak+1和中序遍歷序列b1b2b3 bk bk+1可唯一確定一棵二叉樹。在前序遍歷序列中第一個訪問的一定是根結點,即二叉樹的根結點是a1,在中序遍歷序列中查找值為a1的結點,假設為bi,則a1=bi且b1b2 bi-1是對根結點a1的左子樹進行中序遍歷的結果,前序遍歷序列a2a3 ai是對根結點a1的左子樹進行前序遍歷的結果,由歸納假設,前序遍歷序列a2a3 ai和中序遍歷序列b1b2 bi-1唯一確定了根結點的左子樹,同樣可證前序遍歷序列ai+1ai+2 ak+1和中序遍歷序列bi+1bi+2 bk+1唯一確定了根結點的右子樹。6已知一棵度為m的樹中有:n1個度為1的結點,n2個度為2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論