首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
華為認證 | Java認證
公務(wù)員 | 報關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護士
會計從業(yè)資格考試會計證) | 經(jīng)濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務(wù)師
注冊資產(chǎn)評估師 | 高級會計師 | ACCA | 統(tǒng)計師 | 精算師 | 理財規(guī)劃師 | 國際內(nèi)審師
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價師 | 土地估價師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀人 | 投資項目管理師 | 土地登記代理人 | 環(huán)境影響評價師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師
繽紛校園 | 實用文檔 | 英語學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員資料 > 正文

2006年軟考程序員數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)筆記

數(shù)據(jù)就是指能夠被計算機識別、存儲和加工處理的信息的載體。
  數(shù)據(jù)元素是數(shù)據(jù)的基本單位,有時一個數(shù)據(jù)元素可以由若干個數(shù)據(jù)項組成。數(shù)據(jù)項是具有獨立含義的最小標(biāo)識單位。如整數(shù)這個集合中,10這個數(shù)就可稱是一個數(shù)據(jù)元素.又比如在一個數(shù)據(jù)庫(關(guān)系式數(shù)據(jù)庫)中,一個記錄可稱為一個數(shù)據(jù)元素,而這個元素中的某一字段就是一個數(shù)據(jù)項。
  數(shù)據(jù)結(jié)構(gòu)的定義雖然沒有標(biāo)準,但是它包括以下三方面內(nèi)容:邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)、和對數(shù)據(jù)的操作。這一段比較重要,我用自己的語言來說明一下,大家看看是不是這樣。 
 比如一個表(數(shù)據(jù)庫),我們就稱它為一個數(shù)據(jù)結(jié)構(gòu),它由很多記錄(數(shù)據(jù)元素)組成,每個元素又包括很多字段(數(shù)據(jù)項)組成。那么這張表的邏輯結(jié)構(gòu)是怎么樣的呢? 我們分析數(shù)據(jù)結(jié)構(gòu)都是從結(jié)點(其實也就是元素、記錄、頂點,雖然在各種情況下所用名字不同,但說的是同一個東東)之間的關(guān)系來分析的,對于這個表中的任一個記錄(結(jié)點),它只有一個直接前趨,只有一個直接后繼(前趨后繼就是前相鄰后相鄰的意思),整個表只有一個開始結(jié)點和一個終端結(jié)點,那我們知道了這些關(guān)系就能明白這個表的邏輯結(jié)構(gòu)了。 
  而存儲結(jié)構(gòu)則是指用計算機語言如何表示結(jié)點之間的這種關(guān)系。如上面的表,在計算機語言中描述為連續(xù)存放在一片內(nèi)存單元中,還是隨機的存放在內(nèi)存中再用指針把它們鏈接在一起,這兩種表示法就成為兩種不同的存儲結(jié)構(gòu)。(注意,在本課程里,我們只在高級語言的層次上討論存儲結(jié)構(gòu)。) 
  第三個概念就是對數(shù)據(jù)的運算,比如一張表格,我們需要進行查找,增加,修改,刪除記錄等工作,而怎么樣才能進行這樣的操作呢? 這也就是數(shù)據(jù)的運算,它不僅僅是加減乘除這些算術(shù)運算了,在數(shù)據(jù)結(jié)構(gòu)中,這些運算常常涉及算法問題。
  弄清了以上三個問題,就可以弄清數(shù)據(jù)結(jié)構(gòu)這個概念。

(答案及點評) 3.4 設(shè)長度為n的鏈隊用單循環(huán)鏈表表示,若設(shè)頭指針,則入隊出隊操作的時間為何? 若只設(shè)尾指針呢? 


3.4答:當(dāng)只設(shè)頭指針時,出隊的時間為1,而入隊的時間需要n,因為每次入隊均需從頭指針開始查找,找到最后一個元素時方可進行入隊操作。若只設(shè)尾指針,則出入隊時間均為1。因為是循環(huán)鏈表,尾指針?biāo)傅南乱粋元素就是頭指針?biāo)冈,所以出隊時不需要遍歷整個隊列。
第四章:串(包括習(xí)題與答案及要點)

轉(zhuǎn)摘www.Ezikao.com

--------------------------------------------------------------------------------
本章介紹了串的邏輯結(jié)構(gòu),存儲結(jié)構(gòu)及串上的基本運算,由于在高級語言中已經(jīng)提供了較全善的串處理功能,因此本章的重點是掌握在串上實現(xiàn)的模式匹配算法。同時這也是本章的難點。但是從全書來講,這屬于較簡單的一章內(nèi)容。 

