首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級 | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計算機(jī)等級考試 | 軟件水平考試 | 職稱計算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會計從業(yè)資格考試會計證) | 經(jīng)濟(jì)師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務(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)紀(jì)人 | 投資項目管理師 | 土地登記代理人 | 環(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ù)就是指能夠被計算機(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)準(zhǔn),但是它包括以下三方面內(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)則是指用計算機(jī)語言如何表示結(jié)點之間的這種關(guān)系。如上面的表,在計算機(jī)語言中描述為連續(xù)存放在一片內(nèi)存單元中,還是隨機(jī)的存放在內(nèi)存中再用指針把它們鏈接在一起,這兩種表示法就成為兩種不同的存儲結(jié)構(gòu)。(注意,在本課程里,我們只在高級語言的層次上討論存儲結(jié)構(gòu)。) 
  第三個概念就是對數(shù)據(jù)的運算,比如一張表格,我們需要進(jìn)行查找,增加,修改,刪除記錄等工作,而怎么樣才能進(jìn)行這樣的操作呢? 這也就是數(shù)據(jù)的運算,它不僅僅是加減乘除這些算術(shù)運算了,在數(shù)據(jù)結(jié)構(gòu)中,這些運算常常涉及算法問題。
  弄清了以上三個問題,就可以弄清數(shù)據(jù)結(jié)構(gòu)這個概念。

       那么我們怎樣把這個表中的數(shù)據(jù)存儲到計算機(jī)里呢? 用高級語言如何表示各結(jié)點之間的關(guān)系呢? 是用一片連續(xù)的內(nèi)存單元來存放這些記錄(如用數(shù)組表示)還是隨機(jī)存放各結(jié)點數(shù)據(jù)再用指針進(jìn)行鏈接呢? 這就是存儲結(jié)構(gòu)的問題,我們都是從高級語言的層次來討論這個問題的。(所以各位趕快學(xué)C語言吧)。
  最后,我們有了這個表(數(shù)據(jù)結(jié)構(gòu)),肯定要用它,那么就是要對這張表中的記錄進(jìn)行查詢,修改,刪除等操作,對這個表可以進(jìn)行哪些操作以及如何實現(xiàn)這些操作就是數(shù)據(jù)的運算問題了。


--------------------------------------------------------------------------------
1.3 常用的存儲表示方法有哪幾種?
常用的存儲表示方法有四種:
◆ 順序存儲方法:它是把邏輯上相鄰的結(jié)點存儲在物理位置相鄰的存儲單元里,結(jié)點間的邏輯關(guān)系由存儲單元的鄰接關(guān)系來體現(xiàn)。由此得到的存儲表示稱為順序存儲結(jié)構(gòu)。
◆ 鏈接存儲方法:它不要求邏輯上相鄰的結(jié)點在物理位置上亦相鄰,結(jié)點間的邏輯關(guān)系是由附加的指針字段表示的。由此得到的存儲表示稱為鏈?zhǔn)酱鎯Y(jié)構(gòu)。
◆ 索引存儲方法:除建立存儲結(jié)點信息外,還建立附加的索引表來標(biāo)識結(jié)點的地址。
◆ 散列存儲方法:就是根據(jù)結(jié)點的關(guān)鍵字直接計算出該結(jié)點的存儲地址。

--------------------------------------------------------------------------------
1.4 設(shè)三個函數(shù)f,g,h分別為 f(n)=100n^3+n^2+1000 , g(n)=25n^3+5000n^2 , h(n)=n^1.5+5000nlgn 請判斷下列關(guān)系是否成立:
(1) f(n)=O(g(n)) 
(2) g(n)=O(f(n)) 
(3) h(n)=O(n^1.5)
(4) h(n)=O(nlgn)
◆ (1)成立。 
◇ 這里我們復(fù)習(xí)一下漸近時間復(fù)雜度的表示法T(n)=O(f(n)),這里的"O"是數(shù)學(xué)符號,它的嚴(yán)格定義是"若T(n)和f(n)是定義在正整數(shù)集合上的兩個函數(shù),則T(n)=O(f(n))表示存在正的常數(shù)C和n0 ,使得當(dāng)n≥n0時都滿足0≤T(n)≤C·f(n)。"用容易理解的話說就是這兩個函數(shù)當(dāng)整型自變量n趨向于無窮大時,兩者的比值是一個不等于0的常數(shù)。這么一來,就好計算了吧。第(1)題中兩個函數(shù)的最高次項都是n^3,因此當(dāng)n→∞時,兩個函數(shù)的比值是一個常數(shù),所以這個關(guān)系式是成立的。 
◆ (2)成立。
◆ (3)成立。
◆ (4)不成立。

--------------------------------------------------------------------------------
1.5 設(shè)有兩個算法在同一機(jī)器上運行,其執(zhí)行時間分別為100n^2和2^n,要使前者快于后者,n至少要多大?
◆ 15
◇ 最簡單最笨的辦法就是拿自然數(shù)去代唄。假定n取為10,則前者的值是10000,后者的值是1024,小于前者,那我們就加個5,用15代入得前者為22500,后者為32768,已經(jīng)比前者大但相差不多,那我們再減個1,用14代入得,前者為19600,后者為16384,又比前者小了,所以結(jié)果得出來就是n至少要是15. 

--------------------------------------------------------------------------------
1.6 設(shè)n為正整數(shù),利用大"O"記號,將下列程序段的執(zhí)行時間表示為n的函數(shù)。

1.6 設(shè)n為正整數(shù),利用大"O"記號,將下列程序段的執(zhí)行時間表示為n的函數(shù)。
(1) i=1; k=0 
while(i { k=k+10*i;i++;
}  ◆ T(n)=n-1 
∴ T(n)=O(n)
◇ 這個函數(shù)是按線性階遞增的 
(2) i=0; k=0;
do{
k=k+10*i; i++; 
}
while(i  ◆ T(n)=n 
∴ T(n)=O(n)
◇ 這也是線性階遞增的 
(3) i=1; j=0; 
while(i+j<=n) 
{
if (i else i++;
}  ◆ T(n)=n/2 
∴ T(n)=O(n)
◇ 雖然時間函數(shù)是n/2,但其數(shù)量級仍是按線性階遞增的。 
(4)x=n; // n>1 
while (x>=(y+1)*(y+1))
y++;  ◆ T(n)=n1/2
∴ T(n)=O(n1/2)
◇ 最壞的情況是y=0,那么循環(huán)的次數(shù)是n1/2次,這是一個按平方根階遞增的函數(shù)。 
(5) x=91; y=100; 
while(y>0)
if(x>100)
{x=x-10;y--;}
else x++; ◆ T(n)=O(1)
◇ 這個程序看起來有點嚇人,總共循環(huán)運行了1000次,但是我們看到n沒有? 沒。這段程序的運行是和n無關(guān)的,就算它再循環(huán)一萬年,我們也不管他,只是一個常數(shù)階的函數(shù)。 
--------------------------------------------------------------------------------
1.7 算法的時間復(fù)雜度僅與問題的規(guī)模相關(guān)嗎?
◆ No,事實上,算法的時間復(fù)雜度不僅與問題的規(guī)模相關(guān),還與輸入實例中的元素取值等相關(guān),但在最壞的情況下,其時間復(fù)雜度就是只與求解問題的規(guī)模相關(guān)的。我們在討論時間復(fù)雜度時,一般就是以最壞情況下的時間復(fù)雜度為準(zhǔn)的。

上一頁  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)容,請注明出處。