第1章程序員試題歷年考試情況分析_第1頁
第1章程序員試題歷年考試情況分析_第2頁
第1章程序員試題歷年考試情況分析_第3頁
第1章程序員試題歷年考試情況分析_第4頁
第1章程序員試題歷年考試情況分析_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第1章 程序員試題歷年考試情況分析1.1 上午題歷年試題及考點(diǎn)分析程序員考試科目1計算機(jī)軟硬件基礎(chǔ)知識,也就是程序員上午題,是以選擇題的方式進(jìn)行考試的,其知識點(diǎn)包括計算機(jī)科學(xué)基礎(chǔ)、計算機(jī)硬件基礎(chǔ)知識、計算機(jī)軟件基礎(chǔ)知識、軟件開發(fā)和維護(hù)、計算機(jī)安全知識、標(biāo)準(zhǔn)化基礎(chǔ)知識、專業(yè)英語等方面。在上午題的知識點(diǎn)中,主要以記憶為主,要比較全面地進(jìn)行復(fù)習(xí),在復(fù)習(xí)的時候不必太深究。相對于下午題來說,上午題是比較簡單的。表1.1是從2000年到2006年上半年所有上午試題的知識點(diǎn)分布。表1.1 上午試題知識點(diǎn)分布2000年2001年2002年2003年2004年(上)2004年(下)2005年(上)2005年(下

2、)2006年(上)數(shù)據(jù)結(jié)構(gòu)10106888799信息技術(shù)基礎(chǔ)004965645操作系統(tǒng)555555655程序設(shè)計語言558556676軟件工程559646746面向?qū)ο?93333010數(shù)據(jù)庫原理10107556756多媒體553333433計算機(jī)硬件基礎(chǔ)202015151615131615網(wǎng)絡(luò)原理555555466其他000053564專業(yè)英語101010101010101010合計758475747575757675從表1.1中可以看出,知識點(diǎn)的考點(diǎn)分布沒有太大的變化,基本上覆蓋了大學(xué)本科計算機(jī)專業(yè)的所有專業(yè)課程。近三四次的考試中,還出現(xiàn)了一些日常操作中的題目,如Windows的操作及Of

3、fice系列軟件的操作,當(dāng)然,這些對考生來說不是什么難題,因為大家整天都在使用。在復(fù)習(xí)的時候不宜過早地復(fù)習(xí)上午試題,因為容易忘記,編者建議在考試前半個月開始復(fù)習(xí)上午題,多看書,多看練習(xí),特別是一些練習(xí)題后面的解答,都是復(fù)習(xí)和記憶的重點(diǎn)。還有就是要把近兩三年的試題都要看一遍、做一遍,這樣比較容易把握以后的出題方向。1.2 下午題歷年試題及考點(diǎn)分析程序員考試科目2程序設(shè)計,也就是我們常說的下午題,是以筆試填空的方式進(jìn)行考試,1996年以前是考C語言和CASL匯編語言,1996年到1998年考C語言和FORTRAN語言,1999年到2004年都只考C語言,2004年出了新考綱后就擴(kuò)充到必選C,可選C

4、+、Java、VB中的一種語言,并且一年考試兩次,讓考生有更多的機(jī)會參加這個考試。1999年以后,程序員考綱上所涉及的面比較廣,但實際上所考的內(nèi)容主要是C語言基礎(chǔ)上的數(shù)據(jù)結(jié)構(gòu),在2004年新考綱之前,雖然有提及C+和面向?qū)ο蟮脑O(shè)計方法,但實際上考試的內(nèi)容全部是C語言,新考綱出來之后,試題的題型結(jié)構(gòu)有所改變,可以選做部分試題,加入了面向?qū)ο蟮某绦蛟O(shè)計,使用的語言也從單一的C語言擴(kuò)充到C+、Java、VB,讓考生有更多的選擇機(jī)會,但同時也增加了一定的難度,使得考生必須在掌握C語言之外還要掌握一門面向?qū)ο蟮某绦蛟O(shè)計語言。當(dāng)然,這也是程序設(shè)計語言的一個必然的發(fā)展方向。下面從2000年到2006年上半年

