




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、棧和隊(duì)列的共同特點(diǎn)是_.棧通常采用的兩種存儲(chǔ)結(jié)構(gòu)是_.用鏈表表示線性表的優(yōu)點(diǎn)是_8.在單鏈表中,增加頭結(jié)點(diǎn)的目的是_9.循環(huán)鏈表的主要優(yōu)點(diǎn)是_-12.線性表的順序存儲(chǔ)結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)分別是_13.樹是結(jié)點(diǎn)的集合,它的根結(jié)點(diǎn)數(shù)目是_14.在深度為5的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為_15.具有3個(gè)結(jié)點(diǎn)的二叉樹有(_16.設(shè)一棵二叉樹中有3個(gè)葉子結(jié)點(diǎn),有8個(gè)度為1的結(jié)點(diǎn),則該二叉樹中總的結(jié)點(diǎn)數(shù)為_17.已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是_18.已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為_19.
2、若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點(diǎn)訪問順序是_20.數(shù)據(jù)庫(kù)保護(hù)分為:安全性控制、 完整性控制 、并發(fā)性控制和數(shù)據(jù)的恢復(fù)。 在計(jì)算機(jī)中,算法是指_算法一般都可以用哪幾種控制結(jié)構(gòu)組合而成_.算法的時(shí)間復(fù)雜度是指_5. 算法的空間復(fù)雜度是指_ 6. 算法分析的目的是_11. 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是指_12. 數(shù)據(jù)的邏輯結(jié)構(gòu)是指(_13. 根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分為_16. 遞歸算法一般需要利用_實(shí)現(xiàn)。28. 非空的循環(huán)單鏈表head的尾結(jié)點(diǎn)(由p所指向),滿足(_29.與單向鏈表相比,雙向鏈表的優(yōu)
3、點(diǎn)之一是_-34. 在一棵二叉樹上第8層的結(jié)點(diǎn)數(shù)最多是_35. 在深度為5的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為_36. 在深度為5的滿二叉樹中,共有_個(gè)結(jié)點(diǎn)37.設(shè)一棵完全二叉樹共有699個(gè)結(jié)點(diǎn),則在該二叉樹中的葉子結(jié)點(diǎn)數(shù)為_說(shuō)明:完全二叉樹總結(jié)點(diǎn)數(shù)為N,若N為奇數(shù),則葉子結(jié)點(diǎn)數(shù)為(N+1)/2;若N為偶數(shù),則葉子結(jié)點(diǎn)數(shù)為N/2。39.已知二叉樹后序遍歷序列是dabec,中序遍歷序列debac,它的前序遍歷序列是(cedba) 40. 已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為(DGEBHFCA)41.若某二叉樹的前序遍歷訪問順序是abdgcef
4、h,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點(diǎn)訪問順序是(gdbehfca)42. 串的長(zhǎng)度是(串中所含字符的個(gè)數(shù)) 43.設(shè)有兩個(gè)串p和q,求q在p中首次出現(xiàn)位置的運(yùn)算稱做(模式匹配)44. N個(gè)頂點(diǎn)的連通圖中邊的條數(shù)至少為(N-1)45.N個(gè)頂點(diǎn)的強(qiáng)連通圖的邊數(shù)至少有(N)46.對(duì)長(zhǎng)度為n的線性表進(jìn)行順序查找,在最壞情況下所需要的比較次數(shù)為(N)47. 最簡(jiǎn)單的交換排序方法是(冒泡排序) 48.假設(shè)線性表的長(zhǎng)度為n,則在最壞情況下,冒泡排序需要的比較次數(shù)為(n(n-1)/2) 49. 在待排序的元素序列基本有序的前提下,效率最高的排序方法是(冒泡排序)50. 在最壞情況下,下列
5、順序方法中時(shí)間復(fù)雜度最小的是(堆排序) 51. 希爾排序法屬于(插入類排序)52. 堆排序法屬于(選擇類排序)53. 在下列幾種排序方法中,要求內(nèi)存量最大的是(歸并排序) 54. 已知數(shù)據(jù)表A中每個(gè)元素距其最終位置不遠(yuǎn),為節(jié)省時(shí)間,應(yīng)采用(直接插入排序)55. 算法的基本特征是可行性、確定性、 有窮性 和擁有足夠的情報(bào)。一個(gè)算法通常由兩種基本要素組成:一是對(duì)數(shù)據(jù)對(duì)象的運(yùn)算和操作,二是算法的控制結(jié)構(gòu)。1. 算法的復(fù)雜度主要包括時(shí)間復(fù)雜度和 空間 復(fù)雜度。2. 實(shí)現(xiàn)算法所需的存儲(chǔ)單元多少和算法的工作量大小分別稱為算法的空間復(fù)雜度和時(shí)間復(fù)雜度 。3.所謂數(shù)據(jù)處理是指對(duì)數(shù)據(jù)集合
6、中的各元素以各種方式進(jìn)行運(yùn)算,包括插入、刪除、查找、更改等運(yùn)算,也包括對(duì)數(shù)據(jù)元素進(jìn)行分析。4.數(shù)據(jù)結(jié)構(gòu)是指相互有關(guān)聯(lián)的 數(shù)據(jù)元素 的集合。5.數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu),線性鏈表屬于 存儲(chǔ)結(jié)構(gòu) 。6.數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的 邏輯 結(jié)構(gòu)和數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。7. 數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的 存儲(chǔ)結(jié)構(gòu) 以及對(duì)數(shù)據(jù)的操作運(yùn)算。8.數(shù)據(jù)元素之間的任何關(guān)系都可以用 前趨和后繼 關(guān)系來(lái)描述。9.數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和非線性結(jié)構(gòu)兩大類。10.常用的存儲(chǔ)結(jié)構(gòu)有順序、鏈接、 索引 等存儲(chǔ)結(jié)構(gòu)。11. 順序存儲(chǔ)方法是把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置 相鄰 的存儲(chǔ)單元中。12. 棧的
7、基本運(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),這種帶鏈的棧稱為 可利用棧 。15.棧和隊(duì)列通常采用的存儲(chǔ)結(jié)構(gòu)是 鏈?zhǔn)酱鎯?chǔ)和順序存儲(chǔ) 。16.當(dāng)線性表采用順序存儲(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 。18.當(dāng)循環(huán)隊(duì)列非空且隊(duì)尾指針等于對(duì)頭指針時(shí),說(shuō)明循環(huán)隊(duì)列已滿,不能進(jìn)行入隊(duì)運(yùn)算。這種情況稱為 上溢
8、60; 。19.當(dāng)循環(huán)隊(duì)列為空時(shí),不能進(jìn)行退隊(duì)運(yùn)算,這種情況稱為 下溢 。20. 在一個(gè)容量為25的循環(huán)隊(duì)列中,若頭指針front=16,尾指針rear=9,則該循環(huán)隊(duì)列中共有 18 個(gè)元素。注:當(dāng)rear<front時(shí),元素個(gè)數(shù)總?cè)萘浚╢rontrear);當(dāng)rear>front時(shí),元素個(gè)數(shù)rearfront。5.下列關(guān)于棧的敘述正確的是(D) A.棧是非線性結(jié)構(gòu)B.棧是一種樹狀結(jié)構(gòu)C.棧具有先進(jìn)先出的特征D.棧有后進(jìn)先出的特征6.鏈表不具有的特點(diǎn)是(B)A.不必事先估計(jì)存儲(chǔ)空間
9、60; B.可隨機(jī)訪問任一元素C.插入刪除不需要移動(dòng)元素 D.所需空間與線性表長(zhǎng)度成正比10.線性表L(a1,a2,a3,ai,an),下列說(shuō)法正確的是(D) A.每個(gè)元素都有一個(gè)直接前件和直接后件 B.線性表中至少要有一個(gè)元素 C.表中諸元素的排列順序必須是由小到大或由大到小 D.除第一個(gè)和最后一個(gè)元素外,其余每個(gè)元素都有一個(gè)且只有一個(gè)直接前件和直接后件1
10、1.線性表若采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí),要求內(nèi)存中可用存儲(chǔ)單元的地址(D)A.必須是連續(xù)的 B.部分地址必須是連續(xù)的C.一定是不連續(xù)的 D.連續(xù)不連續(xù)都可以7. 下列敘述正確的是(C)A算法的執(zhí)行效率與數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)無(wú)關(guān)B算法的空間復(fù)雜度是指算法程序中指令(或語(yǔ)句)的條數(shù)C算法的有窮性是指算法必須能在執(zhí)行有限個(gè)步驟之后終止D算法的時(shí)間復(fù)雜度是指執(zhí)行算法程序所需要的時(shí)間8.數(shù)據(jù)結(jié)構(gòu)作為計(jì)算機(jī)的一門學(xué)科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、對(duì)各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運(yùn)算,以及(數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu))9. 數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無(wú)關(guān)的是數(shù)據(jù)的(C)A存儲(chǔ)結(jié)構(gòu) B物理結(jié)構(gòu)
11、0; C邏輯結(jié)構(gòu) D物理和存儲(chǔ)結(jié)構(gòu)10. 下列敘述中,錯(cuò)誤的是(B)A數(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)14. 下列數(shù)據(jù)結(jié)構(gòu)具有記憶功能的是(C)A隊(duì)列B循環(huán)隊(duì)列C棧D順序表15. 下列數(shù)據(jù)結(jié)構(gòu)中,按先進(jìn)后出原則組織數(shù)據(jù)的是(B)A線性鏈表 B棧 C循環(huán)鏈
12、表 D順序表17. 下列關(guān)于棧的敘述中正確的是(D)A在棧中只能插入數(shù)據(jù)B在棧中只能刪除數(shù)據(jù)C棧是先進(jìn)先出的線性表 D棧是先進(jìn)后出的線性表20. 由兩個(gè)棧共享一個(gè)存儲(chǔ)空間的好處是(節(jié)省存儲(chǔ)空間,降低上溢發(fā)生的機(jī)率) 21. 應(yīng)用程序在執(zhí)行過(guò)程中,需要通過(guò)打印機(jī)輸出數(shù)據(jù)時(shí),一般先形成一個(gè)打印作業(yè),將其存放在硬盤中的一個(gè)指定(隊(duì)列)中,當(dāng)打印機(jī)空閑時(shí),就會(huì)按先來(lái)先服務(wù)的方式從中取出待打
13、印的作業(yè)進(jìn)行打印。22.下列關(guān)于隊(duì)列的敘述中正確的是(C)A在隊(duì)列中只能插入數(shù)據(jù) B在隊(duì)列中只能刪除數(shù)據(jù) C隊(duì)列是先進(jìn)先出的線性表 D隊(duì)列是先進(jìn)后出的線性表23.下列敘述中,正確的是(D)A線性鏈表中的各元素在存儲(chǔ)空間中的位置必須是連續(xù)的B線性鏈表中的表頭元素一定存儲(chǔ)在其他元素的前面 C線性鏈表中的各元素在存儲(chǔ)空間中的位置不一定是連續(xù)的,但表頭元素一定存儲(chǔ)在其他元素的前面 D線性鏈表中的各元素在存儲(chǔ)空間中的位置不一定是連續(xù)的,且各元素的存儲(chǔ)
14、順序也是任意的24.下列敘述中正確的是(A)A線性表是線性結(jié)構(gòu) B棧與隊(duì)列是非線性結(jié)構(gòu)C線性鏈表是非線性結(jié)構(gòu) D二叉樹是線性結(jié)構(gòu)25. 線性表L(a1,a2
15、,a3,ai,an),下列說(shuō)法正確的是(D)A每個(gè)元素都有一個(gè)直接前件和直接后件 B線性表中至少要有一個(gè)元素C表中諸元素的排列順序必須是由小到大或由大到小D除第一個(gè)元素和最后一個(gè)元素外,其余每個(gè)元素都有一個(gè)且只有一個(gè)直接前件和直接后件26.線性表若采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)時(shí),要求內(nèi)存中可用存儲(chǔ)單元的地址(連續(xù)不連續(xù)都可以) 27. 鏈表不具有的特點(diǎn)是(B)A不必事先估計(jì)存儲(chǔ)空間 B可隨機(jī)訪問任一元素C插入刪除不需
16、要移動(dòng)元素 D所需空間與線性表長(zhǎng)度成正比30. 在(D)中,只要指出表中任何一個(gè)結(jié)點(diǎn)的位置,就可以從它出發(fā)依次訪問到表中其他所有結(jié)點(diǎn)。A線性單鏈表 B雙向鏈表 C線性鏈表
17、; D循環(huán)鏈表31. 以下數(shù)據(jù)結(jié)構(gòu)屬于非線性數(shù)據(jù)結(jié)構(gòu)的是(C)A隊(duì)列 B線性表C二叉樹 D棧38. 設(shè)有下列二叉樹,對(duì)此二叉樹中序遍歷的結(jié)果是(B)AABCDEF BDBEAFCCABDECF DDEBFCA1.判斷鏈表是否存在環(huán)型鏈表問題:判斷一個(gè)鏈表是否存在環(huán)
18、,例如下面這個(gè)鏈表就存在一個(gè)環(huán):例如N1->N2->N3->N4->N5->N2就是一個(gè)有環(huán)的鏈表,環(huán)的開始結(jié)點(diǎn)是N5這里有一個(gè)比較簡(jiǎn)單的解法。設(shè)置兩個(gè)指針p1,p2。每次循環(huán)p1向前走一步,p2向前走兩步。直到p2碰到NULL指針或者兩個(gè)指針相等結(jié)束循環(huán)。如果兩個(gè)指針相等則說(shuō)明存在環(huán)。 struct link int data; link* next; bool IsLoop(link* head) link* p1=head, *p2 = head;&
19、#160; if (head =NULL | head->next =NULL) return false; do p1= p1->next; p2
20、 = p2->next->next; while(p2 && p2->next && p1!=p2); if(p1 = p2) return true; else retu
21、rn false;2,鏈表反轉(zhuǎn) 單向鏈表的反轉(zhuǎn)是一個(gè)經(jīng)常被問到的一個(gè)面試題,也是一個(gè)非?;A(chǔ)的問題。比如一個(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)元素的指針反轉(zhuǎn)后,利用已經(jīng)存儲(chǔ)的指針往后面繼續(xù)遍歷。源代碼如下: struct linka int data; linka* next; void rever
22、se(linka*& head) if(head =NULL) return; linka*pre, *cur, *ne; pre=head; cur=head->next; while(cur)
23、60; ne = cur->next; cur->next = pre; pre = cur; cur = ne;
24、160; 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。因?yàn)橐淖僪ead指針,所以我用了引用。算法的源代碼如下: linka* reverse(linka* p,linka*& head) if(p = N
25、ULL | p->next = NULL) head=p; return p; else
26、0; linka* tmp = reverse(p->next,head); tmp->next = p; return p; 3,判斷兩個(gè)數(shù)組中是否存在相同的數(shù)字 給定兩個(gè)排好序的數(shù)組,怎樣高效得判斷這兩個(gè)數(shù)組中存在相同的數(shù)字?這個(gè)問題首先想到的是一個(gè)O(nlogn)的算法。就是任意挑選一個(gè)數(shù)組,遍歷這個(gè)數(shù)組
27、的所有元素,遍歷過(guò)程中,在另一個(gè)數(shù)組中對(duì)第一個(gè)數(shù)組中的每個(gè)元素進(jìn)行binary search。用C+實(shí)現(xiàn)代碼如下: bool findcommon(int a,int size1,int b,int size2) int i; for(i=0;i<size1;i+) int start=0,end=size2-1,mid;
28、160; while(start<=end) mid=(start+end)/2;
29、60; if(ai=bmid) return true; else if (ai<bmid)
30、; end=mid-1; else start=mid+1;
31、 return false;后來(lái)發(fā)現(xiàn)有一個(gè) O(n)算法。因?yà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í)還沒碰到相同的數(shù)字,說(shuō)明數(shù)組中沒有相同的數(shù)字。 bool findcommon2(int a, int size1, in
32、t b, int size2) int i=0,j=0; while(i<size1 && j<size2) if(ai=bj) return tr
33、ue; if(ai>bj) j+; if(ai<bj)
34、60; i+; return false;4,最大子序列 問題:給定一整數(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è)問題,最簡(jiǎn)單也是最容易想到的那就是窮舉所有子序列的方法。利用三重循環(huán),依次求出所有子序列的和然后取最大的那個(gè)。當(dāng)然算法復(fù)雜度會(huì)達(dá)到O(n3)。顯然這種方法不是最優(yōu)的,下面給出一個(gè)算法復(fù)雜度為O(n)
35、的線性算法實(shí)現(xiàn),算法的來(lái)源于Programming Pearls一書。 在給出線性算法之前,先來(lái)看一個(gè)對(duì)窮舉算法進(jìn)行優(yōu)化的算法,它的算法復(fù)雜度為O(n2)。其實(shí)這個(gè)算法只是對(duì)對(duì)窮舉算法稍微做了一些修改:其實(shí)子序列的和我們并不需要每次都重新計(jì)算一遍。假設(shè)Sum(i, j)是Ai . Aj的和,那么Sum(i, j+1) = Sum(i, j) + Aj+1。利用這一個(gè)遞推,我們就可以得到下面這個(gè)算法: int max_sub(int a,int size) int i,j,v,max=a0; for(
36、i=0;i<size;i+) v=0; for(j=i;j<size;j+)
37、160; v=v+aj;/Sum(i, j+1) = Sum(i, j) + Aj+1 if(v>max) max=v;
38、60; return max;那怎樣才能達(dá)到線性復(fù)雜度呢?這里運(yùn)用動(dòng)態(tài)規(guī)劃的思想。先看一下源代碼實(shí)現(xiàn): int max_sub2(int a, int size) int i,max=0,temp_sum=0; for(i=0;i<size;i+)
39、160; temp_sum+=ai; if(temp_sum>max) max=temp_sum; else if(temp_sum<0)
40、60; temp_sum=0; return max;6,按單詞反轉(zhuǎn)字符串 并不是簡(jiǎn)單的字符串反轉(zhuǎn),而是按給定字符串里的單詞將字符串倒轉(zhuǎn)過(guò)來(lái),就是說(shuō)字符串里面的單詞還是保持原來(lái)的順序,這里的每個(gè)單詞用空格分開。例如:Here is 經(jīng)過(guò)反轉(zhuǎn)后變?yōu)椋?is Here如果只是簡(jiǎn)單的將所有字符串翻轉(zhuǎn)的話,可以遍歷字符串,將第一個(gè)字符和最后一個(gè)交換,第二個(gè)和倒數(shù)第
41、二個(gè)交換,依次循環(huán)。其實(shí)按照單詞反轉(zhuǎn)的話可以在第一遍遍歷的基礎(chǔ)上,再遍歷一遍字符串,對(duì)每一個(gè)單詞再反轉(zhuǎn)一次。這樣每個(gè)單詞又恢復(fù)了原來(lái)的順序。char* reverse_word(const char* str) int len = strlen(str); char* restr = new charlen+1; strcpy(restr,str); int i,j; &
42、#160; for(i=0,j=len-1;i<j;i+,j-) char temp=restri; restri=restrj; restrj=temp; &
43、#160; int k=0; while(k<len) i=j=k; while(restrj!=' ' && restrj!='' )
44、 j+; k=j+1; j-; for(;i<j;i+,j-) &
45、#160; char temp=restri; restri=restrj; restrj=temp;
46、60; return restr;如果考慮空間和時(shí)間的優(yōu)化的話,當(dāng)然可以將上面代碼里兩個(gè)字符串交換部分改為異或?qū)崿F(xiàn)。例如將 char temp=restri; restri=restrj;
47、 restrj=temp;改為 restri=restrj; restrj=restri; restri=restrj; 7,字符串反轉(zhuǎn) 我沒有記錯(cuò)的話是一道MSN的
48、筆試題,網(wǎng)上無(wú)意中看到的,拿來(lái)做了一下。題目是這樣的,給定一個(gè)字符串,一個(gè)這個(gè)字符串的子串,將第一個(gè)字符串反轉(zhuǎn),但保留子串的順序不變。例如:輸入:第一個(gè)字符串: "This is fishsky 's Chinese site: 子串: "fishsky"輸出: "nc/nc.moc.fishsky.www/:ptth :etis esenihC s'fishsky si sihT"一般的方法是先掃描一邊第一個(gè)字符串,然后用stack把它反轉(zhuǎn),同時(shí)記錄下子串出現(xiàn)的位置。然后再掃描一遍把記錄下來(lái)的子串再用stack反轉(zhuǎn)。我用的方法
49、是用一遍掃描數(shù)組的方法。掃描中如果發(fā)現(xiàn)子串,就將子串倒過(guò)來(lái)壓入堆棧。最后再將堆棧里的字符彈出,這樣子串又恢復(fù)了原來(lái)的順序。源代碼如下:#include <iostream>#include <cassert>#include <stack>using namespace std;/reverse the string 's1' except the substring 'token'.const char* reverse(const char* s1, const char* token)
50、 assert(s1 && token); stack<char> stack1; const char* ptoken = token, *head = s1, *rear = s1; while (*head != '')
51、160; while(*head!= '' && *ptoken = *head) ptoken+;
52、160; head+; if(*ptoken = '')/contain the token
53、160; const char* p; for(p=head-1;p>=rear;p-)
54、60; stack1.push(*p); ptoken = token; &
55、#160; rear = head; else
56、160; stack1.push(*rear); head=+rear; ptoken = token;
57、0; char * return_v = new charstrlen(s1)+1; int i=0; while(!stack1.empty()
58、160; return_vi+ = stack1.top(); stack1.pop(); return_vi=''
59、160; return return_v;int main(int argc, char* argv)cout<<"This is fishsky 's Chinese site: " cout<<reverse("This is fishsky's Chinese site: http:/www. fishsky "); r
60、eturn 0; 8, 刪除數(shù)組中重復(fù)的數(shù)字 問題:一個(gè)動(dòng)態(tài)長(zhǎng)度可變的數(shù)字序列,以數(shù)字0為結(jié)束標(biāo)志,要求將重復(fù)的數(shù)字用一個(gè)數(shù)字代替,例如:將數(shù)組 1,1,1,2,2,2,2,2,7,7,1,5,5,5,0 轉(zhuǎn)變成1,2,7,1,5,0 問題比較簡(jiǎn)單,要注意的是這個(gè)數(shù)組是動(dòng)態(tài)的。所以避免麻煩我還是用了STL的vector。#include <iostream>#include <vector>using namespace std;/remove the duplicated numbers in an intger array, the array was end wi
61、th 0;/e.g. 1,1,1,2,2,5,4,4,4,4,1,0 ->1,2,5,4,1,0void static remove_duplicated(int a, vector<int>& _st) _st.push_back(a0); for(int i=1;_st_st.size()-1!=0;i+)
62、0; if(ai-1!=ai) _st.push_back(ai); 當(dāng)然如果可以改變?cè)瓉?lái)的數(shù)組的話,可以不用STL,僅需要指針操作就可以了。下面這個(gè)程序?qū)⑿薷脑瓉?lái)數(shù)組的內(nèi)容。void static remove_duplicated2(int a
63、) if(a0=0 | a=NULL) return; int insert=1,current=1; while(acurrent!=0)
64、 if(acurrent!=acurrent-1) ainsert=acurrent; &
65、#160; insert+; current+; else current+;
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 統(tǒng)編版三年級(jí)語(yǔ)文下冊(cè)第六單元達(dá)標(biāo)測(cè)試卷(含答案)
- 關(guān)于食品gmp的單選試題及答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)押題練習(xí)試題B卷含答案
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)與服務(wù)自我檢測(cè)試卷A卷附答案
- 酒店保潔合同(2篇)
- 2025年全國(guó)碩士研究生考試《政治》模擬試卷一
- H2H行業(yè)虛擬現(xiàn)實(shí)技術(shù)研究與應(yīng)用方案
- 智慧之書少兒版讀后感
- 火鍋店合伙人協(xié)議書
- 童年記憶繪本故事賞析與創(chuàng)作啟示
- 勞務(wù)派遣勞務(wù)外包項(xiàng)目方案投標(biāo)文件(技術(shù)方案)
- 小學(xué)生主題班會(huì) 傳承雷鋒精神 爭(zhēng)做時(shí)代新人 課件
- 小學(xué)科學(xué)教育科學(xué)三年級(jí)下冊(cè)植物的生長(zhǎng)變化開花了PPT
- 生育保險(xiǎn)待遇申請(qǐng)表
- 春節(jié)復(fù)工復(fù)產(chǎn)安全交底
- 四年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)教案 跟著節(jié)氣去探究 全國(guó)通用
- 培智康復(fù)課教案模板(共7篇)
- 楊光斌《政治學(xué)導(dǎo)論》考研重點(diǎn)整理(自己整理的超實(shí)用)
- CCS電氣電子產(chǎn)品型式認(rèn)可試驗(yàn)指南
- 員工面試登記表
- rcs-9611c-線路保護(hù)測(cè)控裝置-技術(shù)使用說(shuō)明
評(píng)論
0/150
提交評(píng)論