




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1.6習(xí)題
一、名詞解釋
1.數(shù)據(jù)結(jié)構(gòu):相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。
結(jié)構(gòu),就是數(shù)據(jù)之間的關(guān)系,即數(shù)據(jù)與數(shù)據(jù)之間的排列方式。
2.數(shù)據(jù)元素:是有一定意義數(shù)據(jù)的基本單位,可由若干個(gè)數(shù)據(jù)項(xiàng)組成,在計(jì)算機(jī)中通
常作為整體處理,也可稱為結(jié)點(diǎn)、記錄。
如:在人類社會(huì)中,一個(gè)“人”是一個(gè)數(shù)據(jù)元素,是有一定意義的作為整體處理的基本
單位,在社會(huì)關(guān)系里,一般都是拿某個(gè)人說事兒,不會(huì)拿某個(gè)人的胳膊或腿兒說事兒;
但在醫(yī)學(xué)結(jié)構(gòu)上,人又由若干部分組成,比如四肢、心、肝、脾、肺、腎等。
3.數(shù)據(jù)項(xiàng):是具有獨(dú)立含義的最小標(biāo)識(shí)單位。如一個(gè)“人”有眼睛、耳朵、手等數(shù)據(jù)
項(xiàng),也可有姓名、年齡、性別等這些數(shù)據(jù)項(xiàng)。一個(gè)記錄可稱為一個(gè)數(shù)據(jù)元素,而這個(gè)元素中
的某一字段就是一個(gè)數(shù)據(jù)項(xiàng)。
4.邏輯結(jié)構(gòu)有時(shí)也稱數(shù)據(jù)結(jié)構(gòu),它是數(shù)據(jù)元素之間關(guān)系的描述,可以看作是從具體問
題抽象出來的數(shù)學(xué)模型,與數(shù)據(jù)的存儲(chǔ)無關(guān),是獨(dú)立于計(jì)算機(jī)的。
5.物理結(jié)構(gòu)是數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示和實(shí)現(xiàn),也稱存儲(chǔ)結(jié)構(gòu)。
6.時(shí)間復(fù)雜度:當(dāng)問題規(guī)模很大時(shí),程序執(zhí)行時(shí)間隨問題規(guī)模增長程度的一個(gè)度
量。
7.空間復(fù)雜度:是指程序運(yùn)行從開始到結(jié)束所需的存儲(chǔ)量。
二、判斷題
(1)數(shù)據(jù)元素是最小的項(xiàng)。(X)
(2)算法就是程序。(X)
(算法是解決問題的有限指令序列,它可以用某個(gè)具體的程序來表示,也可以用自然
語言、流程圖、偽代碼表示。
即可以用程序來表達(dá)算法,但算法不見得就是程序。
目前,用來表達(dá)算法用得最多的是偽代碼,因?yàn)閭未a比具體的程序要求寬松、易理
解,同時(shí)又比自然語言更容易轉(zhuǎn)換成可實(shí)現(xiàn)的程序。)
(3)數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)對(duì)象與對(duì)象中數(shù)據(jù)元素之間關(guān)系的集合。(V)
(4)從邏輯關(guān)系上講,數(shù)據(jù)結(jié)構(gòu)主要分為兩大類:線性結(jié)構(gòu)和非線性結(jié)構(gòu)。(J)
(5)數(shù)據(jù)的邏輯結(jié)構(gòu)與數(shù)據(jù)元素本身的內(nèi)容和形式無關(guān)。(。)
三、填空題
(1)算法的一個(gè)特性是確定性,即針對(duì)一組確定的輸入,算法應(yīng)始終得出一組確定的
結(jié)果。
(2)算法的一個(gè)特性是有窮性,即算法必須執(zhí)行有限步就結(jié)束。
(3)數(shù)據(jù)是信息的載體,它能夠被計(jì)算機(jī)程序識(shí)別、存儲(chǔ)和加工處理。
(4)此題不嚴(yán)謹(jǐn)。
數(shù)據(jù)結(jié)構(gòu)是帶結(jié)構(gòu)的數(shù)據(jù)元素的集合,因此,可以說數(shù)據(jù)結(jié)構(gòu)由“數(shù)據(jù)”和“結(jié)
構(gòu)”兩個(gè)元素組成;
另外,一般討論一個(gè)具體的數(shù)據(jù)結(jié)構(gòu)時(shí),我們會(huì)討論它的邏輯數(shù)據(jù)、物理結(jié)構(gòu)和
數(shù)據(jù)的運(yùn)算三個(gè)方面。
(就像“土豆炒牛肉”由土豆和牛肉兩樣主菜組成,當(dāng)我們討論這個(gè)菜品時(shí),會(huì)討論它
的色、香、味三個(gè)方面。)
(5)數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)包括線性結(jié)構(gòu)和非線性結(jié)構(gòu)結(jié)構(gòu)兩大類。
四、簡答題
1.數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)元素之間的邏輯關(guān)系可以由四種基本數(shù)據(jù)關(guān)系組成,簡述它們的名
稱與含義。
答:
(1)集合結(jié)構(gòu):在集合結(jié)構(gòu)中,數(shù)據(jù)元素間的關(guān)系是“屬于同一個(gè)集合”。集合是元素
關(guān)系極為松散的一種結(jié)構(gòu)。
(2)線性結(jié)構(gòu):該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著“一對(duì)一”的關(guān)系。
(3)樹型結(jié)構(gòu):該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著“一對(duì)多”的關(guān)系。
(4)圖形結(jié)構(gòu):該結(jié)構(gòu)的數(shù)據(jù)元素之間存在著“多對(duì)多”的關(guān)系。
2.簡述算法的特性。
答:
(1)有窮性。一個(gè)算法必須在有窮步之后結(jié)束,即必須在人類現(xiàn)有的壽命長度下、有
現(xiàn)實(shí)意義的有限時(shí)間內(nèi)完成。如你編寫算法,計(jì)算機(jī)需要30年的時(shí)間才能結(jié)束,算法的意
義就不大。
(2)確定性。算法的每一步必須有確切的定義,無二義性。相同的輸入僅有唯一的輸
出結(jié)果。(比如:"小明對(duì)小強(qiáng)說他的爸爸去出差了”就是一個(gè)歧義句。)
(3)可行性。算法中的每一步都可實(shí)現(xiàn),即每一步都在當(dāng)前環(huán)境條件下可以通過有限
次運(yùn)算實(shí)現(xiàn)。
(4)輸入。一個(gè)算法具有零個(gè)或多個(gè)輸入,可以沒有輸入。
(5)輸出。一個(gè)算法具有一個(gè)或多個(gè)輸出,至少有一個(gè)輸出。(沒有輸出對(duì)我們?nèi)祟?/p>
就沒有反饋,那么這個(gè)算法就沒有意義。)
3.設(shè)計(jì)一個(gè)好的算法通常要考慮哪些要求?
要設(shè)計(jì)一個(gè)好的算法通常要考慮以下的要求。
(1)正確性。算法的執(zhí)行結(jié)果應(yīng)當(dāng)滿足預(yù)先規(guī)定的功能和性能要求。
“正確性”的含義是所設(shè)計(jì)的程序沒有語法錯(cuò)誤,對(duì)于刁難性的數(shù)據(jù)也能夠得到滿足
要求的輸出結(jié)果。
(2)可讀性。一個(gè)算法應(yīng)當(dāng)思路清晰、層次分明、簡單明了、易讀易懂。
一個(gè)好的算法首先應(yīng)該是便于交流,其次才是機(jī)器可執(zhí)行,可讀性好的算法有助于編
程人員對(duì)算法的理解,而難懂的算法對(duì)于隱藏的錯(cuò)誤不易調(diào)試和修改。
(3)健壯性(魯棒性)。當(dāng)輸入不合法數(shù)據(jù)時(shí),應(yīng)能作適當(dāng)處理,不至引起嚴(yán)重后
果,陷入死機(jī)。
(4)高效率和低存儲(chǔ)量。有效使用存儲(chǔ)空間和有較高的時(shí)間效率。
4.常用算法大致可以分為幾大類?
答:常用的算法大致可以被分為蠻力算法、分治算法、減治算法、變治算法以及動(dòng)態(tài)規(guī)
劃算法等幾大類。
五、觀察下列算法回答以下問題。
(1)每一個(gè)算法的意圖是什么?
(2)每一個(gè)算法的關(guān)鍵步驟是什么?
(3)每一個(gè)算法的關(guān)鍵步驟執(zhí)行了多少步?
(4)算法的時(shí)間復(fù)雜度是什么?
①for(i=0;i<n;i++)
for(j=0;j<n;j++)
a++;
答:
算法意圖:變量a自增n?次;
算法的關(guān)鍵步驟:a++;
關(guān)鍵步驟執(zhí)行次數(shù):胡次;
算法的時(shí)間復(fù)雜度:T(n)=0(n2)
②for(i=0;i<n;i++)
for(j=i;j<i;j++)
x++;
答:
算法意圖:什么也不做;
算法的關(guān)鍵步驟:X++;
關(guān)鍵步驟執(zhí)行次數(shù):0次;
算法的時(shí)間復(fù)雜度:T(n)=0(1)
分析:
雖然看起來是雙層循環(huán),但第二次循環(huán)for(j=i;j〈i;j++)的循環(huán)體因?yàn)椴粷M足j〈i
的條件而不執(zhí)行;所以事實(shí)上第一層循環(huán)的任何一次執(zhí)行,都是什么也不做。
無論問題規(guī)模n為多少,關(guān)鍵步驟“x++;”的執(zhí)行次數(shù)都為0次。常量階的時(shí)間復(fù)雜
度記為T(n)=0(1)?
③i=l;
答:
算法意圖:將i的值賦值為1;
算法的關(guān)鍵步驟:i=l;
關(guān)鍵步驟執(zhí)行次數(shù):1次;
算法的時(shí)間復(fù)雜度:T(n)=O(1)
第2章
1.名詞解釋
(1)線性表
具有相同數(shù)據(jù)類型的n(n>=0)個(gè)數(shù)據(jù)元素的有限序列,排列方式為“一個(gè)接一個(gè)的排
列”。通常記為:
(ai,32,ai-i,a,,8i+i,"an)
其中,n為表長,n=0時(shí)稱為空表。
(2)順序表
用順序存儲(chǔ)方式存放的線性表叫順序表,順序存儲(chǔ)是指在內(nèi)存中用地址連續(xù)的一塊
存儲(chǔ)空間順序存放線性表的各元素。
特點(diǎn):①用物理上的相鄰實(shí)現(xiàn)數(shù)據(jù)元素邏輯關(guān)系上的相鄰;②可實(shí)現(xiàn)隨機(jī)存取。
(3)線性單鏈表
用鏈?zhǔn)酱鎯?chǔ)方式存放的線性表叫鏈表。
鏈表是通過一組任意的存儲(chǔ)單元來存儲(chǔ)線性表中的數(shù)據(jù)元素,對(duì)每個(gè)數(shù)據(jù)元素a”除了
存放數(shù)據(jù)元素的自身的信息a之外,還需要存放其后繼ai+i所在的存貯單元的地址,這兩
部分信息組成一個(gè)“結(jié)點(diǎn)”,存放數(shù)據(jù)元素信息的稱為數(shù)據(jù)域data,存放其后繼地址的稱為
指針域nexto因此n個(gè)元素的線性表通過每個(gè)結(jié)點(diǎn)的指針域聯(lián)成了一個(gè)“鏈子”,稱之為
鏈表。其中:
線性、單向鏈結(jié)構(gòu)的叫線性單鏈表;
線性、雙向鏈結(jié)構(gòu)的叫線性雙向鏈表;
環(huán)形、單向鏈結(jié)構(gòu)的叫單循環(huán)鏈表;
環(huán)形、雙向鏈結(jié)構(gòu)的叫雙循環(huán)鏈表。
(4)單循環(huán)鏈表
在單鏈表的基礎(chǔ)上,鏈表最后一個(gè)結(jié)點(diǎn)的指針域不為空,而是指向第一個(gè)結(jié)點(diǎn),使得鏈
表頭尾結(jié)點(diǎn)相連,整個(gè)鏈表形成一個(gè)環(huán)。
單循環(huán)鏈表特點(diǎn):從表中任何一個(gè)結(jié)點(diǎn)出發(fā)均可找到其它結(jié)點(diǎn)。
(單鏈表特點(diǎn):要找鏈表中任何一個(gè)結(jié)點(diǎn),必須從頭結(jié)點(diǎn)開始遍歷該結(jié)點(diǎn)以前的整個(gè)鏈
表。)
2.判斷題(在各題后填寫“4”或“X”)
(1)線性表若采用鏈?zhǔn)酱鎯?chǔ)表示時(shí)所有存儲(chǔ)結(jié)點(diǎn)之間的地址可連續(xù)可不連續(xù)(4)
(2)鏈?zhǔn)酱鎯?chǔ)在插入和刪除時(shí)需要保持?jǐn)?shù)據(jù)元素原來的物理順序,不需要保持原來的邏
輯順序。(X)
(3)鏈表中每個(gè)結(jié)點(diǎn)都是兩個(gè)域。(X)
解析:單鏈表中每個(gè)結(jié)點(diǎn)都是兩個(gè)域,雙鏈表不是兩個(gè)域。
(4)在順序表中,邏輯上相鄰的元素在物理位置上不一定相鄰。(X)
(5)順序表可以按下標(biāo)隨機(jī)(或直接)訪問,順序表還可以從某一指定元素開始,向前
或向后逐個(gè)元素順序訪問。(4)
3.填空題
(1)線性表的順序存儲(chǔ)結(jié)構(gòu)是一種隨機(jī)存取的存儲(chǔ)結(jié)構(gòu):線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)
構(gòu)是一種循序訪問的存儲(chǔ)結(jié)構(gòu),即要訪問線性表中的任一元素,必須“順藤摸瓜”先逐個(gè)
遍歷該元素之前的所有元素。
(“隨機(jī)存取”,有時(shí)亦稱直接訪問,指的是當(dāng)存儲(chǔ)器中的消息被讀取或?qū)懭霑r(shí),所需要
的時(shí)間與這段信息所在的位置無關(guān)。)
(2)線性表采用順序存儲(chǔ)結(jié)構(gòu)時(shí),其存儲(chǔ)地址通常必須是連續(xù)的,采用鏈?zhǔn)酱鎯?chǔ)
結(jié)構(gòu)時(shí),其存儲(chǔ)地址連續(xù)與否均可以。
(3)已知順序表長度為n(元素序號(hào)為0?n-l),在i位置(lWi/n+l)插入一個(gè)元素
需要移動(dòng)正1個(gè)元素,把i位置(iWiWn)的元素刪除需要移動(dòng)上j個(gè)元素。
4.含有n個(gè)結(jié)點(diǎn)的線性單鏈表中,在指針p所指結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度為
0(1),在指針p所指結(jié)點(diǎn)前插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度為0(n)。
(因?yàn)樵趩捂湵碇?,任何一個(gè)結(jié)點(diǎn)含后繼指針,但不含前驅(qū)指針,所以在p所指結(jié)點(diǎn)后
插入一個(gè)新結(jié)點(diǎn),需要從第一個(gè)結(jié)點(diǎn)開始逐一訪問。)
5.含有n個(gè)結(jié)點(diǎn)的線性單鏈表中,在給定值為d的結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度
為QS上,在給定值為d的結(jié)點(diǎn)前插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度為Qin)o
6.含有n個(gè)結(jié)點(diǎn)的雙向鏈表中,在指針p所指結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度為
0(1),在指針p所指結(jié)點(diǎn)前插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度為QLL。
7.在具有n個(gè)結(jié)點(diǎn)的按結(jié)點(diǎn)數(shù)據(jù)有序的線性單鏈表中插入一個(gè)新結(jié)點(diǎn)并使鏈表依然有
序的操作的時(shí)間復(fù)雜度是皿I。
四、選擇題
(1)設(shè)單鏈表中結(jié)點(diǎn)的結(jié)構(gòu)為(data,next)。若想摘除結(jié)點(diǎn)*p(*p既不是第一個(gè)也不是
最后一個(gè)結(jié)點(diǎn))的直接后繼,則應(yīng)執(zhí)行下列哪一個(gè)操作?
A.p->next=p->next->next;
B.p=p->next;p->next=p->next->next;
C.p->next=p->next;
D.p=p->next->next;
(2)在一個(gè)長度為n的順序表中向第i個(gè)元素位置插入一個(gè)新元素時(shí),
需要從后向前依次后移個(gè)元素。
A.n-i
B.n-i+1
C.n-i-1
D.i
(3)設(shè)單鏈表中結(jié)點(diǎn)的結(jié)構(gòu)為(data,next)?已知指針q所指結(jié)點(diǎn)是指針p所指結(jié)點(diǎn)的直
接前驅(qū),若在*q與*p之間插入結(jié)點(diǎn)*s,則應(yīng)執(zhí)行下列哪一個(gè)操作?
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;
(4)在一個(gè)長度為n的順序表的表尾插入一個(gè)新元素的漸進(jìn)時(shí)間復(fù)雜度為。
A.O(n)
B.O(l)
C.O(n2)
DO(log2n)
(5)設(shè)雙向循環(huán)鏈表中結(jié)點(diǎn)的結(jié)構(gòu)為(data,prior,next),且不帶表頭結(jié)點(diǎn)。若想在指針p
所指結(jié)點(diǎn)之后插入指針s所指結(jié)點(diǎn),則應(yīng)執(zhí)行下列哪一個(gè)操作?
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;
五、簡答題
簡述順序表與鏈表的優(yōu)缺點(diǎn)。
是否是否
存儲(chǔ)密度存取效率增刪效率
需預(yù)先分配需連續(xù)存儲(chǔ)空間
順序表高需要需要高低
鏈表低不需要不需要低高
順序表的存儲(chǔ)效率高,存取速度快。但它的空間大小一經(jīng)定義,在程序整個(gè)運(yùn)行期
間不會(huì)發(fā)生改變,因此,不易擴(kuò)充。同時(shí),由于在插入或刪除時(shí),為保持原有次序,平均
需要移動(dòng)一半(或近一半)元素,修改效率不高。
鏈?zhǔn)酱鎯?chǔ)表示的存儲(chǔ)空間一般在程序的運(yùn)行過程中動(dòng)態(tài)分配和釋放,且只要存儲(chǔ)器
中還有空間,就不會(huì)產(chǎn)生存儲(chǔ)溢出的問題。同時(shí)在插入和刪除時(shí)不需要保持?jǐn)?shù)據(jù)元素原來
的物理順序,只需要保持原來的邏輯順序,因此不必移動(dòng)數(shù)據(jù),只需修改它們的鏈接指
針,修改效率較高。但存取表中的數(shù)據(jù)元素時(shí),只能循序訪問,因此存取效率不高。
循序訪問,“順藤摸瓜”逐個(gè)按序訪問?
六、編程
有順序表A和B,其元素均按從小到大的升序排列,編寫一個(gè)算法將它們合并成一個(gè)
順序表C,要求C的元素也是從小到大的升序排列。如:
已知:A={5,8,9,12,16},B={1,3,5,7}求:己{1,3,5,5,7,8,9,12,16}
提示:(1)依次掃描通過A和B的元素,比較當(dāng)前的元素的值,將較小值的元素賦
給C,如此直到一個(gè)線性表掃描完畢;
(2)將未完的那個(gè)順序表中余下部分賦給C即可。C的容量要能夠容納A、B兩個(gè)線
性表相加的長度。
程序“24.c”如下:
#include<stdio.h>
#defineMaxSize50
typedefintDataType;
typedefstruct
(
DataTypedata[MaxSize];
intlast;/*線性表的最后一個(gè)元素last*/
}Lnode,*List;
voidMerge_List(LnodeA,LnodeB,Lnode*C)/*合并C=A+B*/
{
inti,j,k;
i=l;j=l;k=l;
while(i<=A.last&&j<=B.last)
if(A.data[i]<=B.data[j])
(
C->data[k]=A.data[i];
k-H-;
i++;
}
else
C->data[k]=B.datafj];
k++;j++;
while(i<=A.last)
{
C->data[k]=A.data[i];
k++;
i++;
}
while(j<=B.last)
{C->data[k]=B.data[j];
k++;jf}
C->last=k-1;
)
main()
{LnodeA,B,C;
inti,k,m;
printff請(qǐng)輸入A順序表元素,元素為整型量,用空格分開,-1為結(jié)束標(biāo)志:”);
A.last=0;i=0;scanf(n%dn,&i);
while(i!=-1){/*輸入A順序表元素,建立有序表*/
k=A.last;
while((k>=l)&&(i<A.data[k]))
k??;
fbr(m=A.last;m>=k+1;m-)
A.data[m+1]=A.data[m];
A.datafk+1]=i;A.last-H-;
scanff%d”,&i);}
printf(〃\n\n請(qǐng)輸入B順序表元素,元素為整型,-1為結(jié)束標(biāo)志:”);
B.last=0;i=0;scanf(M%dn,&i);
while(i!=-l){/*輸入B順序表元素,建立有序表*/
k=B.last;
while((k>=l)&&(i<B.data[k]))
for(m=B.last;m>=k+1;m-)B.data[m+1]=B.data[m];
B.data[k+1]=i;B.last-H-;
scanf(M%dn,&i);}
printf(〃\nA有序表元素列表:”);
for(i=l;i<=A.last;i++)
prmtf(M%d",A.data[i]);
printf(M\nn);
printf(”\nB有序表元素列表:”);
for(i=1;i<=B.last;i++)
printff%dn,B.data[i]);
printff\n”);
MergeList(A,B,&C);
printf(”\n合并后C有序表元素列表:\n“);
for(i=l;i<=C.last;i++)
printff'%dn,C.data[i]);
printff'n”);
}
算法的時(shí)間性能是O(m+n),其中1n是A表長,n是B表長。運(yùn)行結(jié)果如圖2-23所
6"D八數(shù)據(jù)結(jié)構(gòu)源代碼\2_4\Debug\2_4-exe”
請(qǐng)輸入A順序表
請(qǐng)輸入B順序表元素,元素為整型,T■為結(jié)束標(biāo)志:1357T
。有序表元素列表:5891216
B有序表元素列表:135?
合并后C有序表元素列表:
圖2-23兩個(gè)有序表合并運(yùn)行結(jié)果
3.5習(xí)題
一、名詞解釋
(1)棧
棧是限制在表的一端進(jìn)行插入和刪除操作的線性表。
允許插入、刪除的這一端稱為棧頂,另一個(gè)固定端稱為棧底。
棧的順序結(jié)構(gòu):利用順序存儲(chǔ)方式實(shí)現(xiàn)的棧稱為順序棧。
棧的鏈?zhǔn)浇Y(jié)構(gòu):用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn)的棧稱為鏈棧。
(2)隊(duì)
隊(duì)是一種“先進(jìn)先出”(FIFO--FirstInFirstOut)的數(shù)據(jù)結(jié)構(gòu),即插入操作在表一端進(jìn)行,
而刪除操作在表的另一端進(jìn)行,這種數(shù)據(jù)結(jié)構(gòu)稱為隊(duì)列。
把允許插入的一端稱為隊(duì)尾(rear),把允許刪除的一端稱為隊(duì)頭(front)。
隊(duì)的順序結(jié)構(gòu):順序存儲(chǔ)的隊(duì)稱為順序隊(duì)。
隊(duì)的鏈?zhǔn)浇Y(jié)構(gòu):采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的隊(duì)稱為鏈隊(duì)。
二、判斷題
(1)棧和隊(duì)列都是特殊的線性表。(V)
(2)棧和隊(duì)列都將插入和刪除操作限制在表的端點(diǎn)處進(jìn)行。(V)
(3)只允許在表的一端進(jìn)行插入和刪除操作的線性表稱為棧。(V)
(4)沒有元素的棧稱為空棧,空棧用不著棧頂指針。(x)
(5)只要棧不空,就能任意刪除棧的元素。(x)
(6)棧允許刪除的一端稱為棧頂,而棧底元素是不能刪除的。(x)
(7)對(duì)采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的棧進(jìn)行操作不必判斷溢出。(V)
(8)元素進(jìn)出隊(duì)列一定滿足“先進(jìn)先出”的規(guī)律。(V)
(9)鏈隊(duì)列不存在溢出問題。(V)
(10)在鏈隊(duì)列中刪除一個(gè)元素是在鏈表的最前端進(jìn)行的。(V)
三、單項(xiàng)選擇題
(1)棧和隊(duì)列的共同之處在于它們具有相同的(A)。
A.邏輯特性B.物理特性C.運(yùn)算方法D.元素類型
(2)棧和隊(duì)列都是特殊的線性表,其特殊性在于(C)。
A.它們具有一般線性表所沒有的邏輯特性
B.它們的存儲(chǔ)結(jié)構(gòu)比較特殊
C.對(duì)它們的使用方法做了限制
D.它們比一般線性表更簡單
(3)若5個(gè)元素的出棧序列為1,2,3,4,5,則進(jìn)棧序列可能是()0
A.2,4,3,1,5B.2,3,1,5,4
C.3,1,4,2,5D.3,1,2,5,4
(4)某隊(duì)列初始為空,若它的輸入序列為a,b,c,d,它的輸出序列應(yīng)為()。
A.a,b,c,dB.d,c,b,a
C.a,c,b,dD.d,a,c,b
(5)當(dāng)3個(gè)元素的進(jìn)棧序列給定以后,由這3個(gè)元素組成的可能的出棧序列應(yīng)該有
()。
A.5種B.6種C.4種D.3種
(6)若棧采用順序存儲(chǔ)結(jié)構(gòu),正常情況下,往堆棧中插入一個(gè)元素,棧頂指針top的
變化是()o
A.不變B.top=0C.--topD.top++
(7)若棧采用順序存儲(chǔ)結(jié)構(gòu),正常情況下,刪除棧中一個(gè)元素,棧頂指針top的變
化是()。
A.不變B.top=0C.top--D.top++
(8)若隊(duì)列采用順序存儲(chǔ)結(jié)構(gòu),元素的排列順序(B)。
A.與元素的值的大小有關(guān)
B.由元素進(jìn)入隊(duì)列的先后順序決定
C.與隊(duì)頭指針和隊(duì)尾指針的取值有關(guān)
n與作為順序存儲(chǔ)結(jié)構(gòu)的數(shù)組的大小有關(guān)
(9)若非空棧采用含頭結(jié)點(diǎn)的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),棧頂指針為top,刪除堆棧的一個(gè)元素
的過程是依次執(zhí)行:p=top,(B),free(p)0
A.top=p->nextB.top->next=p->next
C.p=topD.p=p->next
(10)若隊(duì)列采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),隊(duì)頭元素指針與隊(duì)尾元素指針分別為front和rear,
向隊(duì)列中插入一個(gè)由P所指的新結(jié)點(diǎn)的過程是依次執(zhí)行:(),rear二p。
A.rear=pB.front二p
C.rear->next=pD.front->next=p
(11)若非空隊(duì)列采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),隊(duì)頭元素指針與隊(duì)尾元素指針分別為front和rear,
刪除隊(duì)列的一?1■元素的過程是依次執(zhí)行:p=front,(),free(p)0
A.rear=pB.rear=p->next
C.rear=p->nextD.front=p->next
(12)在循環(huán)隊(duì)列中,若front與rear分別表示隊(duì)頭元素和隊(duì)尾元素的位置,則判斷循
環(huán)隊(duì)列隊(duì)空的條件是(C)。
A.front=rear+lB.rear=front+l
C.front==rearD.rear=front-l
四、填空題
(1)棧和隊(duì)列的邏輯結(jié)構(gòu)都是線性一結(jié)構(gòu)。
(2)棧的插入和刪除操作都是在棧頂一進(jìn)行,而隊(duì)列的插入操作在.隊(duì)尾.進(jìn)行,刪除
操作在一隊(duì)頭_進(jìn)行。
(3)對(duì)某棧執(zhí)行刪除操作時(shí),只有在一棧中只有一個(gè)元素的一情況下,才會(huì)將棧底元素
刪除。
(4)在具體的程序設(shè)計(jì)過程中,棧的順序存儲(chǔ)結(jié)構(gòu)一般是利用一個(gè)數(shù)組一描述的,同
時(shí)還要定義一個(gè)整型變量來一給出棧頂元素的位置―。
(5)若棧采用順序存儲(chǔ)結(jié)構(gòu),在不產(chǎn)生溢出的情況下往棧中插入一個(gè)新元素,
首先一將棧頂指針后移一個(gè)位置一,然后將被插入元素放在修改后的棧頂指針?biāo)赋龅奈?/p>
(6)若隊(duì)列采用順序存儲(chǔ)結(jié)構(gòu),未溢出時(shí)插入一個(gè)元素首先將隊(duì)尾指針后移一個(gè)位
置一然后再一將被插入元素放在修改后的隊(duì)尾指針?biāo)赋龅奈恢猫D。
(7)當(dāng)棧的最大長度難以估計(jì)時(shí),最好采用一鏈?zhǔn)揭淮鎯?chǔ)結(jié)構(gòu)。
五、綜合應(yīng)用題
(1)已知棧采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),初始時(shí)為空,請(qǐng)畫出a,b,c,d四個(gè)元素依次進(jìn)棧以
后該棧的狀態(tài),然后再畫出此時(shí)的那個(gè)棧頂元素出棧后棧的狀態(tài)。
(2)若按從左到右的順序依次讀人已知序列{a,b,c,d,e,f,g}中的元素,然后結(jié)
合棧操作,能得到下列序列中的哪些序列(每個(gè)元素進(jìn)棧一次,下列序列表示出棧的次序)?
A.{d,e,c,f,b,g,a}B.{f,e,g,d,a,c,b}
C.{e,f,d,g,b,c,a}D.{c,d,b,e,f,a,g)
答:A、D滿足出棧序列。滿足A出棧次序的具體操作序列為:
a,bed進(jìn)棧,然后d出棧;
然后e進(jìn)棧,接著e出棧;
然后c出棧;
然后f進(jìn)棧,接著f出棧;
然后b出棧;
然后g進(jìn)棧,接著g出棧
最后a出棧。
出棧序列:d,e,c,f,b,g,a,所以A滿足出棧序列。
滿足D出棧次序的具體操作序列請(qǐng)同學(xué)們自行寫出。
4.7習(xí)題
一、選擇
(1)串是()?
A不少于一個(gè)字母和序列B任意個(gè)字母的序列
C不少于一個(gè)字符的序列D有限個(gè)字符的序列
(2)串的長度是()o
A串中不同字母的個(gè)數(shù)B串中不同字符的個(gè)數(shù)
C串中所含字符的個(gè)數(shù),且大于0D串中所含字符的個(gè)數(shù)
(3)設(shè)串sl='abedefg',s2=*pqrst,函數(shù)CON(X,Y)返回X和串的連接串,SUB
(S,I,J)返回串S的從序號(hào)I的字符開始的J個(gè)字符組成的子串,LEN(S)返回串S的長
度,則CON(SUB(si,2,LEN(s2)),SUB(sl,LEN(s2),2))的結(jié)果串是()。
AbcdefBbcdefgCbcpqrstDbcdefef
注釋:CON(SUB(si,2,LEN(s2)),SUB(sl,LEN(s2),2))
=CON(SUB(si,2,5),SUB(sl,5,2))
=CON(bcdef,ef)
二bcdefef
(4)數(shù)組A[l:5H1:6]的每個(gè)元素占5個(gè)單元,將其按行優(yōu)先次序存儲(chǔ)在起始起址
為1000的連續(xù)的內(nèi)存單元中,則元素A[5,5]的地址為(A)。
A1140B1145C1120D1125
注釋:該數(shù)組為5行6列,
按照公式:Loc[i,j]=Loc[l,1]+(nX(i-l)+j-l)Xsize,
其中m=5,n=6,size=5,
那么Loc[5,5>Loc[l,1]+(6X(5-1)+5-1)X5=1140
(5)對(duì)矩陣壓縮存儲(chǔ)是為了()。
A方便運(yùn)算B節(jié)省空間C方便存儲(chǔ)D提高運(yùn)算速度
(6)數(shù)組通常具有的兩種基本操作是()。
A插入與刪除B索引和修改
C查找和修改D查找與刪除
注釋:數(shù)組,連續(xù)存儲(chǔ),不適合經(jīng)常插入和刪除;適合經(jīng)常查找和修改(定位后修
改某單元內(nèi)的值,單元個(gè)數(shù)和單元之間的邏輯順序不做修改。)
(7)二維數(shù)組M[i,j]的行下標(biāo)i的范圍從0到4,列下標(biāo)j的范圍從0到5,M按行
存儲(chǔ)時(shí)元素\1[3,5]的起始地址與M按列存儲(chǔ)時(shí)元素()的起始地址相同。
Am[2,4]BM[3,4]CM[3,5]DM[4,4]
注釋:按行存儲(chǔ)時(shí),M[3,5]是第24個(gè)元素(前3行是3X6個(gè),第4行是6個(gè))
按列存儲(chǔ)時(shí),M[3,4]是第24個(gè)元素(前4列是4X5個(gè),第5列是4個(gè))
(8)稀疏矩陣一般的壓縮存儲(chǔ)方法有兩種,即()?
A二維數(shù)組和三組數(shù)組B三元組表和散列
C三元組表和十字鏈表D散列和十字鏈表
(9)設(shè)有上三角矩陣a(1:5,1:5),現(xiàn)將其上三角中的元素按列優(yōu)先順序存放在一維數(shù)
組b(l:15)中。已知b[l]的地址為100,每個(gè)元素占用2個(gè)存儲(chǔ)單元,則a[3,4]的地址為
(A)o
A116B118C120D122
第79頁公式,其中i=3,j=4.
上三角矩陣Loc[i,j]=Loc[1,1]+j(j-l)/2+i-l
=Loc[1,1]+8個(gè)元素所占的存儲(chǔ)單元個(gè)數(shù)
=100+16
=116
二、判斷題
(1)串長度是指串中不同字符的個(gè)數(shù)。(X)
[注]串長度:串中所包含的字符個(gè)數(shù),無論是相同字符還是不同字符。
(2)串是n個(gè)字母的有限序列(n>0)。(X)
[注]是字符,不是字母
(3)如果兩個(gè)串含有相同的字符,則說它們相等。(X)
[注]長度相等且對(duì)應(yīng)位置的字符都相等。
(4)空串與空格串是相同的。(X)
(5)對(duì)矩陣壓縮存儲(chǔ)的方法只能用三元組表存儲(chǔ)矩陣元素。(X)
[注]還有行邏輯鏈接的順序表和十字鏈表。
三、填空題
(1)串值的兩種最基本的存儲(chǔ)方式是順序存儲(chǔ)方式和鏈接存儲(chǔ)方式。
(2)兩個(gè)串相等的充分必要是字符串長度相同且對(duì)應(yīng)位置字符相同。
(3)空串的長度等于?。
(4)空格串是空格組成的非空串,其長度等于串中空格字符的個(gè)數(shù)。
(5)設(shè)s='Iamateacher',其長度是14。
(6)設(shè)sl=,good,,s2=,',s3-bye!,,則si,s2和s3連接后的結(jié)果
是goodbye!
(7)對(duì)矩陣采用壓縮存儲(chǔ)是為了節(jié)省存儲(chǔ)空間。
(8)設(shè)N行N列的下三角矩陣A己壓縮到一維數(shù)組S(1:N(N+1)/2)中,若按行
序?yàn)橹鞔鎯?chǔ),則A[LJ1對(duì)應(yīng)的S中的存儲(chǔ)位置是一i(i-D/2+jT。
四、程序填空:
(1)采用順序存儲(chǔ)結(jié)構(gòu)編寫算法:將串r中所有值為chi的字符換成ch2。
#defineMaxSize100
typedefstruct
{charstr[MaxSize];
intlen;
}strtype;
Strtype*trans(r,chl,ch2)
Strtype*r;
charch1,ch2;
inti;
for(i=0;i<r->len;i++)
if(r->str[i]==chl)
r->str[i]=ch2;
return(r);
(2)執(zhí)行下列函數(shù)會(huì)產(chǎn)生什么的結(jié)果?
Voiddemonstrate()
{StrAssign(s,"thisisabook");//s=uthisisabook”
StrReplace(s,SubString(s,3,7),44eseare");//s=4tthesearebook''
StrAssign(t,StrCat(s,us"));//t=s=44thesearebooks^^
StrAssign(u,"xyxyxyxyxyxy");//u=xyxyxyxyxyxy
StrAssign(v,SubString(u,6,3));//v=yxy
StrAssign(w,"W”);〃w=W
printf("t=”,t,“v=",v,‘'u='',StrReplace(u,v,w));
輸出:
t=thesearebooks
v=yxy
u=xWxWxW
五、算法設(shè)計(jì):
1采用順序存儲(chǔ)結(jié)構(gòu)編寫算法:
(1)將串r中刪除其值等于ch的所有字符。
(2)將串r中所有字符按照相反的次序仍存放在r中。
(3)將串rl中第index個(gè)字符起求出首次與串r2相同的子串的起始位置。
(4)從串r中刪除所有與r3相同的子串。
2編寫鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)下刪除串S從位置i開始長度為k的子串的算法。
L串的算法設(shè)計(jì)1
分別在順序存儲(chǔ)和一般鏈接存儲(chǔ)兩種方式下用C語言寫出實(shí)現(xiàn)把串si復(fù)制到串S2的串復(fù)
制函數(shù)strcpy(sl,s2)。
2.串的算法設(shè)計(jì)2
在一般鏈接存儲(chǔ)(一個(gè)結(jié)點(diǎn)存放一個(gè)字符)方式下,寫出采用簡單算法實(shí)現(xiàn)串的模式匹配的C
語言函數(shù)intL_index(t,p)?
串的算法設(shè)計(jì)1
分別在順序存儲(chǔ)和一般鏈接存儲(chǔ)兩種方式下,用C語言寫出實(shí)現(xiàn)把串si復(fù)制到串s2的串復(fù)
制函數(shù)strcpy(sl,s2)o
順序存儲(chǔ):
#include"string.h"
#defineMAXN100
chars[MAXN];
intS_strlen(chars[])
(
inti;
for(i=0;s[i]!=W;i++);
return(i);
voidS_strcpy(charsl[],chars2[])//
(
inti;
for(i=0;sl[i]!=W;i4-+)
s2[i]=sl[i];
s2[i]=,\0';
)
一般鏈接存儲(chǔ):
#include"stdio.h"
typedefstructnode
(
chardata;
structnode*link;
}NODE;
NODE*L_strcpy(NODE*sl)
(
NODE*s2,*tl,*t2,*s;
if(sl==NULL)return(NULL);
else
(
tl=sl;
t2=(NODE*)malloc(sizeof(NODE));
s2=t2;
while(tl!=NULL)
(
s=(NODE*)malloc(sizeof(NODE));
s->data=tI->data;
t2->link=s;
t2=s;
tl=tl->link;
)
t2->link=NULL;
s=s2;
s2=s2->link;
free(s);
return(s2);
串的算法設(shè)計(jì)2
在一般鏈接存儲(chǔ)(一個(gè)結(jié)點(diǎn)存放一個(gè)字符)方式下,寫出采用簡單算法實(shí)現(xiàn)串的模式匹配的C
語言函數(shù)intL_index(t,p)o
#include"stdio.h"
typedefstructnode
(
chardata;
structnode*link;
}NODE;
intL_index(NODE*t,NODE*p)
(
NODE*tl,*pl,*t2;
inti;
tl=t;i=l;
while(tl!=NULL)
(
pl=p;
t2=tl->link;
while(p1->data==t1->data&&p1!=NULL)
pl=pl->link;
tl=tl->link;
}
if(pl==NULL)return(i);
i++;
tl=t2;
)
return(O);
第5章習(xí)題答案
一、選擇
1.以下說法錯(cuò)誤的是()
A.樹形結(jié)構(gòu)的特點(diǎn)是一個(gè)結(jié)點(diǎn)可以有多個(gè)直接前趨
B.線性結(jié)構(gòu)中的一個(gè)結(jié)點(diǎn)至多只有一個(gè)直接后繼
C.樹形結(jié)構(gòu)可以表達(dá)(組織)更復(fù)雜的數(shù)據(jù)
D.樹(及一切樹形結(jié)構(gòu))是一種“分支層次”結(jié)構(gòu)
2.以下說法錯(cuò)誤的是(BC)
A.二叉樹可以是空集
B.二叉樹的任一結(jié)點(diǎn)都直兩棵子樹(是“最多有”兩棵子樹)
C.二叉樹與樹具有相同的樹形結(jié)構(gòu)(二叉樹的孩子必有左右之分,只有一個(gè)孩子時(shí)也要分
出左右,而樹即使是有序樹,只有一個(gè)孩子時(shí)部分左右)
D.二叉樹中任一結(jié)點(diǎn)的兩棵子樹有次序之分
3、以下說法錯(cuò)誤的是()
A.完全二叉樹上結(jié)點(diǎn)之間的父子關(guān)系可由它們編號(hào)之間的關(guān)系來表達(dá)
B.在三叉鏈表上,二叉樹的求雙親運(yùn)算很容易實(shí)現(xiàn)
C.在二叉鏈表上,求根,求左、右孩子等很容易實(shí)現(xiàn)
D.在二叉鏈表上,求雙親運(yùn)算的時(shí)間性能很好
4、以下說法錯(cuò)誤的是()
A.一般在哈夫曼樹中,權(quán)值越大的葉子離根結(jié)點(diǎn)越近
B.哈夫曼樹中沒有度數(shù)為1的分支結(jié)點(diǎn)
C.若初始森林中共有n裸二叉樹,最終求得的哈夫曼樹共有2n-l個(gè)結(jié)點(diǎn)
D.若初始森林中共有n裸二叉樹,進(jìn)行2n-l次合并后才能剩下一棵最終的哈夫樹
5.深度為6的二叉樹最多有()個(gè)結(jié)點(diǎn)()
A.64B.63C.32D.31
6.將含有83個(gè)結(jié)點(diǎn)的完全二叉樹從根結(jié)點(diǎn)開始編號(hào),根為1號(hào),后面按從上到下、從
左到右的順序?qū)Y(jié)點(diǎn)編號(hào),那么編號(hào)為41的雙結(jié)點(diǎn)編號(hào)為()
A.42B.40C.21D.20
7.設(shè)二叉樹有n個(gè)結(jié)點(diǎn),則其深度為()
A.n-1B.nC.5floor(log2n)D.無法確定
注:完全二叉樹才能確定其深度。
8.設(shè)深度為k的二叉樹上只有度為0和度為2的節(jié)點(diǎn),則這類二叉樹上所含結(jié)點(diǎn)總
數(shù)最少()個(gè)
A.k+1B.2kC.2k-1D.2k+1
注:單支數(shù)含結(jié)點(diǎn)個(gè)數(shù)最少,但題目規(guī)定該二叉樹中不存在度為1的結(jié)點(diǎn)。所以,在
單支樹的基礎(chǔ)上把結(jié)點(diǎn)補(bǔ)齊,使之度數(shù)為2或0,結(jié)果就是有2k-l個(gè)結(jié)點(diǎn)。
9.下列說法中正確的是()
A.任何一棵二叉樹中至少有一個(gè)結(jié)點(diǎn)的度為2
B.任何一棵二叉樹中每個(gè)結(jié)點(diǎn)的度都為2
C.任何一棵二叉樹中的度肯定等于2
D.任何一棵二叉樹中的度可以小于2
10.對(duì)含有()個(gè)結(jié)點(diǎn)的非空二叉樹,采用任何一種遍歷方式,其結(jié)點(diǎn)訪問序列
均相同。
A.0B.lC.2D.不存在這樣的二叉樹
11.已知某二叉樹的后續(xù)遍歷序列是dabec,中序遍歷序列是deabc,它的先序遍歷序列是
()
A.acbedB.deabcC.decabD.cedba
12.某二叉樹的先序遍歷結(jié)點(diǎn)訪問順序是abdgcefh,中序遍歷的結(jié)點(diǎn)訪問順序是
dgbaechf,則其后序遍歷的結(jié)點(diǎn)訪問順序是()
A.bdgcefhaB.gdbecfhaC.D.bdgechfaD.gdbehfca
分析:先序遍歷序列的第一個(gè)字符為根結(jié)點(diǎn)。時(shí)于中序遍歷,根結(jié)點(diǎn)在中序遍歷序列的中間,左邊部分
是根結(jié)點(diǎn)的左子樹的中序遍歷序列,右邊部分是根結(jié)點(diǎn)的右子樹的中序遍歷序列。
先序:abdgcefh->abdgcefh
中序?dgbaechf->dgbaechf
得出結(jié)論:a是樹根,a有左子樹和右子樹,左子樹有bdg結(jié)點(diǎn),右子樹有cefh結(jié)點(diǎn).
先序:bdg->bdg
中序:dgb->dgb
得出結(jié)論:b是左子樹的根結(jié)點(diǎn),b無右子樹,有左子樹.
先序:dg->dg
中序:dg->dg
得出結(jié)論:d是b的左子樹的根結(jié)點(diǎn),d無左子樹,有右子樹.
先序:cefh->cefh
中序:echf->echf
得出結(jié)論:c是右子樹的根結(jié)點(diǎn),c有左子樹(只有巳結(jié)點(diǎn)),有右子樹(有fh結(jié)點(diǎn)).
先序:fh—>fh
中序:hf->hf
得出結(jié)論:f是c的左子樹的根結(jié)點(diǎn),用左子樹(只有h結(jié)點(diǎn)),無右子樹。
還原二叉樹為:
a
bc
def
gh
后序遍歷序列:gdbehfca
13、二叉樹的先序遍歷序列中,任意一個(gè)結(jié)點(diǎn)均處在其子女結(jié)點(diǎn)的前面,這種說法
()
A.正確B.錯(cuò)誤
14.由于二叉樹中每個(gè)結(jié)點(diǎn)的度最大為2,所以二叉樹是一種特殊的樹,這種說法
()
A.正確B.錯(cuò)誤
15.二叉樹是每個(gè)結(jié)點(diǎn)的度不超過2的有序樹的特殊情況,這種說法)
A.正確B.錯(cuò)誤
16.深度為5的二叉樹至多有()個(gè)結(jié)點(diǎn)。
A.16B.32C.31D.10
二、填空
1.樹(及一切樹形結(jié)構(gòu))是一種一1次_結(jié)構(gòu)。在樹上,結(jié)點(diǎn)沒有直接前趨。對(duì)
樹上任一結(jié)點(diǎn)X來說,X是它的任一干樹的根結(jié)點(diǎn)惟一的一雙親.。
2.一棵樹上的任何結(jié)點(diǎn)(不包括根本身)稱為根的子孫。若B是A的子孫,則
稱A是B的祖先
3.一般的,二叉樹有一空—二叉樹、一只有超—的二叉樹、只有_左子樹的二叉樹、
只有一右子樹____的二叉樹、同時(shí)有左子樹、右玉樹—的二叉樹五種基本形態(tài)。
4.二叉樹第i(i>=l)層上至多有"一個(gè)結(jié)點(diǎn)。
5.深度為k(k>=l)的二叉樹至多有上蟲個(gè)結(jié)點(diǎn)。
6.對(duì)任何二叉樹,若度為2的節(jié)點(diǎn)數(shù)為止,則葉子數(shù)n產(chǎn).1+L。
7.滿二叉樹上各層的結(jié)點(diǎn)數(shù)已達(dá)到了二叉樹可以容納的_極限一。滿二叉樹也是一完全二
叉樹,但反之不然。
8.具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為口哂」+
如果將一棵有n個(gè)結(jié)點(diǎn)的完全二叉樹按層編號(hào),則對(duì)任一編號(hào)為i(l<=i<=n)的結(jié)點(diǎn)X
有:
9,若i=l,則結(jié)點(diǎn)X是一根結(jié)點(diǎn);;若i>L則X的雙親結(jié)點(diǎn)的編號(hào)為一返
10.二叉樹通常有酶_存儲(chǔ)結(jié)構(gòu)和暹式一存儲(chǔ)結(jié)構(gòu)兩類存儲(chǔ)結(jié)構(gòu)。
11.每個(gè)二叉鏈表的訪問只能從_握_結(jié)點(diǎn)的指針,該指針具有標(biāo)識(shí)二叉鏈表的作用。
12.對(duì)二叉鏈表的訪問只能從_根_指針開始,若二叉樹為空,則一根指針__=NULL.
13.二叉鏈表中每個(gè)存儲(chǔ)結(jié)點(diǎn)的每個(gè)指針域必須有一個(gè)值,這個(gè)值或者是_至—的
指針,或者是.左孩子或右孩子指針一
14.具有n個(gè)結(jié)點(diǎn)的二叉樹中,一共有個(gè)指針域,其中只有_m』一個(gè)用來指向結(jié)點(diǎn)
的左右孩子,其余的.n+1個(gè)指針域?yàn)镹ULLo
15.二叉樹有不同的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),其中最常用的是_二叉鏈表—與一三叉鏈表一。
16.在先序一遍歷二叉樹的序列中,任何結(jié)點(diǎn)的子樹上的所有結(jié)點(diǎn),都是直接跟在該
結(jié)點(diǎn)之后。
17.哈夫曼樹是帶權(quán)路徑度一最小一的樹,通常權(quán)值較大的結(jié)點(diǎn)離根一越近一。
18.有m個(gè)葉子結(jié)點(diǎn)的哈夫曼樹,其結(jié)點(diǎn)總數(shù)為2m-L。
19.任意一棵具有n個(gè)結(jié)點(diǎn)的二叉樹,若它有m個(gè)葉子,則該二叉樹上度數(shù)為1的結(jié)
點(diǎn)為n-2m+l個(gè)。根據(jù)P84性質(zhì)3:n2=n0-l
20.由任何一棵樹轉(zhuǎn)換成二叉樹時(shí),其根結(jié)點(diǎn)的右子樹總是空的。
三、簡答題
1.簡述二叉鏈表的類型定義。
2.簡述三叉鏈表的類型定義。
3.分別畫出含3個(gè)結(jié)點(diǎn)的樹與二叉樹的所有不同形態(tài)。
提示:含3個(gè)結(jié)點(diǎn)的樹,共有兩種形態(tài);
含3個(gè)結(jié)點(diǎn)的二叉樹,共有五種形態(tài)
4.已知一棵二叉樹的中序遍歷根序列和后序遍歷序列分別為BDCEAFHG和EDCBHGEA,
試畫出這棵二叉樹。
5.將下圖所示的森林轉(zhuǎn)換成二叉樹。
6.給定權(quán)值7,18,3,32,5,26,12,8,構(gòu)造相應(yīng)的哈夫曼樹。
6、
溫馨提示
- 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年廣東南方職業(yè)學(xué)院高職單招語文2019-2024歷年真題考點(diǎn)試卷含答案解析
- 2025年山東鋁業(yè)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 2025年山東職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 2025年安徽郵電職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年安徽揚(yáng)子職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年(2019-2024年)真題考點(diǎn)試卷含答案解析
- 2025年安慶職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))歷年真題考點(diǎn)含答案解析
- 高端石材裝修工程承包合同模板
- CNC基礎(chǔ)知識(shí)培訓(xùn)課件
- 教師說課計(jì)劃教學(xué)匯報(bào)
- 右肩胛區(qū)皮膚鱗癌護(hù)理查房
- 華為財(cái)務(wù)管理(6版)-華為經(jīng)營管理叢書
- 化工工藝有機(jī)廢氣處理裝置技術(shù)規(guī)范
- 食品欺詐和預(yù)防知識(shí)專題培訓(xùn)課件
- 吐魯番地區(qū)鄯善縣區(qū)域環(huán)境概況自然及社會(huì)環(huán)境概況
- 超聲技術(shù)學(xué)智慧樹知到課后章節(jié)答案2023年下杭州醫(yī)學(xué)院
- 鹽酸乙醇標(biāo)準(zhǔn)溶液配制方法
- 網(wǎng)絡(luò)經(jīng)濟(jì)學(xué)PPT完整全套教學(xué)課件
- 薄膜材料與技術(shù)(全套課件)上
- 廠區(qū)動(dòng)火作業(yè)安全規(guī)程
- 急診科運(yùn)用PDCA對(duì)急診患者預(yù)檢分診登記系統(tǒng)使用率低原因分析品管圈魚骨圖柏拉圖對(duì)策擬定
- 網(wǎng)絡(luò)安全知識(shí)競賽題庫及答案 1000題
評(píng)論
0/150
提交評(píng)論