5、所有試題所涉及的考點(diǎn)進(jìn)行列表分析。1.2.1 2000年至2006年試題2000年下午試題一共有4道題,25個空,所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如表1.2所示。表1.2 2000年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一鏈表合并線性表指針判斷數(shù)組元素遞增數(shù)組、遞歸數(shù)組二長整數(shù)格式化整數(shù)數(shù)組求組合整數(shù)數(shù)組三中綴表達(dá)式轉(zhuǎn)后綴棧指針表達(dá)式計算棧數(shù)組四貪心算法數(shù)組數(shù)組2001年下午試題一共5道題,25個空,所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如 表1.3所示。2002年下午試題一共5道題,25個空,所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如 表1.4所示。2003年下午試題一共5道題,25個

6、空,所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如 表1.5所示。表1.3 2001年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一字符串比較字符串指針計算鞍點(diǎn)矩陣數(shù)組二鏈表逆置線性表指針三文件的合并與恢復(fù)文件操作文件四雙向循環(huán)鏈表操作線性表指針五整數(shù)的分解數(shù)組、遞歸數(shù)組表1.4 2002年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一顯示器編程多媒體、移位及邏輯運(yùn)算數(shù)組二字符串連接字符串指針求數(shù)組中最大元素下標(biāo)數(shù)組數(shù)組三直接插入排序排序數(shù)組數(shù)組逆置數(shù)組、遞歸數(shù)組四素數(shù)篩選素數(shù)數(shù)組五二叉排序樹結(jié)點(diǎn)插入二叉排序樹、查找、遞歸指針表1.5 2003年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存

7、儲 結(jié) 構(gòu)一查找折半查找、流程圖數(shù)組二查找字符串指針查找五叉排序樹、非遞歸指針三排序線性表、鏈表操作指針?biāo)脑匾苿訑?shù)組數(shù)組五棧和隊列的操作棧和隊列指針2004年上半年下午試題一共9道題,可以選做其中的25個空(或問題),所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如表1.6所示。表1.6 2004年上半年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一快速排序快速排序、N-S圖、遞歸數(shù)組任選一題二判斷回文字符串指針字符串處理字符串?dāng)?shù)組三VB基礎(chǔ)VB基礎(chǔ)知識任選一題四進(jìn)制轉(zhuǎn)換數(shù)組、棧操作數(shù)組五VB組件應(yīng)用下拉列表框、文本框續(xù)表 題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)任選一題六鏈表操作線性表指針七VB窗

8、口操作時間組件任選一題八所得稅計算數(shù)組數(shù)組九VB個人稅計算選擇結(jié)構(gòu)程序設(shè)計2004年下半年下午試題一共8道題,可以選做其中的25個空(或問題),所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如表1.7所示。表1.7 2004年下半年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一二進(jìn)制求補(bǔ)流程圖數(shù)組二排序交換排序及其效率數(shù)組三元素移動指針運(yùn)算、鏈表操作鏈表任選一題四統(tǒng)計競賽結(jié)果結(jié)構(gòu)體、選擇排序結(jié)構(gòu)體、數(shù)組五VB(程序內(nèi)容和第四題C語言一樣)常用控件、基本函數(shù)任選一題六C+基礎(chǔ)繼承、抽象類、動態(tài)綁定七VB數(shù)據(jù)庫應(yīng)用文本框、命令按鈕、數(shù)據(jù)控件八Java基礎(chǔ)繼承、抽象類、動態(tài)綁定2005年上半年下午試題一

9、共8道題,可以選做其中的25個空(或問題),所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如表1.8所示。表1.8 2005年上半年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一奇偶校驗異或運(yùn)算、流程圖二最大公約數(shù)最大公約數(shù)字符串處理字符串指針三二叉樹結(jié)點(diǎn)的查找與刪除二叉樹二叉樹任選一題四子方陣查找二維數(shù)組數(shù)組五VB基礎(chǔ)組件列表框的常用屬性任選一題六Java應(yīng)用程序Java Applet類七VB基礎(chǔ)組件VB內(nèi)部組件DriveListBox、DirListBox、FileListBox八C+基礎(chǔ)枚舉類型2005年下半年下午試題一共8道題,可以選做其中的25個空(或問題),所涉及的算法、知識點(diǎn)及數(shù)據(jù)存

