版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 1 章 緒 論課后習(xí)題講解1. 填空(1)()是數(shù)據(jù)的基本單位,在計(jì)算機(jī)程序中通常作為一個(gè)整體進(jìn)行考慮和處理。【解答】數(shù)據(jù)元素3()是數(shù)據(jù)的最小單位,()是討論數(shù)據(jù)結(jié)構(gòu)時(shí)涉及的最小數(shù)據(jù)單位?!窘獯稹繑?shù)據(jù)項(xiàng),數(shù)據(jù)元素 【分析】數(shù)據(jù)結(jié)構(gòu)指的是數(shù)據(jù)元素以及數(shù)據(jù)元素之間的關(guān)系。 從邏輯關(guān)系上講,數(shù)據(jù)結(jié)構(gòu)主要分為( )、( )、( )和( )。【解答】集合,線性結(jié)構(gòu),樹(shù)結(jié)構(gòu),圖結(jié)構(gòu) 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)主要有( )和( )兩種基本方法,不論哪種存儲(chǔ)結(jié)構(gòu),都要存儲(chǔ)兩方面的內(nèi)容:()和( )?!窘獯稹宽樞虼鎯?chǔ)結(jié)構(gòu),鏈接存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素,數(shù)據(jù)元素之間的關(guān)系 算法具有五個(gè)特性,分別是( )、( )、()、( )
2、、( )。【解答】有零個(gè)或多個(gè)輸入,有一個(gè)或多個(gè)輸出,有窮性,確定性,可行性 算法的描述方法通常有( )、( )、()和( )四種,其中,( )被稱為算法語(yǔ)言?!窘獯稹孔匀徽Z(yǔ)言,程序設(shè)計(jì)語(yǔ)言,流程圖,偽代碼,偽代碼 在一般情況下,一個(gè)算法的時(shí)間復(fù)雜度是( )的函數(shù)。【解答】問(wèn)題規(guī)模設(shè)待處理問(wèn)題的規(guī)模為 n,若一個(gè)算法的時(shí)間復(fù)雜度為一個(gè)常數(shù),則表示成數(shù)量級(jí)的形式為(),若為n*log25n,則表示成數(shù)量級(jí)的形式為()?!窘獯稹? (1),O (nlog2n)【分析】用大0記號(hào)表示算法的時(shí)間復(fù)雜度,需要將低次冪去掉,將最高次冪的系數(shù)去掉。2. 選擇題 順序存儲(chǔ)結(jié)構(gòu)中數(shù)據(jù)元素之間的邏輯關(guān)系是由( )
3、表示的,鏈接存儲(chǔ)結(jié)構(gòu)中的數(shù)據(jù)元素之間的邏輯關(guān) 系是由( )表示的。A 線性結(jié)構(gòu) B 非線性結(jié)構(gòu) C 存儲(chǔ)位置 D 指針【解答】 C, D【分析】順序存儲(chǔ)結(jié)構(gòu)就是用一維數(shù)組存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)元素,其邏輯關(guān)系由存儲(chǔ)位置(即元素在數(shù) 組中的下標(biāo))表示;鏈接存儲(chǔ)結(jié)構(gòu)中一個(gè)數(shù)據(jù)元素對(duì)應(yīng)鏈表中的一個(gè)結(jié)點(diǎn),元素之間的邏輯關(guān)系由結(jié)點(diǎn)中 的指針表示。假設(shè)有如下遺產(chǎn)繼承規(guī)則:丈夫和妻子可以相互繼承遺產(chǎn);子女可以繼承父親或母親的遺產(chǎn);子女間不能相互繼承。則表示該遺產(chǎn)繼承關(guān)系的最合適的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是()。A樹(shù)B圖C線性表D集合【解答】B【分析】將丈夫、妻子和子女分別作為數(shù)據(jù)元素,根據(jù)題意畫岀邏輯結(jié)構(gòu)圖。團(tuán)17還產(chǎn)繼
4、承邏輯結(jié)構(gòu)圖算法指的是()。A對(duì)特定問(wèn)題求解步驟的一種描述,是指令的有限序列。B計(jì)算機(jī)程序C解決問(wèn)題的計(jì)算方法 D數(shù)據(jù)處理【解答】A【分析】計(jì)算機(jī)程序是對(duì)算法的具體實(shí)現(xiàn);簡(jiǎn)單地說(shuō),算法是解決問(wèn)題的方法;數(shù)據(jù)處理是通過(guò)算法完成 的。所以,只有A是算法的準(zhǔn)確定義。下面()不是算法所必須具備的特性。A有窮性B確切性C高效性D可行性【解答】C【分析】高效性是好算法應(yīng)具備的特性。算法分析的目的是(),算法分析的兩個(gè)主要方面是()。A找岀數(shù)據(jù)結(jié)構(gòu)的合理性 B研究算法中輸入和輸岀的關(guān)系C分析算法的效率以求改進(jìn) D分析算法的易讀性和文檔性E空間性能和時(shí)間性能 F正確性和簡(jiǎn)明性G可讀性和文檔性H數(shù)據(jù)復(fù)雜性和程序
5、復(fù)雜性【解答】C, E3.判斷題 算法的時(shí)間復(fù)雜度都要通過(guò)算法中的基本語(yǔ)句的執(zhí)行次數(shù)來(lái)確定?!窘獯稹垮e(cuò)。時(shí)間復(fù)雜度要通過(guò)算法中基本語(yǔ)句執(zhí)行次數(shù)的數(shù)量級(jí)來(lái)確定。每種數(shù)據(jù)結(jié)構(gòu)都具備三個(gè)基本操作:插入、刪除和查找?!窘獯稹垮e(cuò)。如數(shù)組就沒(méi)有插入和刪除操作。此題注意是每種數(shù)據(jù)結(jié)構(gòu)。所謂數(shù)據(jù)的邏輯結(jié)構(gòu)指的是數(shù)據(jù)之間的邏輯關(guān)系。【解答】錯(cuò)。是數(shù)據(jù)之間的邏輯關(guān)系的整體。 邏輯結(jié)構(gòu)與數(shù)據(jù)元素本身的內(nèi)容和形式無(wú)關(guān)?!窘獯稹繉?duì)。因此邏輯結(jié)構(gòu)是數(shù)據(jù)組織的主要方面。基于某種邏輯結(jié)構(gòu)之上的基本操作,其實(shí)現(xiàn)是唯一的?!窘獯稹垮e(cuò)。基本操作的實(shí)現(xiàn)是基于某種存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)的,因而不是唯一的4.分析以下各程序段,并用大0記號(hào)表示其執(zhí)
6、行時(shí)間 1=1; while (i<n-l) i+;(8)while (i+j<=n) if (i>i)j+.else(5) for (i=l; 1<=11, i+) far (j-1; j<,廿+) for (k<j; k+)dokMc+1 嘩 i+; while (i<=n) y=0,while (y+lJ*Cy+l)<=n)【解答】 基本語(yǔ)句是k=k+1O*i,共執(zhí)行了 n-2次,所以T(n)=O(n)?;菊Z(yǔ)句是k=k+1O*i,共執(zhí)行了 n次,所以T(n)=O(n)。分析條件語(yǔ)句,每循環(huán)一次,i+j整體加1,共循環(huán)n次,所以T(n)=O
7、(n)設(shè)循環(huán)體共執(zhí)行T(n)次,每循環(huán)一次,循環(huán)變量y加1,最終T(n)=y,即:仃(n)+1)2 <n,所以 T(n)=O(n1/2)??Мa(chǎn)孔(詢x+是基本語(yǔ)句,所以-5設(shè)有數(shù)據(jù)結(jié)構(gòu)(D, R),其中D=1,2, 3, 4, 5, 6,R=(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)。試畫出其邏輯結(jié)構(gòu)圖并指出屬于何種結(jié)構(gòu)【解答】其邏輯結(jié)構(gòu)圖如圖1-3所示,它是一種圖結(jié)構(gòu)。gll-3邏揖錨構(gòu)圖6. 為整數(shù)定義一個(gè)抽象數(shù)據(jù)類型,包含整數(shù)的常見(jiàn)運(yùn)算,每個(gè)運(yùn)算對(duì)應(yīng)一個(gè)基本操作,每個(gè)基本操作的接口需定義前置條件、輸入、功能、輸岀和后置條件?!窘獯?/p>
8、】整數(shù)的抽象數(shù)據(jù)類型定義如下:ADT integerData整數(shù)a:可以是正整數(shù)(1,2, 3,)、負(fù)整數(shù)(-1,-2,-3,)和零OperationConstructor前置條件:整數(shù)a不存在輸入:一個(gè)整數(shù) b 功能:構(gòu)造一個(gè)與輸入值相同的整數(shù) 輸出:無(wú)后置條件:整數(shù) a 具有輸入的值Set前置條件:存在一個(gè)整數(shù) a 輸入:一個(gè)整數(shù) b功能:修改整數(shù) a 的值,使之與輸入的整數(shù)值相同 輸出:無(wú)后置條件:整數(shù) a 的值發(fā)生改變Add前置條件:存在一個(gè)整數(shù) a 輸入:一個(gè)整數(shù) b 功能:將整數(shù) a 與輸入的整數(shù) b 相加 輸出:相加后的結(jié)果后置條件:整數(shù) a 的值發(fā)生改變Sub前置條件:存在一個(gè)
9、整數(shù) a 輸入:一個(gè)整數(shù) b 功能:將整數(shù) a 與輸入的整數(shù) b 相減 輸出:相減的結(jié)果后置條件:整數(shù) a 的值發(fā)生改變Multi前置條件:存在一個(gè)整數(shù) a 輸入:一個(gè)整數(shù) b 功能:將整數(shù) a 與輸入的整數(shù) b 相乘 輸出:相乘的結(jié)果后置條件:整數(shù) a 的值發(fā)生改變Div 前置條件:存在一個(gè)整數(shù) a 輸入:一個(gè)整數(shù) b 功能:將整數(shù) a 與輸入的整數(shù) b 相除 輸出:若整數(shù) b 為零,則拋出除零異常,否則輸出相除的結(jié)果 后置條件:整數(shù) a 的值發(fā)生改變Mod前置條件:存在一個(gè)整數(shù) a 輸入:一個(gè)整數(shù) b 功能:求當(dāng)前整數(shù)與輸入整數(shù)的模,即正的余數(shù) 輸出:若整數(shù) b 為零,則拋出除零異常,否則
10、輸出取模的結(jié)果 后置條件:整數(shù) a 的值發(fā)生改變Equal前置條件:存在一個(gè)整數(shù) a輸入:一個(gè)整數(shù)b功能:判斷整數(shù)a與輸入的整數(shù)b是否相等 輸岀:若相等返回1,否則返回0后置條件:整數(shù)a的值不發(fā)生改變endADT7. 求多項(xiàng)式A(x)的算法可根據(jù)下列兩個(gè)公式之一來(lái)設(shè)計(jì): A(x)=anxn+an-1xn- 1+a1x+a0 A(x)=(anx+an - 1)x+ +a1)x)+a0根據(jù)算法的時(shí)間復(fù)雜度分析比較這兩種算法的優(yōu)劣?!窘獯稹康诙N算法的時(shí)間性能要好些。第一種算法需執(zhí)行大量的乘法運(yùn)算,而第二種算法進(jìn)行了優(yōu)化, 減少了不必要的乘法運(yùn)算。8. 算法設(shè)計(jì)(要求:算法用偽代碼和C+描述,并分析
11、最壞情況下的時(shí)間復(fù)雜度)對(duì)一個(gè)整型數(shù)組An設(shè)計(jì)一個(gè)排序算法。【解答】下面是簡(jiǎn)單選擇排序算法的偽代碼描述。建久對(duì)II個(gè)記錄進(jìn)行趟簡(jiǎn)單選擇排序:y 14在無(wú)序區(qū)i> n-1中選取最小記錄,設(shè)其下標(biāo)為迥城; 1.2將最小記錄與第1個(gè)記錄交換;下面是簡(jiǎn)單選擇排序算法的 C+描述。簡(jiǎn)單選擇排序算法Sei比詣口n void Selects口mtn)(for Ci=0,i+)聞船T記錄講行片1趟簡(jiǎn)單選揮排序(indesH;for (j=i+ln j<n; j+)曲E無(wú)序區(qū)中選取最小記錄if (ij <rmdex|) indej滬if (indenM) ririndex; J哎換無(wú)素)n-2
12、 m-1分析算法,有兩層嵌套的for循環(huán),所以,-,-'11找岀整型數(shù)組An中元素的最大值和次最大值。【解答】算法的偽代碼描述如下:將前兩亍元素進(jìn)行比糕 較大者啟到max中,較小者放到nniax中;" 2從第3個(gè)元素開(kāi)皓直到最后一個(gè)元素依歡屜元素州小執(zhí)行下列操作: 2.1如果血】財(cái)趣,則擁i為最犬值,原來(lái)的最大值為次最大值 2.2否則,如果Apnma祐則最大值不變,At為袂最大值;3.輸出最大值max,次最大值nmaxj算法的C+描述如下:最大值和次最大值算法P/laXNextIVlax |void Max_NextMax (int A , int n, int &m
13、axP int & nmax)( if (AO>=A1) maA0Fnmax=A 1 ;)else ma=A 1 ; ninaAfO;)for (i=2t i<n; i+)if (Ai>=max)(nma=max;mas=Ai;else if (Ai>nmax) nmaAf i Rcout«"K大值rfc最大值"«nmaz«endl, 分析算法,只有一層循環(huán),共執(zhí)行 n-2次,所以,T(n)=O(n)學(xué)習(xí)自測(cè)及答案1 順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn)是(),鏈接存儲(chǔ)結(jié)構(gòu)的特點(diǎn)是()。【解答】用元素在存儲(chǔ)器中的相對(duì)位置來(lái)表示數(shù)據(jù)
14、元素之間的邏輯關(guān)系,用指示元素存儲(chǔ)地址的指針表示 數(shù)據(jù)元素之間的邏輯關(guān)系。2. 算法在發(fā)生非法操作時(shí)可以作岀處理的特性稱為()?!窘獯稹拷研?. 常見(jiàn)的算法時(shí)間復(fù)雜度用大O記號(hào)表示為:常數(shù)階()、對(duì)數(shù)階()、線性階()、平方階()和指數(shù)階()【解答】O (1),O (Iog2n) ,O (n),O (n2),O (2n)4將下列函數(shù)按它們?cè)趎時(shí)的無(wú)窮大階數(shù),從小到大排列。n, n-n3+7n5, nlogn, 2n/2, n3, Iog2n, n1/2+log2n, (3/2)n, n!, n2+log2n【解答】Iog2n, n1/2+Iog2n, n, nlog2n, n2+log2n,
15、 n3, n-n3+7n5, 2n/2, (3/2)n, n!5試描述數(shù)據(jù)結(jié)構(gòu)和抽象數(shù)據(jù)類型的概念與程序設(shè)計(jì)語(yǔ)言中數(shù)據(jù)類型概念的區(qū)別?!窘獯稹繑?shù)據(jù)結(jié)構(gòu)是指相互之間存在一定關(guān)系的數(shù)據(jù)元素的集合。而抽象數(shù)據(jù)類型是指一個(gè)數(shù)據(jù)結(jié)構(gòu)以及 定義在該結(jié)構(gòu)上的一組操作。程序設(shè)計(jì)語(yǔ)言中的數(shù)據(jù)類型是一個(gè)值的集合和定義在這個(gè)值集上一組操作的 總稱。抽象數(shù)據(jù)類型可以看成是對(duì)數(shù)據(jù)類型的一種抽象。6.對(duì)下列用二元組表示的數(shù)據(jù)結(jié)構(gòu),試分別畫岀對(duì)應(yīng)的邏輯結(jié)構(gòu)圖,并指岀屬于何種結(jié)構(gòu)。 A=(D , R), 其中 D=a1, a2, a3, a4, R= B=(D ,R),其中D=a, b,c, d, e, f,R=, C=(
16、D, R),其中D=a, b, c, d, e,f,R=, D=(D ,R),其中D=1,2,3, 4, 5, 6,R=(1,2), (1,4) ,(2, 3), (2, 4) , (3, 4), (3, 5) , (3, 6) , (4,6)【解答】 屬于集合,其邏輯結(jié)構(gòu)圖如圖1-4(a)所示; 屬于線性結(jié)構(gòu),其邏輯結(jié)構(gòu)圖如圖1-4(b)所示; 屬于樹(shù)結(jié)構(gòu),其邏輯結(jié)構(gòu)圖如圖1-4(c)所示; 屬于圖結(jié)構(gòu),其邏輯結(jié)構(gòu)圖如圖1-4(d)所示。圖Z 第?題對(duì)應(yīng)的邏輯結(jié)構(gòu)圖7.求下列算法的時(shí)間復(fù)雜度。count=0; x=1;while (x x*=2;count+;return count;【解答
17、】0 (log2n)第2章線性表課后習(xí)題講解1.填空在順序表中,等概率情況下,插入和刪除一個(gè)元素平均需移動(dòng)()個(gè)元素,具體移動(dòng)元素的個(gè)數(shù)與 ()和()有關(guān)?!窘獯稹勘黹L(zhǎng)的一半,表長(zhǎng),該元素在表中的位置順序表中第一個(gè)元素的存儲(chǔ)地址是100,每個(gè)元素的長(zhǎng)度為 2,則第5個(gè)元素的存儲(chǔ)地址是()?!窘獯稹?08【分析】第5個(gè)元素的存儲(chǔ)地址=第1個(gè)元素的存儲(chǔ)地址+ (5-1) X 2=108設(shè)單鏈表中指針p指向結(jié)點(diǎn)A,若要?jiǎng)h除A的后繼結(jié)點(diǎn)(假設(shè) 為()?!窘獯稹縫->next=(p->next)->nextA存在后繼結(jié)點(diǎn)),則需修改指針的操作單鏈表中設(shè)置頭結(jié)點(diǎn)的作用是()?!窘獯稹繛榱?/p>
18、運(yùn)算方便【分析】例如在插入和刪除操作時(shí)不必對(duì)表頭的情況進(jìn)行特殊處理。 非空的單循環(huán)鏈表由頭指針head指示,則其尾結(jié)點(diǎn)(由指針【解答】p->next=head【分析】如圖2-8所示。1 nT . |p所指)滿足()。t比ME 在由尾指針rear指示的單循環(huán)鏈表中,在表尾插入一個(gè)結(jié)點(diǎn)s的操作序列是();刪除開(kāi)始結(jié)點(diǎn)的操作序列為()?!窘獯稹?s->next =rear->next; rear->next =s; rear =s; q=rear->next->next; rear->next->next=q->next; delete q;【分
19、析】操作示意圖如圖 2-9所示:©2-9帶尾指針的循環(huán)輕表中插入和刪除操作示意圖一個(gè)具有n個(gè)結(jié)點(diǎn)的單鏈表,在指針p所指結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度為();在給定值為x的結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)的時(shí)間復(fù)雜度為()?!窘獯稹? (1),0 (n)【分析】在p所指結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)只需修改指針,所以時(shí)間復(fù)雜度為0(1);而在給定值為x的結(jié)點(diǎn)后插入一個(gè)新結(jié)點(diǎn)需要先查找值為x的結(jié)點(diǎn),所以時(shí)間復(fù)雜度為0(n)。 可由一個(gè)尾指針唯一確定的鏈表有( )、( )、( )?!窘獯稹垦h(huán)鏈表,循環(huán)雙鏈表,雙鏈表2. 選擇題 線性表的順序存儲(chǔ)結(jié)構(gòu)是一種( )的存儲(chǔ)結(jié)構(gòu),線性表的鏈接存儲(chǔ)結(jié)構(gòu)是一種( )的存
20、儲(chǔ)結(jié)構(gòu)。A 隨機(jī)存取 B 順序存取 C 索引存取 D 散列存取【解答】 A, B 【分析】參見(jiàn) 2.2.1 。 線性表采用鏈接存儲(chǔ)時(shí),其地址( )。A 必須是連續(xù)的 B 部分地址必須是連續(xù)的C 一定是不連續(xù)的 D 連續(xù)與否均可以【解答】 D 【分析】線性表的鏈接存儲(chǔ)是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素,這組存儲(chǔ)單元可以連續(xù),也 可以不連續(xù),甚至可以零散分布在內(nèi)存中任意位置。 單循環(huán)鏈表的主要優(yōu)點(diǎn)是( )。A 不再需要頭指針了B 從表中任一結(jié)點(diǎn)出發(fā)都能掃描到整個(gè)鏈表;C 已知某個(gè)結(jié)點(diǎn)的位置后,能夠容易找到它的直接前趨;D 在進(jìn)行插入、刪除操作時(shí),能更好地保證鏈表不斷開(kāi)?!窘獯稹?B 鏈表不
21、具有的特點(diǎn)是( )。A 可隨機(jī)訪問(wèn)任一元素 B 插入、刪除不需要移動(dòng)元素C 不必事先估計(jì)存儲(chǔ)空間 D 所需空間與線性表長(zhǎng)度成正比【解答】 A 若某線性表中最常用的操作是取第 i 個(gè)元素和找第 i 個(gè)元素的前趨, 則采用( )存儲(chǔ)方法最節(jié)省時(shí)間。A 順序表 B 單鏈表 C 雙鏈表 D 單循環(huán)鏈表【解答】 A【分析】線性表中最常用的操作是取第 i 個(gè)元素,所以,應(yīng)選擇隨機(jī)存取結(jié)構(gòu)即順序表,同時(shí)在順序表中 查找第 i 個(gè)元素的前趨也很方便。單鏈表和單循環(huán)鏈表既不能實(shí)現(xiàn)隨機(jī)存取,查找第 i 個(gè)元素的前趨也不 方便,雙鏈表雖然能快速查找第 i 個(gè)元素的前趨,但不能實(shí)現(xiàn)隨機(jī)存取。 若鏈表中最常用的操作是在
22、最后一個(gè)結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn)和刪除第一個(gè)結(jié)點(diǎn),則采用( )存儲(chǔ)方法 最節(jié)省時(shí)間。A 單鏈表 B 帶頭指針的單循環(huán)鏈表 C 雙鏈表 D 帶尾指針的單循環(huán)鏈表【解答】 D 【分析】在鏈表中的最后一個(gè)結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn)需要知道終端結(jié)點(diǎn)的地址,所以,單鏈表、帶頭指針 的單循環(huán)鏈表、雙鏈表都不合適,考慮在帶尾指針的單循環(huán)鏈表中刪除第一個(gè)結(jié)點(diǎn),其時(shí)間性能是 O(1) , 所以,答案是 D 。 若鏈表中最常用的操作是在最后一個(gè)結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn)和刪除最后一個(gè)結(jié)點(diǎn),則采用( )存儲(chǔ)方 法最節(jié)省運(yùn)算時(shí)間。A 單鏈表 B 循環(huán)雙鏈表 C 單循環(huán)鏈表 D 帶尾指針的單循環(huán)鏈表【解答】 B 【分析】在鏈表中的最后
23、一個(gè)結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn)需要知道終端結(jié)點(diǎn)的地址,所以,單鏈表、單循環(huán)鏈 表都不合適,刪除最后一個(gè)結(jié)點(diǎn)需要知道終端結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)的地址,所以,帶尾指針的單循環(huán)鏈表不合 適,而循環(huán)雙鏈表滿足條件。 在具有 n 個(gè)結(jié)點(diǎn)的有序單鏈表中插入一個(gè)新結(jié)點(diǎn)并仍然有序的時(shí)間復(fù)雜度是( )。A O(1) B O(n) C O(n2) D O(nlog2n)【解答】 B【分析】首先應(yīng)順序查找新結(jié)點(diǎn)在單鏈表中的位置。 對(duì)于 n 個(gè)元素組成的線性表,建立一個(gè)有序單鏈表的時(shí)間復(fù)雜度是( )。A O(1) B O(n) C O(n2) D O(nlog2n)【解答】 C【分析】該算法需要將 n 個(gè)元素依次插入到有序單鏈表中
24、,而插入每個(gè)元素需 O(n) 。 使用雙鏈表存儲(chǔ)線性表,其優(yōu)點(diǎn)是可以( )。A 提高查找速度 B 更方便數(shù)據(jù)的插入和刪除C 節(jié)約存儲(chǔ)空間 D 很快回收存儲(chǔ)空間【解答】 B【分析】在鏈表中一般只能進(jìn)行順序查找,所以,雙鏈表并不能提高查找速度,因?yàn)殡p鏈表中有兩個(gè)指針 域,顯然不能節(jié)約存儲(chǔ)空間,對(duì)于動(dòng)態(tài)存儲(chǔ)分配,回收存儲(chǔ)空間的速度是一樣的。由于雙鏈表具有對(duì)稱性, 所以,其插入和刪除操作更加方便。(11) 在一個(gè)單鏈表中,已知q所指結(jié)點(diǎn)是p所指結(jié)點(diǎn)的直接前驅(qū),若在q和p之間插入s所指結(jié)點(diǎn),則執(zhí)行( )操作。A s->next=p->next; p->next=s; B q->n
25、ext=s; s->next=p;C p->next=s->next; s->next=p; D p->next=s; s->next=q;【解答】 B【分析】注意此題是在 q 和 p 之間插入新結(jié)點(diǎn),所以,不用考慮修改指針的順序。(12) 在循環(huán)雙鏈表的p所指結(jié)點(diǎn)后插入s所指結(jié)點(diǎn)的操作是()。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-
26、>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【分析】在鏈表中,對(duì)指針的修改必須保持線性表的邏輯關(guān)系,否則,將違背線性表的邏輯特征,圖2-10給出備選答案C和D的圖解。(0備選答案C操作示意團(tuán)(第4步指針修改無(wú)法進(jìn)行)(b)備選答案D操住示意團(tuán)U2-10雙梃表插入操作修改捋針操作示意圉3
27、.判斷題線性表的邏輯順序和存儲(chǔ)順序總是一致的?!窘獯稹垮e(cuò)。順序表的邏輯順序和存儲(chǔ)順序一致,鏈表的邏輯順序和存儲(chǔ)順序不一定一致。線性表的順序存儲(chǔ)結(jié)構(gòu)優(yōu)于鏈接存儲(chǔ)結(jié)構(gòu)。【解答】錯(cuò)。兩種存儲(chǔ)結(jié)構(gòu)各有優(yōu)缺點(diǎn)。 設(shè)p,q是指針,若p=q,則*p=*q?!窘獯稹垮e(cuò)。p=q只能表示p和q指向同一起始地址,而所指類型則不一定相同。 線性結(jié)構(gòu)的基本特征是:每個(gè)元素有且僅有一個(gè)直接前驅(qū)和一個(gè)直接后繼?!窘獯稹垮e(cuò)。每個(gè)元素最多只有一個(gè)直接前驅(qū)和一個(gè)直接后繼,第一個(gè)元素沒(méi)有前驅(qū),最后一個(gè)元素沒(méi)有 后繼。 在單鏈表中,要取得某個(gè)元素,只要知道該元素所在結(jié)點(diǎn)的地址即可,因此單鏈表是隨機(jī)存取結(jié)構(gòu) 【解答】錯(cuò)。要找到該結(jié)點(diǎn)的
28、地址,必須從頭指針開(kāi)始查找,所以單鏈表是順序存取結(jié)構(gòu)。4 請(qǐng)說(shuō)明順序表和單鏈表各有何優(yōu)缺點(diǎn),并分析下列情況下,采用何種存儲(chǔ)結(jié)構(gòu)更好些。若線性表的總長(zhǎng)度基本穩(wěn)定,且很少進(jìn)行插入和刪除操作,但要求以最快的速度存取線性表中的元素。如果n個(gè)線性表同時(shí)并存,并且在處理過(guò)程中各表的長(zhǎng)度會(huì)動(dòng)態(tài)發(fā)生變化。描述一個(gè)城市的設(shè)計(jì)和規(guī)劃?!窘獯稹宽樞虮淼膬?yōu)點(diǎn): 無(wú)需為表示表中元素之間的邏輯關(guān)系而增加額外的存儲(chǔ)空間;可以快速地存取表中任一位置的元素(即隨機(jī)存?。?。順序表的缺點(diǎn):插入和刪除操作需移動(dòng)大量元素; 表的容量難以確定; 造成存儲(chǔ)空間的“碎片”。單鏈表的優(yōu)點(diǎn): 不必事先知道線性表的長(zhǎng)度;插入和刪除元素時(shí)只需修改指
29、針,不用移動(dòng)元素。單鏈表的缺點(diǎn): 指針的結(jié)構(gòu)性開(kāi)銷; 存取表中任意元素不方便,只能進(jìn)行順序存取。應(yīng)選用順序存儲(chǔ)結(jié)構(gòu)。因?yàn)轫樞虮硎请S機(jī)存取結(jié)構(gòu),單鏈表是順序存取結(jié)構(gòu)。本題很少進(jìn)行插入和刪除 操作,所以空間變化不大,且需要快速存取,所以應(yīng)選用順序存儲(chǔ)結(jié)構(gòu)。應(yīng)選用鏈接存儲(chǔ)結(jié)構(gòu)。鏈表容易實(shí)現(xiàn)表容量的擴(kuò)充,適合表的長(zhǎng)度動(dòng)態(tài)發(fā)生變化。 應(yīng)選用鏈接存儲(chǔ)結(jié)構(gòu)。因?yàn)橐粋€(gè)城市的設(shè)計(jì)和規(guī)劃涉及活動(dòng)很多,需要經(jīng)常修改、擴(kuò)充和刪除各種信息,才能適應(yīng)不斷發(fā)展的需要。而順序表的插入、刪除的效率低,故不合適。5 算法設(shè)計(jì) 設(shè)計(jì)一個(gè)時(shí)間復(fù)雜度為O (n)的算法,實(shí)現(xiàn)將數(shù)組 An中所有元素循環(huán)右移k個(gè)位置 【解答】算法思想請(qǐng)參見(jiàn)
30、主教材第一章思想火花。下面給岀具體算法。循環(huán)右移算法Convers亡void Converse (int A , int nt int k)(Reverse O.k-1),Reverse (A, k, n-1);Reverse (A, 0, n-J);void Reverse(int A , int from, int to)! 鵬數(shù)組 A 中元素從 fiom 到 8 逆置 (for (1=0, i< (to-from+l)J2; i+)A frnm+i *Atoi;膠換元素分析算法,第一次調(diào)用Reverse函數(shù)的時(shí)間復(fù)雜度為 O(k),第二次調(diào)用Reverse函數(shù)的時(shí)間復(fù)雜度為O(n-
31、k),第三次調(diào)用Reverse函數(shù)的時(shí)間復(fù)雜度為O(n),所以,總的時(shí)間復(fù)雜度為 O(n)。 已知數(shù)組An中的元素為整型,設(shè)計(jì)算法將其調(diào)整為左右兩部分,左邊所有元素為奇數(shù),右邊所有元 素為偶數(shù),并要求算法的時(shí)間復(fù)雜度為O(n)?!窘獯稹繌臄?shù)組的兩端向中間比較,設(shè)置兩個(gè)變量i和j,初始時(shí)i=0, j=n-1 ,若Ai為偶數(shù)并且Aj為奇數(shù),則將Ai與Aj交換。具體算法如下:敎俎奇儒調(diào)蔓算法Adjustvoid Adjust (int A t n)i=0; j=nUwhile (i<j)(while (Ai2!-0) i+;while (Aj % 2=0) j- if (i<j)直因)分
32、析算法,兩層循環(huán)將數(shù)組掃描一遍,所以,時(shí)間復(fù)雜度為O(n)。試編寫在無(wú)頭結(jié)點(diǎn)的單鏈表上實(shí)現(xiàn)線性表的插入操作的算法,并和帶頭結(jié)點(diǎn)的單鏈表上的插入操作的實(shí)現(xiàn)進(jìn)行比較?!窘獯稹繀⒁?jiàn)2.2.3。試分別以順序表和單鏈表作存儲(chǔ)結(jié)構(gòu),各寫一實(shí)現(xiàn)線性表就地逆置的算法?!窘獯稹宽樞虮淼哪嬷?,即是將對(duì)稱元素交換,設(shè)順序表的長(zhǎng)度為length,則將表中第i個(gè)元素與第length-i-1個(gè)元素相交換。具體算法如下:丿順舟表逆置算法 RevergE template <class T> void Reversed data, mt length) for (i=0; i<=length/2, i+)t
33、anpdatap; datai=datalength-i-1; datalength-i-1 =tanp、*)單鏈表的逆置請(qǐng)參見(jiàn) 224算法2-4和算法2-6。假設(shè)在長(zhǎng)度大于1的循環(huán)鏈表中,即無(wú)頭結(jié)點(diǎn)也無(wú)頭指針,s為指向鏈表中某個(gè)結(jié)點(diǎn)的指針,試編寫算法刪除結(jié)點(diǎn)s的前趨結(jié)點(diǎn)。【解答】利用單循環(huán)鏈表的特點(diǎn),通過(guò)指針s可找到其前驅(qū)結(jié)點(diǎn)r以及r的前驅(qū)結(jié)點(diǎn)p,然后將結(jié)點(diǎn)r刪除,如圖2-11所示,具體算法如下:輔環(huán)槌衷間除算法Deltemplate <class T>void Del(Node<T> *s)(p=5,"工作指針p初貽化> Wife s的前弓臨點(diǎn)的前馳
34、結(jié)點(diǎn),用P指示while (p->next->next!s)p=p_neKt,件p->ncxt;臉丸f的前馳結(jié)點(diǎn)* r的前號(hào)結(jié)直卩“ >nest;"刪除i所指結(jié)點(diǎn)delete r;12-11刪除結(jié)點(diǎn)s的前馳踣點(diǎn)操作示意圖 已知一單鏈表中的數(shù)據(jù)元素含有三類字符:字母、數(shù)字和其他字符。試編寫算法,構(gòu)造三個(gè)循環(huán)鏈表,使每個(gè)循環(huán)鏈表中只含同一類字符?!窘獯稹吭趩捂湵?A中依次取元素,若取岀的元素是字母,把它插入到字母鏈表B中,若取岀的元素是數(shù)字,則把它插入到數(shù)字鏈表 D中,直到鏈表的尾部,這樣表 B,D, A中分別存放字母、數(shù)字和其他字符。 具體算法如下:?jiǎn)苇I表柝分算
35、法Adjusttemplate <class T>void Adjust (Node<T> *Ah Node<int> *D± Node<char> *B)D=new Node<int> D->next=D;"創(chuàng)逹空循環(huán)捱表D -存放數(shù)孚B=new Node<char> B- >next=B;"刨建空循環(huán)鏈表B存矽字符p=A, q=p>nezt,疔工作指針q初始化while (q)(if ('A'<=q->data)&& (q-&g
36、t;data>-Z*)i| | ('a' <=q->data) &&(q->data>z*) p->next=q->next; q->neKt=B->nest;B->neKt=qP."采用頭插法插在循環(huán)璉表B的頭結(jié)點(diǎn)的后面else if ('0,<=q>dala)&&(q*>data>-'9')(曠 >neztq- >nextp.q->neKt=D->next;H采用頭輛法播在循環(huán)靜就D的頭結(jié)點(diǎn)的后面els
37、e p=q;q=p->net;p->neKt=A; R=A; 瞬璉表A構(gòu)造為循環(huán)鏈表,為除字陽(yáng)和數(shù)字的耳他宇符) 設(shè)單鏈表以非遞減有序排列,設(shè)計(jì)算法實(shí)現(xiàn)在單鏈表中刪去值相同的多余結(jié)點(diǎn)?!窘獯稹繌念^到尾掃描單鏈表,若當(dāng)前結(jié)點(diǎn)的元素值與后繼結(jié)點(diǎn)的元素值不相等,則指針后移;否則刪除 該后繼結(jié)點(diǎn)。具體算法如下:?jiǎn)位挶韯h除相同值算法Purgevoid Purge(Nade<T> *firsC(pfirst->ncrt;while (p->nest) if (p->data= =p->next-> data) q=p->next;p- >n
38、ezt=q->nezt; ddele q;else pp->nsjt;判斷帶頭結(jié)點(diǎn)的雙循環(huán)鏈表是否對(duì)稱?!窘獯稹吭O(shè)工作指針p和q分別指向循環(huán)雙鏈表的開(kāi)始結(jié)點(diǎn)和終端結(jié)點(diǎn),若結(jié)點(diǎn)p和結(jié)點(diǎn)q的數(shù)據(jù)域相等,則工作指針p后移,工作指針q前移,直到指針p和指針q指向同一結(jié)點(diǎn)(循環(huán)雙鏈表中結(jié)點(diǎn)個(gè)數(shù)為奇數(shù)) 或結(jié)點(diǎn)q成為結(jié)點(diǎn)p的前驅(qū)(循環(huán)雙鏈表中結(jié)點(diǎn)個(gè)數(shù)為偶數(shù))。如圖 2-12所示。E2-12判斷循環(huán)敦龍表對(duì)稱的操作示意圖判斷眾讎表對(duì)稱算法Equaltemplate <class T>stnxl DulNode(T data,DuINode<T> *piior, *next
39、;);template <class T> bool Equal (DulNode<T> *firsC (p=fir st-n ext, q=first>prior; while (pq && p>priorq) if (p->data= =q- >data) p=p->next,FJ工作指針p后移q=q->prior;H工作指針q前移 else return 0,return 1,)學(xué)習(xí)自測(cè)及答案1.已知一維數(shù)組A采用順序存儲(chǔ)結(jié)構(gòu),每個(gè)元素占用4個(gè)存儲(chǔ)單元,第9個(gè)元素的地址為144,則第一個(gè)元素的地址是()。A 10
40、8 B 180 C 176 D 112【解答】D2在長(zhǎng)度為n的線性表中查找值為x的數(shù)據(jù)元素的時(shí)間復(fù)雜度為:()。A 0(0) B 0(1) C O(n) D O(n2)【解答】C3.在一個(gè)長(zhǎng)度為n的順序表的第i (1<i <n+1)個(gè)元素之前插入一個(gè)元素,需向后移動(dòng)()個(gè)元素,刪除第i (1<i <n)個(gè)元素時(shí),需向前移動(dòng)()個(gè)元素?!窘獯稹縩-i+1 ,n-i4 在單鏈表中,除了頭結(jié)點(diǎn)以外,任一結(jié)點(diǎn)的存儲(chǔ)位置由()指示?!窘獯稹科淝摆吔Y(jié)點(diǎn)的指針域5當(dāng)線性表采用順序存儲(chǔ)結(jié)構(gòu)時(shí),其主要特點(diǎn)是()?!窘獯稹窟壿嫿Y(jié)構(gòu)中相鄰的結(jié)點(diǎn)在存儲(chǔ)結(jié)構(gòu)中仍相鄰6在雙鏈表中,每個(gè)結(jié)點(diǎn)設(shè)置了兩
41、個(gè)指針域,其中一個(gè)指向()結(jié)點(diǎn),另一個(gè)指向()結(jié)點(diǎn)?!窘獯稹壳膀?qū),后繼7設(shè)A是一個(gè)線性表(a1, a2,,an ),采用順序存儲(chǔ)結(jié)構(gòu),則在等概率的前提下,平均每插入一個(gè)元素需要移動(dòng)的元素個(gè)數(shù)為多少?若元素插在ai與ai+1之間(1<i <n)的概率為",則平均每插入一個(gè)元素所要移動(dòng)的元素個(gè)數(shù)又是多少? 【解答】8線性表存放在整型數(shù)組 Aarrsize的前elenum個(gè)單元中,且遞增有序。編寫算法,將元素 x插入到線 性表的適當(dāng)位置上,以保持線性表的有序性,并且分析算法的時(shí)間復(fù)雜度?!窘獯稹勘绢}是在一個(gè)遞增有序表中插入元素 x,基本思路是從有序表的尾部開(kāi)始依次取元素與x比較
42、,若大于x,此元素后移一位,再取它前面一個(gè)元素重復(fù)上述步驟;否則,找到插入位置,將x插入。具體算法如下:有序咂序表插入算法Insert const int arrsize=100p class S eqList ( private:int dataarrsize ? int denum,public:Insert (ini x),void SeqList: Insert Cint z)if (elenum= irsize) throw "overflow", else (i°:elenum-' 1;while (i>=l x<datai)dat
43、ai+l=datai,datai+l=x;9.已知單鏈表中各結(jié)點(diǎn)的元素值為整型且遞增有序,設(shè)計(jì)算法刪除鏈表中所有大于 mink且小于maxk的所有元素,并釋放被刪結(jié)點(diǎn)的存儲(chǔ)空間?!窘獯稹恳?yàn)槭窃谟行騿捂湵砩系牟僮鳎?,要充分利用其有序性。在單鏈表中查找第一個(gè)大于mink的結(jié)點(diǎn)和第一個(gè)小于maxk的結(jié)點(diǎn),再將二者間的所有結(jié)點(diǎn)刪除。有序犍表刪除算法DeleteBetwe&ntemplate <class T>void DeleteB etween (Mode<T> * first, int mink, mt mank) (p=fir5t?while (p->
44、nezt && p->neKt->data<=mink) p=p >nexirif (p->next)( q=p->neKt± while (q-> data<maxk) u=q->nezt;p->next=q- >nextP delete 山qp10.設(shè)單循環(huán)鏈表L1,對(duì)其遍歷的結(jié)果是:x1, x2, x3,xn -1, xn。請(qǐng)將該循環(huán)鏈表拆成兩個(gè)單循環(huán) 鏈表L1和L2,使得L1中含有原L1表中序號(hào)為奇數(shù)的結(jié)點(diǎn)且遍歷結(jié)果為:x1, x3,;L2中含有原L1表 中序號(hào)為偶數(shù)的結(jié)點(diǎn)且遍歷結(jié)果為:,x4,
45、 x2 ?!窘獯稹克惴ㄈ缦拢貉h(huán)鏈表柝芬算DePatch template <class T> Node<T> *DePatch (Node<T> *L1)(L2=n'ew Mode<T > L2->next=L2p(l=Ll->nextf Ll->next=Ll, p=Ll; i=l; while (q!=Ll) if (i % 2=1)(川巫用尾插沬 p->nexl>qP p=q, p->neit=Ll, q=q->next, i+;) else L2->next=q; qTi;i+,
46、)第 3 章 特殊線性表?xiàng)?、?duì)列和串課后習(xí)題講解1. 填空 設(shè)有一個(gè)空棧,棧頂指針為1000H,現(xiàn)有輸入序列為 1、2、3、4、5,經(jīng)過(guò)push , push , pop, push,pop, push, push 后,輸出序列是( ),棧頂指針為( )?!窘獯稹?23, 1003H 棧通常采用的兩種存儲(chǔ)結(jié)構(gòu)是( );其判定??盏臈l件分別是( ),判定棧滿的條件分別是( )?!窘獯稹宽樞虼鎯?chǔ)結(jié)構(gòu)和鏈接存儲(chǔ)結(jié)構(gòu)(或順序棧和鏈棧),棧頂指針top= -1和top=NULL,棧頂指針top等于數(shù)組的長(zhǎng)度和內(nèi)存無(wú)可用空間3()可作為實(shí)現(xiàn)遞歸函數(shù)調(diào)用的一種數(shù)據(jù)結(jié)構(gòu)。【解答】棧【分析】遞歸函數(shù)的調(diào)用和返回
47、正好符合后進(jìn)先出性。 表達(dá)式 a*(b+c)-d 的后綴表達(dá)式是( )。【解答】 abc+*d- 【分析】將中綴表達(dá)式變?yōu)楹缶Y表達(dá)式有一個(gè)技巧:將操作數(shù)依次寫下來(lái),再將算符插在它的兩個(gè)操作數(shù)的后面。 棧和隊(duì)列是兩種特殊的線性表,棧的操作特性是( ),隊(duì)列的操作特性是( ),棧和隊(duì)列的主要區(qū)別 在于( )?!窘獯稹亢筮M(jìn)先出,先進(jìn)先出,對(duì)插入和刪除操作限定的位置不同 循環(huán)隊(duì)列的引入是為了克服( )。【解答】假溢出 數(shù)組 Qn 用來(lái)表示一個(gè)循環(huán)隊(duì)列, front 為隊(duì)頭元素的前一個(gè)位置, rear 為隊(duì)尾元素的位置,計(jì)算隊(duì) 列中元素個(gè)數(shù)的公式為( )?!窘獯稹? rear-front+n ) % n
48、【分析】也可以是(rear-front ) % n,但rear-front的結(jié)果可能是負(fù)整數(shù),而對(duì)一個(gè)負(fù)整數(shù)求模,其結(jié)果在不同的編譯器環(huán)境下可能會(huì)有所不同。用循環(huán)鏈表表示的隊(duì)列長(zhǎng)度為n,若只設(shè)頭指針,則出隊(duì)和入隊(duì)的時(shí)間復(fù)雜度分別是()和()?!窘獯稹?,0 (n)【分析】在帶頭指針的循環(huán)鏈表中,出隊(duì)即是刪除開(kāi)始結(jié)點(diǎn),這只需修改相應(yīng)指針;入隊(duì)即是在終端結(jié)點(diǎn) 的后面插入一個(gè)結(jié)點(diǎn),這需要從頭指針開(kāi)始查找終端結(jié)點(diǎn)的地址。 串是一種特殊的線性表,其特殊性體現(xiàn)在( )?!窘獯稹繑?shù)據(jù)元素的類型是一個(gè)字符 兩個(gè)串相等的充分必要條件是( )。【解答】長(zhǎng)度相同且對(duì)應(yīng)位置的字符相等【分析】例如"abc&q
49、uot;工"abc " , "abc"工"bca"。2. 選擇題若一個(gè)棧的輸入序列是 1, 2, 3,,n,輸出序列的第一個(gè)元素是 n,則第i個(gè)輸出元素是()。A 不確定 B n-i C n-i-1 D n-i+1【解答】 D【分析】此時(shí),輸出序列一定是輸入序列的逆序。設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素 el、e2、e3、e4、e5、e6依次通過(guò)棧S, 個(gè)元素出棧后即進(jìn) 入隊(duì)列Q,若6個(gè)元素出隊(duì)的順序是 e2、e4、e3、e6、e5、el,則棧S的容量至少應(yīng)該是()。A 6B 4C 3D 2【解答】 C【分析】由于隊(duì)列具有先進(jìn)先出性,
50、所以,此題中隊(duì)列形同虛設(shè),即出棧的順序也是e2、 e4、 e3、 e6、 e5、e1 。 一個(gè)棧的入棧序列是 1, 2, 3, 4, 5,則棧的不可能的輸出序列是()。A 54321 B 45321 C 43512 D 12345【解答】 C【分析】此題有一個(gè)技巧:在輸出序列中任意元素后面不能出現(xiàn)比該元素小并且是升序(指的是元素的序 號(hào))的兩個(gè)元素。 設(shè)計(jì)一個(gè)判別表達(dá)式中左右括號(hào)是否配對(duì)的算法,采用()數(shù)據(jù)結(jié)構(gòu)最佳A 順序表 B 棧 C 隊(duì)列 D 鏈表【解答】 B【分析】每個(gè)右括號(hào)與它前面的最后一個(gè)沒(méi)有匹配的左括號(hào)配對(duì),因此具有后進(jìn)先出性。 在解決計(jì)算機(jī)主機(jī)與打印機(jī)之間速度不匹配問(wèn)題時(shí)通常設(shè)置
51、一個(gè)打印緩沖區(qū),該緩沖區(qū)應(yīng)該是一個(gè) ( )結(jié)構(gòu)。A棧B隊(duì)列C數(shù)組D線性表【解答】 B【分析】先進(jìn)入打印緩沖區(qū)的文件先被打印,因此具有先進(jìn)先出性。 一個(gè)隊(duì)列的入隊(duì)順序是 1, 2, 3, 4,則隊(duì)列的輸出順序是( )。A 4321 B 1234 C 1432 D 3241【解答】 B【分析】隊(duì)列的入隊(duì)順序和出隊(duì)順序總是一致的。 棧和隊(duì)列的主要區(qū)別在于( )。A 它們的邏輯結(jié)構(gòu)不一樣 B 它們的存儲(chǔ)結(jié)構(gòu)不一樣C所包含的運(yùn)算不一樣 D插入、刪除運(yùn)算的限定不一樣【解答】D【分析】棧和隊(duì)列的邏輯結(jié)構(gòu)都是線性的,都有順序存儲(chǔ)和鏈接存儲(chǔ),有可能包含的運(yùn)算不一樣,但不是主要區(qū)別,任何數(shù)據(jù)結(jié)構(gòu)在針對(duì)具體問(wèn)題時(shí)包
52、含的運(yùn)算都可能不同。 設(shè)數(shù)組Sn作為兩個(gè)棧S1和S2的存儲(chǔ)空間,對(duì)任何一個(gè)棧只有當(dāng)Sn全滿時(shí)才不能進(jìn)行進(jìn)棧操作。為這兩個(gè)棧分配空間的最佳方案是()。A S1的棧底位置為0, S2的棧底位置為n-1B S1的棧底位置為0, S2的棧底位置為n/2C S1的棧底位置為0,S2的棧底位置為nD S1的棧底位置為0,S2的棧底位置為1【解答】A【分析】?jī)蓷9蚕砜臻g首先兩個(gè)棧是相向增長(zhǎng)的,棧底應(yīng)該分別指向兩個(gè)棧中的第一個(gè)元素的位置,并注 意C+中的數(shù)組下標(biāo)是從0開(kāi)始的。 設(shè)有兩個(gè)串p和q,求q在p中首次出現(xiàn)的位置的運(yùn)算稱作()。A連接B模式匹配C求子串D求串長(zhǎng)【解答】B3. 判斷題 有n個(gè)元素依次進(jìn)棧,
53、則出棧序列有(n-1)/2種。)!【解答】錯(cuò)。應(yīng)該有 1 '種。 ??梢宰鳛閷?shí)現(xiàn)過(guò)程調(diào)用的一種數(shù)據(jù)結(jié)構(gòu)?!窘獯稹繉?duì)。只要操作滿足后進(jìn)先岀性,都可以采用棧作為輔助數(shù)據(jù)結(jié)構(gòu)。 在棧滿的情況下不能做進(jìn)棧操作,否則將產(chǎn)生“上溢”?!窘獯稹繉?duì)。 在循環(huán)隊(duì)列中,front指向隊(duì)頭元素的前一個(gè)位置,rear指向隊(duì)尾元素的位置,則隊(duì)滿的條件是front=rear 。【解答】錯(cuò)。這是隊(duì)空的判定條件,在循環(huán)隊(duì)列中要將隊(duì)空和隊(duì)滿的判定條件區(qū)別開(kāi)??沾c空格串是相同的?!窘獯稹垮e(cuò)??沾拈L(zhǎng)度為零,而空格串的長(zhǎng)度不為0,其長(zhǎng)度是串中空格的個(gè)數(shù)。4. 設(shè)有一個(gè)棧,元素進(jìn)棧的次序?yàn)锳,B,C, D,E,能否得到如下
54、岀棧序列,若能,請(qǐng)寫岀操作序列,若不能,請(qǐng)說(shuō)明原因。 C,E,A,B,D C,B,A,D, E【解答】不能,因?yàn)樵?C、E出棧的情況下,A一定在棧中,而且在 B的下面,不可能先于 B出棧???以,設(shè)I為進(jìn)棧操作,0為入棧操作,則其操作序列為1110001010。5. 舉例說(shuō)明順序隊(duì)列的“假溢岀”現(xiàn)象。【解答】假設(shè)有一個(gè)順序隊(duì)列,如圖3-6所示,隊(duì)尾指針rear=4,隊(duì)頭指針front=1,如果再有元素入隊(duì),就會(huì)產(chǎn)生“上溢”,此時(shí)的“上溢”又稱為“假溢出”,因?yàn)殛?duì)列并不是真的溢出了,存儲(chǔ)隊(duì)列的數(shù)組中 還有2個(gè)存儲(chǔ)單元空閑,其下標(biāo)分別為0和1。6.在操作序列push(1)、push(2)、pop、
55、push(5)、push、pop、push(6)之后,棧頂元素和棧底元素分別是什么? ( push(k)表示整數(shù)k入棧,pop表示棧頂元素出棧。)【解答】棧頂元素為6,棧底元素為1。其執(zhí)行過(guò)程如圖 3-7所示。入棧出桟(a) push Cl) j push Q)(b) pop j push(5) j push C7)團(tuán)3T棧的執(zhí)行過(guò)程示意團(tuán)(c) pop 9 push (67.在操作序列 EnQueue(1)、EnQueue(3)、DeQueue、EnQueue(5)、EnQueue(7)、DeQueue EnQueue(9)之后,隊(duì)頭元素和隊(duì)尾元素分別是什么?(EnQueue(k)表示整數(shù)k
56、入隊(duì),DeQueue表示隊(duì)頭元素出隊(duì))?!窘獯稹筷?duì)頭元素為5,隊(duì)尾元素為9。其執(zhí)行過(guò)程如圖 3-8所示。出臥入趴1 335 75 7 9(a) EnQueue Cl) jEuQtcue (3(b)jEnQueue C5) jEnQtieue (7(c) DeQueue jEnQueue (9圖!3Y隊(duì)列的執(zhí)行過(guò)程示意圖&空串和空格串有何區(qū)別?串中的空格符有何意義?空串在串處理中有何作用?【解答】不含任何字符的串稱為空串,其長(zhǎng)度為零。僅含空格的串稱為空格串,它的長(zhǎng)度為串中空格符的 個(gè)數(shù)。串中的空格符可用來(lái)分隔一般的字符,便于人們識(shí)別和閱讀,但計(jì)算串長(zhǎng)時(shí)應(yīng)包括這些空格符。空 串在串處理中可作為任意串的子串。9.算法設(shè)計(jì) 假設(shè)以不帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾結(jié)點(diǎn),但不設(shè)頭指針。試設(shè)計(jì)相應(yīng)的入隊(duì)和出隊(duì)的算法?!窘獯稹砍鲫?duì)操作是在循環(huán)鏈表的頭部進(jìn)行,相當(dāng)于刪除開(kāi)始結(jié)點(diǎn),而入隊(duì)操作是在循環(huán)鏈表的尾部進(jìn)行,相當(dāng)于在終端結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn)。由于循環(huán)鏈表不帶頭結(jié)點(diǎn),需要處理空表的特殊情況。入隊(duì)算法如下:循環(huán)隊(duì)列入叭算法
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中地理必修一知識(shí)點(diǎn)總結(jié)(7篇)
- 線程間消息隊(duì)列機(jī)制-洞察分析
- 橡膠智能檢測(cè)技術(shù)-洞察分析
- 舞蹈編創(chuàng)技術(shù)革新-洞察分析
- 眼動(dòng)分析與斜視治療-洞察分析
- 物聯(lián)網(wǎng)與智慧城市的融合-洞察分析
- 營(yíng)銷傳播效果測(cè)量-洞察分析
- 物聯(lián)網(wǎng)安全風(fēng)險(xiǎn)評(píng)估剖析-洞察分析
- 醫(yī)療保險(xiǎn)對(duì)手術(shù)費(fèi)用的影響-洞察分析
- 新媒體藝人粉絲行為-洞察分析
- 小學(xué)生防詐騙安全教育內(nèi)容
- 人工智能技術(shù)賦能多模態(tài)大學(xué)英語(yǔ)閱讀教學(xué)模式的探究
- 裝修逾期索賠合同范例
- 2024年醫(yī)院女工委工作計(jì)劃(6篇)
- 人教版2025九年級(jí)道德與法治中考備考復(fù)習(xí)計(jì)劃
- 2024年保安員資格考試題目及答案(共60題)
- 第十章 專題 帶電粒子在電場(chǎng)中運(yùn)動(dòng)的綜合問(wèn)題 集體備課說(shuō)課稿模板 -2023-2024學(xué)年高二上學(xué)期物理人教版(2019)必修第三冊(cè)
- 高中數(shù)學(xué)64數(shù)列求和省公開(kāi)課獲獎(jiǎng)?wù)n件市賽課比賽一等獎(jiǎng)?wù)n件
- 《基于單片機(jī)的送餐機(jī)器人定位功能設(shè)計(jì)》9800字(論文)
- 產(chǎn)品經(jīng)理100道面試題
- 2024年廣東公需科目答案
評(píng)論
0/150
提交評(píng)論