--------------------------------------------------------------------------------
1.串及其運算(領(lǐng)會)(這些內(nèi)容比較容易理解,不用死記)
串就是字符串,是一種特殊的線性表,它的每個結(jié)點僅由一個字符組成。
空串:是指長度為零的串,也就是串中不包含任何字符(結(jié)點)。
空白串:指串中包含一個或多個空格字符的串。不同與空串,它的結(jié)點就是一個空格字符。
在一個串中任意個連續(xù)字符組成的子序列稱為該串的子串,包含子串的串就稱為主串。子串在主串中的序號就是指子串在主串中首次出現(xiàn)的位置。如A="I love you" B="love",則B在A中的序號為3,注意空格也是字符。
空串是任意串的子串,任意串是他自身的子串。
串分為兩種:串常量和串變量。串常量在程序中不能改變,串變量則可以。
關(guān)于串的基本運算,基本上在C語言中已經(jīng)學(xué)過,主要有
求串長strlen(char *s)、
串復(fù)制strcpy(char *to,char *from)、
串聯(lián)接strcat(char *to,char *from)、
串比較charcmp(char *s1,char *s2)
和字符定位strchr(char *s, char c)等
這些基本運算通過練習(xí)來掌握。

--------------------------------------------------------------------------------
2.串的存儲結(jié)構(gòu)(簡單應(yīng)用)
串是特殊的線性表(結(jié)點是字符),所以串的存儲結(jié)構(gòu)與線性表的存儲結(jié)構(gòu)類似。
串的順序存儲結(jié)構(gòu)簡稱為順序串,順序串又可按存儲分配的不同分為靜態(tài)存儲分配的順序串和動態(tài)存儲分配的順序串。
靜態(tài)的意思可簡單地理解為一個確定的存儲空間,它的長度是不可變的。如直接使用定長的字符數(shù)組來定義一個串。它的優(yōu)點是涉及串長的操作速度快,因為它的最大長度是不變的。
動態(tài)存儲分配就是在定義串時不分配存儲空間,直到需要使用時按所需串的長度分配存儲單元給它,并且在運行中還可以根據(jù)需要變化串的長度,這就是動態(tài)分配。不過這樣的串仍是順序存儲的,也就是說指針指向串的首地址,后面的結(jié)點是連續(xù)存儲的。
串的鏈式存儲就是用單鏈表的方式存儲串值,串的這種鏈式存儲結(jié)構(gòu)簡稱為鏈串。鏈串與單鏈表的差異只是它的結(jié)點數(shù)據(jù)域為單個字符。這種存儲結(jié)構(gòu)方便于串的插入和刪除操作,但是空間利用率不高,因為存放每一個字符要"搭配"一個指向下一字符的地址,而地址所占空間是比較大的。為了解決這種"存儲密度"過低的狀況,可以讓一個結(jié)點存儲多個字符,事實上這是順序串和鏈串的綜合(折衷)。

--------------------------------------------------------------------------------
本章的重點和難點就是串運算的實現(xiàn),特別是順序串上子串定位的運算。
子串定位運算又稱串的"模式匹配"或"串匹配",就是在主串中查找出子串出現(xiàn)的位置,這在應(yīng)用中非常廣泛,比如文本編輯中的"查找和替換"用到的就是子串定位運算的算法。
在串匹配中,將主串稱為目標(biāo)(串),子串稱為模式(串),我們這樣想象,子串就如同一個模板(樣本),用它在目標(biāo)上對比,從頭往后比較,凡是遇到一模一樣的那么一段,就算找到一個位置了(我們就說,從這個位置開始的匹配成功)。用很專業(yè)的很酷的話說就是"模式在目標(biāo)中出現(xiàn)"(我想起了警匪片里的對話),如果這個模板對應(yīng)的目標(biāo)串中有不一樣的字符出現(xiàn),那么這個位置就匹配失敗。
當(dāng)我們用這個模子依次從目標(biāo)的頭部往后移,移動到的位置就叫位移,如果每次向右移動1格,那么每次的位移就加上1。
每次移動后要看看模板里的字符和目標(biāo)中相應(yīng)的字符是否相等,如果都相同,這次位移就叫有效位移(其實就是從這個位置開始的匹配成功)
另外有一個合法位移和不合法位移的概念,就是說,移動一個位置后,如果模板的最后一個字符還沒有超出目標(biāo)串中最后一個字符時,這個位移就是合法位移,如果超出了,那么就沒有比較的意義了,這時就是不合法位移。
這是比較容易理解的,串匹配問題就是找出給定模式串P在給定目標(biāo)串T中首次出現(xiàn)的有效位移或者是全部有效位移。
具體的串匹配算法也不是很難理解,就是用兩個循環(huán),外循環(huán)用于進行模式的位移,內(nèi)循環(huán)進行模板內(nèi)每個字符的比較(判斷是否有效位移)。關(guān)于串匹配的時間復(fù)雜度,在最壞的情況下就是目標(biāo)串和模式串分別是"a^n-1b"和"a^m-1b"的形式,就是說,每一次合法位移后,在內(nèi)循環(huán)中都要比較m個字符才知道是不是有效位移(前面的字符都是一樣的)。所以最壞的情況下時間復(fù)雜度是O((n-m+1)m),假如m與n同階的話則它是O(n^2)。

上一頁  1 2 3 4 5 6 7 8 9 10  下一頁
文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。