10、儲結(jié)構(gòu)如表1.9所示。2006年上半年下午試題一共8道題,可以選做其中的25個空(或問題),所涉及的算法、知識點(diǎn)及數(shù)據(jù)存儲結(jié)構(gòu)如表1.10所示。表1.9 2005年下半年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一字符串處理字符串處理、流程圖數(shù)組二線性表查找線性表數(shù)組三二分法查找線性表、二分查找數(shù)組任選一題四VB基礎(chǔ)標(biāo)簽、文本框、命令按鈕五二叉排序樹創(chuàng)建二叉排序樹樹任選一題六C+基礎(chǔ)類的定義、查錯七VB基礎(chǔ)時鐘組件及圖形編程八Java類基礎(chǔ)Stock類和JavaMain類表1.10 2006年上半年下午試題考點(diǎn)分析題 號算 法知 識 點(diǎn)存 儲 結(jié) 構(gòu)一矩陣轉(zhuǎn)置矩陣、流程圖矩陣二普通數(shù)

11、據(jù)處理循環(huán)三棧操作棧的操作棧任選一題四數(shù)據(jù)處理結(jié)構(gòu)體數(shù)組處理結(jié)構(gòu)體數(shù)組五VB基本控件基本控件任選一題六C+基礎(chǔ)類的定義、查錯七VB基礎(chǔ)時鐘組件及圖形編程八Java類基礎(chǔ)類、查錯1.2.2 命題方向的變化及分析對上面的列表進(jìn)行分析,我們可以看出一些程序員考試命題方向的變化,現(xiàn)從幾方面列舉如下。1語言的選擇從1996年以前的C語言和CASL匯編語言,到C語言和FORTRAN語言,再到只考C語言,以及到現(xiàn)在的在C語言和C+、Java、VB中進(jìn)行選擇,可見軟考始終緊跟著社會的需要,也緊跟著編程語言的發(fā)展方向,唯有發(fā)展與改變才能讓軟考充滿活力。這也許是軟考越來越受到社會認(rèn)同的一個重要原因!下面我們再來看

12、一個表,分析一下所考語言在選擇上有什么變化,如表1.11所示。從表1.11中可以得到一個信息:C語言始終是考試的最為突出的重點(diǎn)。例如,在2004年上半年改了考綱后的第一次考試中,最多可以選擇20個VB空,而只選5個C語言的空,但在接下來的下半年考試中,這個情況就馬上改了,最多只可選10個VB空,最少要做15個C語言空,而且一直延用至今。在考綱所增加的幾種語言當(dāng)中,Visual Basic是可表1.11 程序語言題量變化表(單位:空)時 間CVBC+Java最多可選C語言數(shù)量最多可選VB數(shù)量最多可選Java數(shù)量最多可選C+數(shù)量2000年25000250002001年25000250002002年

13、25000250002003年25000250002004年上半年2520002520002004年下半年2010552010552005年上半年2010552010552005年下半年2010552010552006年上半年201055201055供選題較多的一種,它是Microsoft公司開發(fā)的基于BASIC的可視化程序設(shè)計語言,它在其編程系統(tǒng)中采用了面向?qū)ο?、事件?qū)動的編程機(jī)制,用一種巧妙的方法把Windows編程的復(fù)雜性封裝起來,提供了一種所見即所得的可視化程序設(shè)計方法,為廣大的計算機(jī)專業(yè)學(xué)習(xí)人員、編程愛好者的程序編寫帶來了極大的方便。所以,本書在最后一章為考生講解Visual Bas

14、ic程序設(shè)計,希望可以為讀者沖刺程序員考試提供一定的幫助。2知識點(diǎn)的選擇從2000年到2006年試題所考查的知識點(diǎn)上來看,C語言及數(shù)據(jù)結(jié)構(gòu)的主要考查的知識點(diǎn)沒有太大的變化,線性表、鏈表、字符串、二叉樹、排序和查找等幾大主要知識點(diǎn)在不斷的輪著出現(xiàn)。所以,本書將對這些主要知識點(diǎn)在解題中的運(yùn)用進(jìn)行重點(diǎn)講解和分析,但關(guān)于這些知識點(diǎn)本身的基本概念則只是略提,讀者可通過查閱數(shù)據(jù)結(jié)構(gòu)的相關(guān)教材去復(fù)習(xí)那些基礎(chǔ)知識。3題型的選擇從軟考的題型來看,2002年以前的考試基本上是以傳統(tǒng)題型為主,多數(shù)考經(jīng)典算法,只對各種常用算法熟練掌握即可通過。但從2002年以后,題型逐漸開始變化。如2002年的下午第一題就不再以傳統(tǒng)

