




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.棧和隊(duì)列的共同特點(diǎn)是只允許在端點(diǎn)處插入和刪除元素4 .棧通常采用的兩種存儲(chǔ)結(jié)構(gòu)是線(xiàn)性存儲(chǔ)結(jié)構(gòu)和鏈表存儲(chǔ)結(jié)構(gòu)5 .以下關(guān)于棧的表達(dá)正確的選項(xiàng)是DA.棧是非線(xiàn)性結(jié)構(gòu)B.棧是一種樹(shù)狀結(jié)構(gòu)C.棧具有先進(jìn)先出的特征D.棧有后進(jìn)先出的特征6 .鏈表不具有的特點(diǎn)是BA.不必事先估計(jì)存儲(chǔ)空間B.可隨機(jī)訪(fǎng)問(wèn)任一元素C.插入刪除不需要移動(dòng)元素D.所需空間與線(xiàn)性表xxxx7 .用鏈表表示線(xiàn)性表的優(yōu)點(diǎn)是便于插入和刪除操作8 .在單鏈表中,增加頭結(jié)點(diǎn)的目的是方便運(yùn)算的實(shí)現(xiàn)9 .循環(huán)鏈表的主要優(yōu)點(diǎn)是從表中任一結(jié)點(diǎn)出發(fā)都能訪(fǎng)問(wèn)到整個(gè)鏈表10.線(xiàn)性表L=a1,a2,a3,ai,布n說(shuō)法正確的選項(xiàng)是DA.每個(gè)元素都有一個(gè)直
2、接前件和直接后件B.線(xiàn)性表中至少要有一個(gè)元素C.表中諸元素的排列順序必須是由小到大或由大到小D.除第一個(gè)和最后一個(gè)元素外,其余每個(gè)元素都有一個(gè)且只有一個(gè)直接前件和直接后件11."線(xiàn)性表假設(shè)采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí),要求內(nèi)存中可用存儲(chǔ)單元的地址DA.必須是連續(xù)的B.局部地址必須是連續(xù)的C.一定是不連續(xù)的D.連續(xù)不連續(xù)都可以12."線(xiàn)性表的順序存儲(chǔ)結(jié)構(gòu)和線(xiàn)性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)分別是隨機(jī)存取的存儲(chǔ)結(jié)構(gòu)、順序存取的存儲(chǔ)結(jié)構(gòu)13.樹(shù)是結(jié)點(diǎn)的集合,它的根結(jié)點(diǎn)數(shù)目是有且只有114."在深度為5的滿(mǎn)二叉樹(shù)中,葉子結(jié)點(diǎn)的個(gè)數(shù)為3115.具有3個(gè)結(jié)點(diǎn)的二叉樹(shù)有5種形態(tài)16.設(shè)一棵二叉樹(shù)中有3
3、個(gè)葉子結(jié)點(diǎn),有8個(gè)度為1的結(jié)點(diǎn),那么該二叉樹(shù)中總的結(jié)點(diǎn)數(shù)為1317.二叉樹(shù)后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是cedba18."一棵二叉樹(shù)前序遍歷和中序遍歷分別為ABDEGCFH口DBGEACHF那么該二叉樹(shù)的后序遍歷為DGEBHFCA19."假設(shè)某二叉樹(shù)的前序遍歷訪(fǎng)問(wèn)順序是abdgcefh,中序遍歷訪(fǎng)問(wèn)順序是dgbaechf,那么其后序遍歷的2點(diǎn)訪(fǎng)問(wèn)順序是gdbehfca20.數(shù)據(jù)庫(kù)保護(hù)分為:平安性限制、完整性限制、并發(fā)性限制和數(shù)據(jù)的恢復(fù).1 .在計(jì)算機(jī)中,算法是指解題方案的準(zhǔn)確而完整的描述2 .在以下選項(xiàng)中,哪個(gè)不是一個(gè)算法一般應(yīng)該具有
4、的根本特征無(wú)窮性說(shuō)明:算法的四個(gè)根本特征是:可行性、確定性、有窮性和擁有足夠的情報(bào).3 .算法一般都可以用哪幾種限制結(jié)構(gòu)組合而成順序、選擇、循環(huán)4 .算法的時(shí)間復(fù)雜度是指算法執(zhí)行過(guò)程中所需要的根本運(yùn)算次數(shù)5 .算法的空間復(fù)雜度是指執(zhí)行過(guò)程中所需要的存儲(chǔ)空間6 .算法分析的目的是分析算法的效率以求改良7 .以下表達(dá)正確的選項(xiàng)是CA.算法的執(zhí)行效率與數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)無(wú)關(guān)8 .算法的空間復(fù)雜度是指算法程序中指令或語(yǔ)句的條數(shù)C.算法的有窮性是指算法必須能在執(zhí)行有限個(gè)步驟之后終止D.算法的時(shí)間復(fù)雜度是指執(zhí)行算法程序所需要的時(shí)間9 .數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)的一門(mén)學(xué)科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、對(duì)各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的
5、運(yùn)算,以及數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)10 數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無(wú)關(guān)的是數(shù)據(jù)的CA.存儲(chǔ)結(jié)構(gòu)B.物理結(jié)構(gòu)C.邏輯結(jié)構(gòu)D.物理和存儲(chǔ)結(jié)構(gòu)10."以下表達(dá)中,錯(cuò)誤的選項(xiàng)是BA.數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率密切相關(guān)B.數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與數(shù)據(jù)處理的效率無(wú)關(guān)C.數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)在計(jì)算機(jī)中所占的空間不一定是連續(xù)的D.一種數(shù)據(jù)的邏輯結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu)11 .數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示12 ."數(shù)據(jù)的邏輯結(jié)構(gòu)是指反映數(shù)據(jù)元素之間邏輯關(guān)系的數(shù)據(jù)結(jié)構(gòu)1般將數(shù)據(jù)結(jié)3 .根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,-構(gòu)分為線(xiàn)性結(jié)構(gòu)和非線(xiàn)性結(jié)構(gòu)14 ."以下數(shù)據(jù)結(jié)構(gòu)
6、具有記憶功能的是CA.隊(duì)列B.循環(huán)隊(duì)列C.棧D.順序表15.以下數(shù)據(jù)結(jié)構(gòu)中,按先進(jìn)后出原那么組織數(shù)據(jù)的是BA.線(xiàn)性鏈表B.棧C.循環(huán)鏈表D.順序表16."遞歸算法一般需要利用隊(duì)列實(shí)現(xiàn).17 .以下關(guān)于棧的表達(dá)中正確的選項(xiàng)是DA.在棧中只能插入數(shù)據(jù)8 .在棧中只能刪除數(shù)據(jù)C.棧是先進(jìn)先出的線(xiàn)性表D.棧是先進(jìn)后出的線(xiàn)性表0."由兩個(gè)棧共享一個(gè)存儲(chǔ)空間的好處是節(jié)省存儲(chǔ)空間,降低上溢發(fā)生的機(jī)率21."應(yīng)用程序在執(zhí)行過(guò)程中,需要通過(guò)打印機(jī)輸出數(shù)據(jù)時(shí),一般先形成一個(gè)打印作業(yè),將其存放在硬盤(pán)中的一個(gè)指定隊(duì)列中,當(dāng)打印機(jī)空閑時(shí),就會(huì)按先來(lái)先效勞的方式從中取出待打印的作業(yè)進(jìn)行打印.
7、22.以下關(guān)于隊(duì)列的表達(dá)中正確的選項(xiàng)是CA.在隊(duì)列中只能插入數(shù)據(jù)B.在隊(duì)列中只能刪除數(shù)據(jù)C.隊(duì)列是先進(jìn)先出的線(xiàn)性表D.隊(duì)列是先進(jìn)后出的線(xiàn)性表23 .以下表達(dá)中,正確的選項(xiàng)是DA.線(xiàn)性鏈表中的各元素在存儲(chǔ)空間中的位置必須是連續(xù)的B.線(xiàn)性鏈表中的表頭元素一定存儲(chǔ)在其他元素的前面C.線(xiàn)性鏈表中的各元素在存儲(chǔ)空間中的位置不一定是連續(xù)的,但表頭元素一定存儲(chǔ)在其他元素的前面D.線(xiàn)性鏈表中的各元素在存儲(chǔ)空間中的位置不一定是連續(xù)的,且各元素的存儲(chǔ)順序也是任意的24 .以下表達(dá)中正確的選項(xiàng)是AA.線(xiàn)性表是線(xiàn)性結(jié)構(gòu)B.棧與隊(duì)列是非線(xiàn)性結(jié)構(gòu)C.線(xiàn)性鏈表是非線(xiàn)性結(jié)構(gòu)D.二叉樹(shù)是線(xiàn)性結(jié)構(gòu)25.線(xiàn)性表L=a1,a2,a3
8、,ai,布n說(shuō)法正確的選項(xiàng)是DA.每個(gè)元素都有一個(gè)直接前件和直接后件B.線(xiàn)性表中至少要有一個(gè)元素C.表中諸元素的排列順序必須是由小到大或由大到小D.除第一個(gè)元素和最后一個(gè)元素外,其余每個(gè)元素都有一個(gè)且只有一個(gè)直接前件和直接后件26 ."線(xiàn)性表假設(shè)采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí),要求內(nèi)存中可用存儲(chǔ)單元的地址連續(xù)不連續(xù)都可以27 ."鏈表不具有的特點(diǎn)是BA.不必事先估計(jì)存儲(chǔ)空間8 .可隨機(jī)訪(fǎng)問(wèn)任一元素C.插入刪除不需要移動(dòng)元素D.所需空間與線(xiàn)性表xxxx28."非空的循環(huán)單鏈表head的尾結(jié)點(diǎn)由p所指向,滿(mǎn)足p->next=head9."與單向鏈表相比,雙向鏈表的
9、優(yōu)點(diǎn)之一是更容易訪(fǎng)問(wèn)相鄰結(jié)點(diǎn)30."在D中,只要指出表中任何一個(gè)結(jié)點(diǎn)的位置,就可以從它出發(fā)依次訪(fǎng)問(wèn)到表中其他所有結(jié)點(diǎn).A.線(xiàn)性單鏈表B.雙向鏈表C.線(xiàn)性鏈表D.循環(huán)鏈表31 ."以下數(shù)據(jù)結(jié)構(gòu)屬于非線(xiàn)性數(shù)據(jù)結(jié)構(gòu)的是CA.隊(duì)列B.線(xiàn)性表C.二叉樹(shù)D.棧32 .樹(shù)是結(jié)點(diǎn)的集合,它的根結(jié)點(diǎn)數(shù)目是有且只有134 .具有3個(gè)結(jié)點(diǎn)的二叉樹(shù)有5種形態(tài)56 ."在一棵二叉樹(shù)上第8層的結(jié)點(diǎn)數(shù)最多是128注:2K-17 ."在深度為5的滿(mǎn)二叉樹(shù)中,葉子結(jié)點(diǎn)的個(gè)數(shù)為16注:2n-136 ."在xx為5的滿(mǎn)二叉樹(shù)中,共有31個(gè)結(jié)點(diǎn).注:2n-137 ."設(shè)一棵
10、完全二叉樹(shù)共有699個(gè)結(jié)點(diǎn),那么在該二叉樹(shù)中的葉子結(jié)點(diǎn)數(shù)為350說(shuō)明:完全二叉樹(shù)總結(jié)點(diǎn)數(shù)為N,假設(shè)N為奇數(shù),那么葉子結(jié)點(diǎn)數(shù)為N+1/2;假設(shè)N為偶數(shù),那么葉子結(jié)點(diǎn)數(shù)為N/2.38."設(shè)有以下二叉樹(shù),對(duì)此二叉樹(shù)中序遍歷的結(jié)果是BA. ABCDEFB. DBEAFCC. ABDECFDDEBFCA39.巴知二叉樹(shù)后序遍歷序列是dabec,中序遍歷序列debac,它的前序遍歷序列是cedba40.一棵二叉樹(shù)前序遍歷和中序遍歷分別為ABDEGCF周口DBGEACHF那么該二叉樹(shù)的后序遍歷為DGEBHFCA1 ."假設(shè)某二叉樹(shù)的前序遍歷訪(fǎng)問(wèn)順序是abdgcefh,中序遍歷訪(fǎng)問(wèn)順序是d
11、gbaechf,那么其后序遍歷的2點(diǎn)訪(fǎng)問(wèn)順序是gdbehfca42 ."串的xx是串中所含字符的個(gè)數(shù)43 .設(shè)有兩個(gè)串p和q,求q在p中首次出現(xiàn)位置的運(yùn)算稱(chēng)做模式匹配44 ."N個(gè)頂點(diǎn)的連通圖中邊的條數(shù)至少為N-145 ."N個(gè)頂點(diǎn)的強(qiáng)連通圖的邊數(shù)至少有N46 ."對(duì)長(zhǎng)度為n的線(xiàn)性表進(jìn)行順序查找,在最壞情況下所需要的比擬次數(shù)為N47 ."最簡(jiǎn)單的交換排序方法是冒泡排序488."假設(shè)線(xiàn)性表的長(zhǎng)度為n,那么在最壞情況下,冒泡排序需要的比擬次數(shù)為nn-1/249 ."在待排序的元素序列根本有序的前提下,效率最高的排序方法是冒泡排序
12、50 ."在最壞情況下,以下順序方法中時(shí)間復(fù)雜度最小的是堆排序51 ."希爾排序法屬于插入類(lèi)排序2 ."堆排序法屬于選擇類(lèi)排序53 ."在以下幾種排序方法中,要求內(nèi)存量最大的是歸并排序54 ."數(shù)據(jù)表A中每個(gè)元素距其最終位置不遠(yuǎn),為節(jié)省時(shí)間,應(yīng)采用直接插入排序55 ."算法的根本特征是可行性、確定性、有窮性和擁有足夠的情報(bào).1 .一個(gè)算法通常由兩種根本要素組成:一是對(duì)數(shù)據(jù)對(duì)象的運(yùn)算和操作,二是算法的限制結(jié)構(gòu).2 .算法的復(fù)雜度主要包括時(shí)間復(fù)雜度和空間復(fù)雜度.3 .實(shí)現(xiàn)算法所需的存儲(chǔ)單元多少和算法的工作量大小分別稱(chēng)為算法的空間復(fù)雜度和時(shí)
13、間復(fù)雜度.4 .所謂數(shù)據(jù)處理是指對(duì)數(shù)據(jù)集合中的各元素以各種方式進(jìn)行運(yùn)算,包括插入、刪除、查找、更改等運(yùn)算,也包括對(duì)數(shù)據(jù)元素進(jìn)行分析.5 .數(shù)據(jù)結(jié)構(gòu)是指相互有關(guān)聯(lián)的數(shù)據(jù)元素的集合.6 ."數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu),線(xiàn)性鏈表屬于存儲(chǔ)結(jié)構(gòu).7 .數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)和數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu).8 .數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)以及對(duì)數(shù)據(jù)的操作運(yùn)算.9 .數(shù)據(jù)元素之間的任何關(guān)系都可以用前趨和后繼關(guān)系來(lái)描述.10 數(shù)據(jù)的邏輯結(jié)構(gòu)有線(xiàn)性結(jié)構(gòu)和非線(xiàn)性結(jié)構(gòu)兩大類(lèi).10."常用的存儲(chǔ)結(jié)構(gòu)有順序、鏈接、索引等存儲(chǔ)結(jié)構(gòu).11 ."順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物
14、理位置相鄰的存儲(chǔ)單元中.23 ."棧的根本運(yùn)算有三種:入棧、退棧與讀棧頂元素.13.隊(duì)列主要有兩種根本運(yùn)算:入隊(duì)運(yùn)算與退隊(duì)運(yùn)算.14 ."在實(shí)際應(yīng)用中,帶鏈的棧可以用來(lái)收集計(jì)算機(jī)存儲(chǔ)空間中所有空閑的存儲(chǔ)結(jié)點(diǎn),這種帶鏈的棧稱(chēng)為可利用棧.15 ."棧和隊(duì)列通常采用的存儲(chǔ)結(jié)構(gòu)是鏈?zhǔn)酱鎯?chǔ)和順序存儲(chǔ).16."當(dāng)線(xiàn)性表采用順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)存儲(chǔ)時(shí),其主要特點(diǎn)是邏輯結(jié)構(gòu)中相鄰的結(jié)點(diǎn)在存儲(chǔ)結(jié)構(gòu)中仍相鄰.17 .循環(huán)隊(duì)列主要有兩種根本運(yùn)算:入隊(duì)運(yùn)算與退隊(duì)運(yùn)算.每進(jìn)行一次入隊(duì)運(yùn)算,隊(duì)尾指針就進(jìn)1.8 ."當(dāng)循環(huán)隊(duì)列非空且隊(duì)尾指針等于對(duì)頭指針時(shí),說(shuō)明循環(huán)隊(duì)列已滿(mǎn),不能
15、進(jìn)行入隊(duì)運(yùn)算.這種情況稱(chēng)為上溢.19.當(dāng)循環(huán)隊(duì)列為空時(shí),不能進(jìn)行退隊(duì)運(yùn)算,這種情況稱(chēng)為下溢.20.在一個(gè)容量為25的循環(huán)隊(duì)列中,假設(shè)頭指針front=16,尾指針rear=9,那么該循環(huán)隊(duì)列中共有18個(gè)元素.注:當(dāng)rear<front時(shí),元素個(gè)數(shù)=總?cè)萘恳?frontrear);當(dāng)rear>front時(shí),元素個(gè)數(shù)=rearfront.1,判斷鏈表是否存在環(huán)型鏈表問(wèn)題:判斷一個(gè)鏈表是否存在環(huán),例如下面這個(gè)鏈表就存在一個(gè)環(huán):例如N1->N2->N3->N4->N5-八或是一個(gè)有環(huán)的鏈表,環(huán)的開(kāi)始結(jié)點(diǎn)是N5這里有一個(gè)比擬簡(jiǎn)單的解法.設(shè)置兩個(gè)指針p1,p2.&quo
16、t;每次循環(huán)p1向前走一步,p2向前走兩步.直到p2碰到NULL指針或者兩個(gè)指針相等結(jié)束循環(huán).如果兩個(gè)指針相等那么說(shuō)明存在環(huán).structlinkintdata;link*next;);boolIsLoop(link*head)link*p1=head,*p2=head;if(head=NULL|head->next=NULL)returnfalse;dop1=p1->next;p2=p2->next->next;while(p2&&p2->next&&p1!=p2);if(p1=p2)returntrue;elsereturnfa
17、lse;2,鏈表反轉(zhuǎn)單向鏈表的反轉(zhuǎn)是一個(gè)經(jīng)常被問(wèn)到的一個(gè)面試題,也是一個(gè)非常根底的問(wèn)題.比方一個(gè)鏈表是這樣的:1->2->3->4->5通過(guò)反轉(zhuǎn)后成為5->4->3->2->1."最容易想到的方法遍歷一遍鏈表,利用一個(gè)輔助指針,存儲(chǔ)遍歷過(guò)程中當(dāng)前指針指向的下一個(gè)元素,然后將當(dāng)前節(jié)點(diǎn)元素的指針?lè)崔D(zhuǎn)后,利用已經(jīng)存儲(chǔ)的指針往后面繼續(xù)遍歷.源代碼如下:structlinkaintdata;linka*next;voidreverse(linka*&head)if(head=NULL)return;linka*pre,*cur,*ne;p
18、re=head;cur=head->next;while(cur)ne=cur->next;cur->next=pre;pre=cur;cur=ne;head->next=NULL;head=pre;還有一種利用遞歸的方法.這種方法的根本思想是在反轉(zhuǎn)當(dāng)前節(jié)點(diǎn)之前先調(diào)用遞歸函數(shù)反轉(zhuǎn)后續(xù)節(jié)點(diǎn).源代碼如下.不過(guò)這個(gè)方法有一個(gè)缺點(diǎn),就是在反轉(zhuǎn)后的最后一個(gè)結(jié)點(diǎn)會(huì)形成一個(gè)環(huán),所以必須將函數(shù)的返回的節(jié)點(diǎn)的next域置為NULL由于要改變head指針,所以我用了引用.算法的源代碼如下:linka*reverse(linka*p,linka*&head)if(p=NULL|p-&
19、gt;next=NULL)head=p;returnp;elselinka*tmp=reverse(p->next,head);tmp->next=p;returnp;3,判斷兩個(gè)數(shù)組中是否存在相同的數(shù)字給定兩個(gè)排好序的數(shù)組,怎樣高效得判斷這兩個(gè)數(shù)組中存在相同的數(shù)字?這個(gè)問(wèn)題首先想到的是一個(gè)O(nlogn)的算法.就是任意挑選一個(gè)數(shù)組,遍歷這個(gè)數(shù)組的所有元素,遍歷過(guò)程中,在另一個(gè)數(shù)組中對(duì)第一個(gè)數(shù)組中的每個(gè)元素進(jìn)行binarysearch.用C+攸現(xiàn)代碼如下:for(i=0;i<size1;i+)intstart=0,end=size2-1,mid;while(start<
20、;=end)mid=(start+end)/2;if(ai=bmid)returntrue;elseif(ai<bmid)end=mid-1;elsestart=mid+1;returnfalse;后來(lái)發(fā)現(xiàn)有一個(gè)O(n瘴法.由于兩個(gè)數(shù)組都是排好序的.所以只要一次遍歷就行了.首先設(shè)兩個(gè)下標(biāo),分別初始化為兩個(gè)數(shù)組的起始地址,依次向前推進(jìn).推進(jìn)的規(guī)那么是比擬兩個(gè)數(shù)組中的數(shù)字,小的那個(gè)數(shù)組的下標(biāo)向前推進(jìn)一步,直到任何一個(gè)數(shù)組的下標(biāo)到達(dá)數(shù)組末尾時(shí),如果這時(shí)還沒(méi)碰到相同的數(shù)字,說(shuō)明數(shù)組中沒(méi)有相同的數(shù)字.while(i<size1&&j<size2)if(ai=bj)ret
21、urntrue;if(ai>bj)j+;if(ai<bj)i+;returnfalse;4,最大子序列問(wèn)題:給定一整數(shù)序列A1,A2,An(可能有負(fù)數(shù)),求A1An的一個(gè)子序列AiAj,使得Ai到Aj的和最大例如:整數(shù)序列-2,11,-4,13,-5,2,-5,-3,12,-9勺最大子序列的和為21.對(duì)于這個(gè)問(wèn)題,最簡(jiǎn)單也是最容易想到的那就是窮舉所有子序列的方法.利用三重循環(huán),依次求出所有子序列的和然后取最大的那個(gè).當(dāng)然算法復(fù)雜度會(huì)到達(dá)O(n).顯然這種方法不是最優(yōu)的,下面給出一個(gè)算法復(fù)雜度為O(n)的線(xiàn)性算法實(shí)現(xiàn),算法的來(lái)源于ProgrammingPearls一書(shū).在給出線(xiàn)性算法
22、之前,先來(lái)看一個(gè)對(duì)窮舉算法進(jìn)行優(yōu)化的算法,它的算法復(fù)雜度為O(n2).其實(shí)這個(gè)算法只是對(duì)對(duì)窮舉算法稍微做了一些修改:其實(shí)子序列的和我們并不需要每次都重新計(jì)算一遍.假設(shè)Sum(i,j說(shuō)Ai.Aj的和,那么Sum(i,j+1)=Sum(i,j)+Aj+1o利用這一個(gè)遞推,我們就可以得到下面這個(gè)算法:intmax_sub(inta,intsize)inti,j,v,max=a0;for(i=0;i<size;i+)v=0;for(j=i;j<size;j+)v=v+aj;/Sum(i,j+1)=Sum(i,j)+Aj+1if(v>max)max=v;returnmax;那怎樣才能到
23、達(dá)線(xiàn)性復(fù)雜度呢?這里運(yùn)用動(dòng)態(tài)規(guī)劃的思想.先看一下源代碼實(shí)現(xiàn):intmax_sub2(inta,intsize)inti,max=0,temp_sum=0;for(i=0;i<size;i+)temp_sum+=ai;if(temp_sum>max)max=temp_sum;elseif(temp_sum<0)temp_sum=0;returnmax;6,按單詞反轉(zhuǎn)字符串并不是簡(jiǎn)單的字符串反轉(zhuǎn),而是按給定字符串里的單詞將字符串倒轉(zhuǎn)過(guò)來(lái),就是說(shuō)字符串里面的單詞還是保持原來(lái)的順序,這里的每個(gè)單詞用空格分開(kāi).例如:經(jīng)過(guò)反轉(zhuǎn)后變?yōu)椋喝绻皇呛?jiǎn)單的將所有字符串翻轉(zhuǎn)的話(huà),可以遍歷字符串,將
24、第一個(gè)字符和最后一個(gè)交換,第二個(gè)和倒數(shù)第二個(gè)交換,依次循環(huán).其實(shí)根據(jù)單詞反轉(zhuǎn)的話(huà)可以在第一遍遍歷的根底上,再遍歷一遍字符串,對(duì)每一個(gè)單詞再反轉(zhuǎn)一次.這樣每個(gè)單詞又恢復(fù)了原來(lái)的順序.char*reverse_word(constchar*str)intlen=strlen(str);char*restr=newcharlen+1;strcpy(restr,str);inti,j;for(i=0,j=len-1;i<j;i+,j-)chartemp=restri;restri=restrj;restrj=temp;intk=0;while(k<len)i=j=k;while(restr
25、j!=''&&restrj!='')j+;k=j+1;j-;for(;i<j;i+,j-)chartemp=restri;restri=restrj;restrj=temp;returnrestr;如果考慮空間和時(shí)間的優(yōu)化的話(huà),當(dāng)然可以將上面代碼里兩個(gè)字符串交換局部改為異或?qū)崿F(xiàn).例如將chartemp=restri;restri=restrj;restrj=temp;改為restriA=restrj;restrjA=restri;restriA=restrj;7,字符串反轉(zhuǎn)我沒(méi)有記錯(cuò)的話(huà)是一道MSN的筆試題,網(wǎng)上無(wú)意中看到的,拿來(lái)做了一下.
26、題目是這樣的,給定一個(gè)字符串,一個(gè)這個(gè)字符串的子串,將第一個(gè)字符串反轉(zhuǎn),但保存子串的順序不變.例如:輸入:第一個(gè)字符串:"Thisisfishsky'sChinesesite:"fishsky"輸出:ptth:etisesenihCs'fishskysisihT"一般的方法是先掃描一邊第一個(gè)字符串,然后用stack把它反轉(zhuǎn),同時(shí)記錄下子串出現(xiàn)的位置.然后再掃描一遍把記錄下來(lái)的子串再用stack反轉(zhuǎn).我用的方法是用一遍掃描數(shù)組的方法.掃描中如果發(fā)現(xiàn)子串,就將子串倒過(guò)來(lái)壓入堆棧.最后再將堆棧里的字符彈出,這樣子串又恢復(fù)了原來(lái)的順序.源代碼如下
27、:#include<iostream>#include<cassert>#include<stack>usingnamespacestd;/reversethestring's1'exceptthesubstring'token'.constchar*reverse(constchar*s1,constchar*token)assert(s1&&token);stack<char>stack1;constchar*ptoken=token,*head=s1,*rear=s1;while(*head!
28、=")while(*head!=''&&*ptoken=*head)ptoken+;head+;if(*ptoken='')/containthetokenconstchar*p;for(p=head-1;p>=rear;p-)stack1."push(*p);ptoken=token;rear=head;elsestack1."push(*rear);head=+rear;ptoken=token;char*return_v=newcharstrlen(s1)+1;inti=0;while(!stack1.&
29、quot;empty()return_vi+=stack1."top();stack1."pop();return_vi="returnreturn_v;intmain(intargc,char*argv)cout<<"Thisisfishsky'sChinesesite:;cout<<reverse("Thisisfishsky'sChinesesite:return0;8,刪除數(shù)組中重復(fù)的數(shù)字問(wèn)題:一個(gè)動(dòng)態(tài)長(zhǎng)度可變的數(shù)字序列,以數(shù)字0為結(jié)束標(biāo)志,要求將重復(fù)的數(shù)字用一個(gè)數(shù)字代替,例如:將數(shù)組1,1,1,
30、2,2,2,2,2,7,7,1,5,5,5,0轉(zhuǎn)變成1,2,7,1,5,0問(wèn)題比擬簡(jiǎn)單,要注意的是這個(gè)數(shù)組是動(dòng)態(tài)的.所以防止麻煩我還是用了STL的vectoro#include<iostream>#include<vector>usingnamespacestd;/removetheduplicatednumbersinanintgerarray,thearraywasendwith0;/e.g.1,1,1,2,2,5,4,4,4,4,1,0->1,2,5,4,1,0voidstaticremove_duplicated(inta,vector<int>
31、;&_st)_st.push_back(a0);for(inti=1;_st_st.size()-1!=0;i+)if(ai-1!=ai)_st.push_back(ai);當(dāng)然如果可以改變?cè)瓉?lái)的數(shù)組的話(huà),可以不用STL僅需要指針操作就可以了.下面這個(gè)程序?qū)⑿薷脑瓉?lái)數(shù)組的內(nèi)容.voidstaticremove_duplicated2(inta)if(a0=0|a=NULL)return;intinsert=1,current=1;while(acurrent!=0)if(acurrent!=acurrent-1)ainsert=acurrent;insert+;current+;elsecurrent+;ainsert=0;9,如何判斷一棵二叉樹(shù)是否是平衡二叉樹(shù)問(wèn)題:判斷一個(gè)二叉排序樹(shù)是否是平衡二叉樹(shù)解決方案:根據(jù)平衡二叉樹(shù)的定義,如果任意節(jié)點(diǎn)的左右子樹(shù)的深度相差不超過(guò)1,那這棵樹(shù)就是平衡二
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 申報(bào)書(shū)項(xiàng)目課題命名
- 辦公軟件合同范本
- 課題申報(bào)書(shū)指導(dǎo)意見(jiàn)
- 北京買(mǎi)賣(mài)小產(chǎn)權(quán)合同范本
- 臨沂房地產(chǎn)抵押合同范本
- 住房公積金調(diào)整新規(guī) 助力住房市場(chǎng)健康發(fā)展
- 加工糾紛合同范本
- 廚師勞務(wù)合同范本簡(jiǎn)易
- 中山企業(yè)勞務(wù)派遣合同范本
- 支持民營(yíng)企業(yè)實(shí)現(xiàn)高質(zhì)量發(fā)展新路徑
- 監(jiān)理大綱合同信息管理
- 施工和檢維修管理制度
- 慢性阻塞性肺病的用藥指導(dǎo)
- 建設(shè)工程檔案預(yù)驗(yàn)收申請(qǐng)表
- GB/T 41000-2021聚碳酸酯(PC)飲水罐質(zhì)量通則
- 馬工程《刑法學(xué)(下冊(cè))》教學(xué)課件 第20章 侵犯公民人身權(quán)利、民主權(quán)利罪
- GB/T 2885.5-2008礦用窄軌車(chē)輛第5部分:平板車(chē)
- 抖音平臺(tái)單門(mén)店認(rèn)領(lǐng)授權(quán)書(shū)
- 《中國(guó)的機(jī)遇與挑戰(zhàn)》教案
- 2023年湖北師范學(xué)院專(zhuān)升本C語(yǔ)言程序設(shè)計(jì)試卷
- 泵車(chē)零件圖冊(cè)-50米總
評(píng)論
0/150
提交評(píng)論