15、的方式出題,而是以算法分析的方式,或是說程序文檔化的方式進(jìn)行考查,要求能夠讀懂對問題的分析。這是一個很大的突破,要求應(yīng)試者不只是會做一些傳統(tǒng)的題目,還要學(xué)會分析一個問題,從而得出解決問題的算法。到2003年的下午第一題,在2002年的基礎(chǔ)上,題型進(jìn)一步改成以偽代碼的形式。到2004年上半年新考綱后,下午第一題變?yōu)橛肗-S圖形式描述算法的題型,由于流程圖、N-S圖都是用來描述算法的非??茖W(xué)而且經(jīng)典的方法,所以從2004年上半年出現(xiàn)這種題型后,一直到2006年上半年的考試,每次的下午題第一題都是這種題型,相信以后這種題型還會繼續(xù)出現(xiàn)。其他一些題目的題型上也有一定的變化,以前傳統(tǒng)的各種較為經(jīng)典的算法

16、出現(xiàn)得越來越少,取而代之的是各種比較新的應(yīng)用型的題目,或者是把各種經(jīng)典的算法集中到一起出一些比較綜合性質(zhì)的題目。特別是一些處理比較現(xiàn)實問題的題目,通常都是以比較大篇幅的題目出現(xiàn)。這類型的題目所用到的算法不會難,主要是要求考生比較快就可以理解題目的意思,從而把握出題者的思路,快速地做出解答。當(dāng)然,只要我們把基礎(chǔ)的算法都較為熟練地掌握后,題型上的變化并不會給我們解題帶來多大的影響。1.3 個人經(jīng)驗及應(yīng)試建議1.3.1 作者輔導(dǎo)經(jīng)驗C語言是下午題的難點(diǎn),如果C語言學(xué)得比較好,在上午題的基礎(chǔ)知識上下一些功夫,再學(xué)一種面向?qū)ο蟮木幊?,如VB、C+或Java,我個人覺得VB比較簡單。本科大二、大三的學(xué)生用

17、一到兩個月的課余時間來作準(zhǔn)備,一般來說通過率是比較高的。??粕鄬碚f時間要長一點(diǎn),認(rèn)真的話,半年也差不多了。當(dāng)然,這不是絕對的,我遇到過復(fù)習(xí)兩個星期就通過的學(xué)生,因為他的C語言和數(shù)據(jù)結(jié)構(gòu)學(xué)得很好。筆者有過多年的程序員輔導(dǎo)經(jīng)驗,發(fā)現(xiàn)在程序員的應(yīng)試準(zhǔn)備過程中,最大難度的還是C語言及數(shù)據(jù)結(jié)構(gòu),如果用兩個月的時間來準(zhǔn)備,那么要用一個半月的時間來復(fù)習(xí)C語言和數(shù)據(jù)結(jié)構(gòu),另外在考試前的半個月,認(rèn)真地復(fù)習(xí)上午試題的基礎(chǔ)部分。以這種時間安排方式,相對來說,比較容易通過程序員考試。除本書外,個人建議參考資料兩本:一本是清華大學(xué)出版社出版的程序員教程,此教程比較詳細(xì)地講解了上午題的內(nèi)容。另一本是清華大學(xué)出版社出版

18、的C語言程序設(shè)計(第二版),譚浩強(qiáng)著,此書對C語言的講解可謂是經(jīng)典之作。學(xué)習(xí)C語言的時候,要多進(jìn)行練習(xí),這個是基礎(chǔ),把基礎(chǔ)打好后,再進(jìn)入到數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最好辦法是認(rèn)真地看算法,仔細(xì)分析算法的運(yùn)行過程,體會各種數(shù)據(jù)結(jié)構(gòu)的定義、用途及其基本操作。對各種不同的數(shù)據(jù)結(jié)構(gòu)的常規(guī)算法要非常熟練,如樹、鏈表、棧等結(jié)構(gòu)的基本操作是要熟記下來的。1.3.2 應(yīng)試建議程序員解題速度是練出來的,熟能生巧,只有通過大量的習(xí)題的調(diào)試或解答才能夠達(dá)到比較快的速度和以不變應(yīng)萬變的程度。不要認(rèn)為大量練習(xí)只是簡單的題海戰(zhàn)術(shù),在任何學(xué)習(xí)過程中,只有經(jīng)過大量的練習(xí),才能達(dá)到從量變到質(zhì)變的過程。學(xué)習(xí)從來都是沒有捷徑可

19、尋的。特別要鍛煉的是讀別人程序的能力,能夠從程序中比較快速地讀出程序編寫者的意圖也就成功了一半。一個比較好的建議就是,在看本書提供的一些算法的時候,先不要看提示,只看代碼,練習(xí)從代碼就可以看出整個題目的意思。剛開始會比較難,但習(xí)慣一段時間后,對將來做程序員的試題有很大的幫助。本書的最大特點(diǎn)是編排了大量的練習(xí)題,特別是程序題。可以這樣說,只要把本書所列的程序做熟并理解,下午題的C語言部分就不用擔(dān)心了。從最近兩年的試題變化來看,C語言試題呈現(xiàn)出偏重基礎(chǔ)題,偏重于應(yīng)用,而難度不會太大。做完題之后要檢查,如果變量多的話,列一個變量表,模擬檢查運(yùn)行情況,看變量的變化,用這種方法可以比較準(zhǔn)確地查出程序是否

20、出錯。1.3.3 解題方法我們在做下午題的時候,可以大概依照如下的思路來做解答。1理解題意主要是根據(jù)問題的描述來確定問題的已知條件,并了解算法(程序)要達(dá)到的目的。通俗地講,就是要知道問題的輸入和輸出。2確定算法每個題目在前面都有描述,通過對描述的分析,要確定題目應(yīng)該屬于哪一類數(shù)據(jù)結(jié)構(gòu)以及相應(yīng)的算法。有些題目可能不屬于任何數(shù)據(jù)結(jié)構(gòu),則它可能與某類算法有關(guān);但也有一些算法純粹是數(shù)學(xué)方法。題目前面描述是非常重要的,對試題的解答起著重要的指導(dǎo)作用。在描述中同時要理解算法過程。在分析算法時,可以以某個具體實例來試驗。在有些時候,即使看不懂整道程序題,還是可以根據(jù)提示看懂其中的部分代碼段,也可以完成一定

21、的空格的填寫。3理解程序分析程序結(jié)構(gòu),如果有很多子函數(shù),首先弄清楚各函數(shù)之間的關(guān)系和各函數(shù)的作用;如果程序較長,則應(yīng)該根據(jù)算法過程,把每個程序段與算法的每個過程對應(yīng)起來,確定相應(yīng)的程序段功能。在程序中,已經(jīng)定義了某些變量,則在理解程序時,首先必須理解這些變量的含義。4根據(jù)C語言的語法填空示例:2004年上半年程序員下午試題試題六。函數(shù)DelAInsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是,將線性表A中關(guān)鍵碼為keyl的結(jié)點(diǎn)開始的len個結(jié)點(diǎn),按原順序移至線性表B中關(guān)鍵碼為key2的結(jié)點(diǎn)之前,若移動成功,則返回0;否

22、則返回1。線性表的存儲結(jié)構(gòu)為帶頭結(jié)點(diǎn)的單鏈表,La為表A的頭指針,Lb為表B的頭指針。單鏈表結(jié)點(diǎn)的類型定義為:typedef struct node int key; struct node *next;*LinkedList;函數(shù)(1)int DelllnsB(LinkedLiSt La,LinkedList Lb,int keyl,int key2,int len)(2) LinkedList p,q,s,prep,pres;(3) int k,(4) if(!La->next | !Lb->next | len<=0) return 1;(5) p=La->nex

23、t; prep=La;(6) while(p && p->key != keyl)/*查找表A中鍵值為key1的結(jié)點(diǎn)*/(7) prep=p;p=p->next;(8) (9) if(!p) return 1;/*表A中不存在鍵值為key1的結(jié)點(diǎn)*/(10) q=p; k=1;(11) while(q && (1) )/*在表A中找出待刪除的len個結(jié)點(diǎn)*/(12) (2) ; k+;(13) (14) if(!q) return 1;/*表A中不存在要被刪除的len個結(jié)點(diǎn)*/(15) s=Lb->next; (3) ;(16) while(s

24、 && s->key != key2)/*查找表B中鍵值為key2的結(jié)點(diǎn)*/(17) pres = s; s = s->next;(18) (19) if(!s) return 1;/*表B中不存在鍵值為key2的結(jié)點(diǎn)*/(20) (4) =q->next;/*將表A中的len個結(jié)點(diǎn)刪除*/(21) q->next= (5) ;(22) pres->next=p;/*將len個結(jié)點(diǎn)移至表B*/(23) return 0;(24) 解:(1)理解題目。已知條件為兩個鏈表La和Lb,最后得到的結(jié)果也是兩個鏈表,只不過是La中的部分結(jié)點(diǎn)移動到Lb中,因此

25、,本問題主要是解決是怎么移動的。(2)算法。在題目中沒有給出結(jié)點(diǎn)移動的算法,我們先可以結(jié)合實例自己設(shè)計一個算法,然后看是不是與程序中的算法一致。如果不是,則再找算法。在自己設(shè)計算法的時候,最好的辦法是先看一看題目給出的算法提示,在給出的代碼中,總是有一些蛛絲馬跡可以讓我們找到突破口的,這些地方一般都會給出題目所用算法的暗示。如圖1.1所示,如果我們找到實線的指針,它們分別指向La中的key1結(jié)點(diǎn)(p指針)、key1的前一個結(jié)點(diǎn)(q指針)、Aj(從key1結(jié)點(diǎn)開始的第len個結(jié)點(diǎn),r指針)和Lb中的key2的前一個結(jié)點(diǎn)(s指針),則根據(jù)鏈表操作,用圖中的虛線指針連接,我們就可以把La中從key1

26、結(jié)點(diǎn)開始的len個結(jié)點(diǎn)全部移動到Lb鏈表中。因此算法大致如下所示。 找到p和q指針。圖1.1 鏈表結(jié)點(diǎn)移動 找到r指針。 找到s指針。 r->next=s->next(把Aj結(jié)點(diǎn)連接到K2結(jié)點(diǎn)之前)。 s->next=q(把K1結(jié)點(diǎn)連接到原來Lb中K2結(jié)點(diǎn)的前一個結(jié)點(diǎn)的后面)。注意:經(jīng)過、兩步操作,即實現(xiàn)了移動操作。 要注意的是現(xiàn)在La鏈表已經(jīng)斷開,也必須重新連接上。但是注意一下程序,就會發(fā)現(xiàn)里面有很多判斷,主要是看判斷是否可以移動。我們考慮后(也可以看程序)發(fā)現(xiàn),在以下幾種情況下,操作不能進(jìn)行。 La或Lb是空鏈表。 len表示個數(shù)的值,因此不能不大于0。 La中不存在ke

27、y1的結(jié)點(diǎn)。 La中從key1結(jié)點(diǎn)開始的結(jié)點(diǎn)個數(shù)小于len個。 Lb中不存在key2的結(jié)點(diǎn)。(3)現(xiàn)在是看程序結(jié)構(gòu)是不是和我們自己考慮的算法符合。程序段(5)(8):其中有p指針在向后移動,一直到key1為止,因此,它們的功能就是找到指向key1結(jié)點(diǎn)的指針;同時,另有一個指針prep一直在p的后面,因此它就是指向key1的前一個結(jié)點(diǎn)的指針。程序段(10)(13):其中有一個k變量,每次循環(huán)后增加1,因此它是一個計數(shù)器。通過計數(shù)len次,就可以找到從key1結(jié)點(diǎn)開始的第len個結(jié)點(diǎn)。這時,應(yīng)該有一個指針(q)同時移動,使得這個指針就是指向第len個結(jié)點(diǎn)的指針。程序段(15)(18):其中有s指針在向后移動,一直到key2為止,因此,它們的功能就是找到指向key2的前一個結(jié)點(diǎn)的指針。程序段(20)(22):就是移動La中的結(jié)點(diǎn)到Lb,并把La中斷開的鏈表連接。從上述的分析發(fā)現(xiàn),程序結(jié)構(gòu)是和我們自己考慮的算法一致的。(4)考慮細(xì)節(jié),并填空。 我們的目的是找指向第len個結(jié)點(diǎn)的指針,找到后循環(huán)應(yīng)該結(jié)束,因此,要填k<len。有同學(xué)可能會考慮填k<=len,這時,大家可以用一個實例試一下。譬如len=3,你會發(fā)現(xiàn),指針其實只要移

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論