公共安全事關(guān)人民幸福和社會穩(wěn)定,我們需要加強(qiáng)安全管理。寫一份較為完美的總結(jié),首先需要認(rèn)真梳理并整理所需總結(jié)的內(nèi)容。通過參考這些總結(jié)范文,我們可以更好地了解不同領(lǐng)域總結(jié)的特點(diǎn)和要求。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇一
為了順利完成實(shí)驗(yàn)教學(xué)任務(wù),確保人身、設(shè)備的安全,培養(yǎng)嚴(yán)謹(jǐn)、踏實(shí)、實(shí)事求是的科學(xué)作風(fēng)和愛護(hù)國家財(cái)產(chǎn)的優(yōu)良品質(zhì),特制定以下實(shí)驗(yàn)規(guī)則:
1、實(shí)驗(yàn)前必須充分預(yù)習(xí),完成指定的預(yù)習(xí)任務(wù)。預(yù)習(xí)要求如下:
(1)認(rèn)真閱讀指導(dǎo)書,進(jìn)行必要的設(shè)計(jì)與計(jì)算。(2)熟悉實(shí)驗(yàn)內(nèi)容。
(3)預(yù)先復(fù)習(xí),并按要求編寫程序。(4)未完成預(yù)習(xí)任務(wù)者不得進(jìn)入實(shí)驗(yàn)室。
2、遵守以下紀(jì)律:
(1)在實(shí)驗(yàn)室不得做和實(shí)驗(yàn)無關(guān)的事情。
(2)進(jìn)行任課老師指定內(nèi)容以外的實(shí)驗(yàn),必須經(jīng)指導(dǎo)教師同意。(3)遵守紀(jì)律,不遲到。
(4)保持實(shí)驗(yàn)室內(nèi)安靜、整潔,愛護(hù)公物,不許亂寫亂畫。
實(shí)驗(yàn)環(huán)境。
本實(shí)驗(yàn)在386以上的微機(jī)上進(jìn)行,運(yùn)行環(huán)境為vc6.0。
實(shí)驗(yàn)報(bào)告要求。
1、實(shí)驗(yàn)題目2.實(shí)驗(yàn)?zāi)康?.實(shí)驗(yàn)環(huán)境。
4.實(shí)驗(yàn)內(nèi)容與完成情況(可以附上自主設(shè)計(jì)的源程序)5.出現(xiàn)的問題及對問題的解決方案6.實(shí)驗(yàn)思考:(學(xué)生對本次實(shí)驗(yàn)的收獲的總結(jié))。
實(shí)驗(yàn)一單鏈表。
(一)一、實(shí)驗(yàn)?zāi)康摹?/p>
掌握線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)及其基本操作。
二、預(yù)習(xí)要求。
1、看懂書上的算法,深入理解鏈表的物理存儲模式和邏輯模式。
2、根據(jù)要求,編寫程序準(zhǔn)備上機(jī)調(diào)試。
三、實(shí)驗(yàn)內(nèi)容。
實(shí)現(xiàn)一個簡單的學(xué)生信息管理系統(tǒng),該系統(tǒng)的功能有:
1、利用單鏈表建立學(xué)生基本信息表。
2、瀏覽每個學(xué)生的信息。
3、根據(jù)學(xué)號查詢某個學(xué)生的基本信息。
4、添加學(xué)生信息到單鏈表中。
5、刪除一個學(xué)生的信息。
四、實(shí)現(xiàn)提示。
設(shè)計(jì)結(jié)點(diǎn)的結(jié)構(gòu)體類型,包括學(xué)生的學(xué)號、姓名、年齡、性別;要求設(shè)計(jì)一個簡單的菜單界面,根據(jù)需要選擇所要進(jìn)行的操作;構(gòu)造函數(shù),每一個函數(shù)實(shí)現(xiàn)上述的一個功能。
實(shí)驗(yàn)二單鏈表。
(二)一、實(shí)驗(yàn)?zāi)康摹?/p>
掌握線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)及其基本操作。
二、預(yù)習(xí)要求。
1、看懂書上的算法,深入理解鏈表的物理存儲模式和邏輯模式。
2、根據(jù)要求,編寫程序準(zhǔn)備上機(jī)調(diào)試。
三、實(shí)驗(yàn)內(nèi)容。
1、實(shí)現(xiàn)單鏈表的就地逆置。
2、建立兩個非遞減有序單鏈表,然后合并成一個非遞減鏈表。
3、建立兩個非遞減有序單鏈表,然后合并成一個非遞增鏈表。
4、編寫一個主函數(shù),調(diào)試上述算法。
四、選做題、思考題。
1、如何用帶表頭結(jié)點(diǎn)的單鏈表作為多項(xiàng)式的存儲表示,實(shí)現(xiàn)兩個多項(xiàng)式的相加。
2、約毖夫環(huán)的實(shí)現(xiàn)。
3、如何利用文件實(shí)現(xiàn)學(xué)生信息的存取。
實(shí)驗(yàn)三棧。
一、實(shí)驗(yàn)?zāi)康摹?/p>
深入了解并掌握棧的特性及其在實(shí)際中的應(yīng)用;熟練掌握棧的算法實(shí)現(xiàn);運(yùn)用棧操作求解實(shí)際問題。
二、預(yù)習(xí)要求。
1、看懂書上的算法,深入理解棧的特性和存儲結(jié)構(gòu),以便在實(shí)際問題背景下靈活運(yùn)用。
2、根據(jù)要求,編寫程序準(zhǔn)備上機(jī)調(diào)試。
三、實(shí)驗(yàn)內(nèi)容。
利用棧實(shí)現(xiàn)數(shù)據(jù)的分類,要求當(dāng)輸入為偶數(shù)時進(jìn)棧1,當(dāng)輸入為奇數(shù)時進(jìn)棧2,最后分別從棧1和棧2輸出偶數(shù)和奇數(shù)序列。
四、實(shí)現(xiàn)提示。
1、開辟一個連續(xù)的存儲空間,實(shí)現(xiàn)兩個棧順序存儲空間的共享;分別在兩端設(shè)置棧頂指針,并按要求實(shí)現(xiàn)棧操作。
2、采用順序存儲實(shí)現(xiàn)棧的初始化、入棧、出棧操作。
五、選做題、思考題。
1、兩??臻g共享時,棧滿的條件是什么?
2、為停車場編制進(jìn)行管理的模擬程序(習(xí)題集p96,2.1)。
3、編寫程序,利用棧實(shí)現(xiàn)表達(dá)式求值。
實(shí)驗(yàn)四二叉樹。
一、實(shí)驗(yàn)?zāi)康摹?/p>
通過實(shí)踐掌握二叉樹的存儲結(jié)構(gòu)和遍歷思想;掌握二叉樹的常見算法的程序?qū)崿F(xiàn)。
二、預(yù)習(xí)要求。
二叉樹的三種遍歷方法。
三、實(shí)驗(yàn)內(nèi)容。
1、輸入字符序列,建立二叉鏈表。
2、利用棧,編寫非遞歸算法,編程實(shí)現(xiàn)二叉樹的中序遍歷。
3、求二叉樹的葉子結(jié)點(diǎn)個數(shù)。
4、在主函數(shù)中設(shè)計(jì)一個簡單的菜單,分別調(diào)試上述算法。
四、選做題、思考題。
1、如何實(shí)現(xiàn)二叉樹的后序遍歷(非遞歸)。
2、如何求二叉樹的高度。
實(shí)驗(yàn)五最短路徑(旅游景點(diǎn)導(dǎo)游咨詢模擬)。
一、實(shí)驗(yàn)?zāi)康摹?/p>
利用圖的最短路徑原理為用戶提供路徑咨詢,掌握求最短路徑的算法并編程實(shí)現(xiàn)。
二、預(yù)習(xí)要求。
學(xué)習(xí)了解圖的存儲結(jié)構(gòu),掌握求最短路徑的兩種算法。
三、實(shí)驗(yàn)內(nèi)容。
設(shè)計(jì)一個旅游景點(diǎn)導(dǎo)游模擬程序,為來訪的客人提供景點(diǎn)最短路徑的信息查詢服務(wù),任意選取n城市,構(gòu)成一個有向帶權(quán)圖,圖中頂點(diǎn)表示城市,邊上的權(quán)值表示兩點(diǎn)間的距離,根據(jù)用戶指定的始點(diǎn)和終點(diǎn)輸出相應(yīng)的最短路徑。
四、實(shí)現(xiàn)提示。
咨詢以用戶和計(jì)算機(jī)的對話方式進(jìn)行,由用戶輸入起始點(diǎn)和終點(diǎn),輸出信息:最短路徑是多少?并指出所經(jīng)過的城市。存儲結(jié)構(gòu)可選用鄰接矩陣。
五、選做題、思考題。
1.如何實(shí)現(xiàn)對城市信息進(jìn)行編輯(如:添加或刪除)的功能。
2.用鄰接表作存儲結(jié)構(gòu),求一指定景點(diǎn)出發(fā),到其余各景點(diǎn)的最短路徑。
實(shí)驗(yàn)六內(nèi)部排序。
一、實(shí)驗(yàn)?zāi)康摹?/p>
直觀感受算法的關(guān)鍵字比較次數(shù)和關(guān)鍵字移動次數(shù)。
二、預(yù)習(xí)要求。
1、常見的排序算法(插入排序、交換排序、選擇排序、歸并排序、基數(shù)排序等)的思想、特點(diǎn)及其適用條件。
2、根據(jù)要求,編寫程序準(zhǔn)備上機(jī)調(diào)試。
三、實(shí)驗(yàn)內(nèi)容。
1、對直接插入排序和簡單選擇排序算法進(jìn)行關(guān)鍵字比較次數(shù)和關(guān)鍵字移動次數(shù)的比較。
2、利用鏈?zhǔn)酱鎯Y(jié)構(gòu),編寫程序,實(shí)現(xiàn)直接插入排序和冒泡排序。
四、實(shí)現(xiàn)提示。
測試數(shù)據(jù)可以為幾組典型的數(shù)據(jù):正序、逆序、亂序。
五、選做題、思考題。
1、快速排序算法的非遞歸實(shí)現(xiàn)。
2、結(jié)合實(shí)驗(yàn),理解針對不同待排元素的特點(diǎn)而選擇不同排序方法的重要性。
3、如何對本實(shí)驗(yàn)進(jìn)行時間、空間的復(fù)雜度分析。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇二
算法與數(shù)據(jù)結(jié)構(gòu)這一門課程,就是描述了數(shù)據(jù)的邏輯結(jié)構(gòu),數(shù)據(jù)的存儲結(jié)構(gòu),以及數(shù)據(jù)的運(yùn)算集合在計(jì)算機(jī)中的運(yùn)用和體現(xiàn)。數(shù)據(jù)的邏輯結(jié)構(gòu)就是數(shù)據(jù)與數(shù)據(jù)之間的邏輯結(jié)構(gòu);數(shù)據(jù)的存儲結(jié)構(gòu)就包含了順序存儲、鏈?zhǔn)酱鎯?、索引存儲和散列存儲。在這學(xué)期當(dāng)中,老師給我們主要講了順序存儲和鏈?zhǔn)酱鎯?。最后?shù)據(jù)的運(yùn)算集合就是對于一批數(shù)據(jù),數(shù)據(jù)的運(yùn)算是定義在數(shù)據(jù)的邏輯結(jié)構(gòu)之上的,而運(yùn)算的具體實(shí)現(xiàn)依賴于數(shù)據(jù)的存儲結(jié)構(gòu)。
通過這學(xué)期的學(xué)習(xí),讓我在去年c語言的基礎(chǔ)上對數(shù)據(jù)與數(shù)據(jù)之間的邏輯關(guān)系有了更深的理解和認(rèn)識。以前在學(xué)matlab這一課程的時候,我們?nèi)绻獙?shí)現(xiàn)兩個數(shù)的加減乘除,或者一系列復(fù)雜的數(shù)據(jù)運(yùn)算,就直接的調(diào)用函數(shù)就行,套用規(guī)則符號和運(yùn)算格式,就能立馬知道結(jié)果。在學(xué)習(xí)c語言這一課程時,我們逐漸開始了解函數(shù)的調(diào)用的原理,利用子函數(shù)中包含的運(yùn)算規(guī)則,從而實(shí)現(xiàn)函數(shù)的功能?,F(xiàn)今學(xué)習(xí)了算法,讓我更深層次的知道了通過順序表、指針、遞歸,能讓數(shù)據(jù)算法的實(shí)現(xiàn)更加的簡潔,明了,更易于理解。摒棄了數(shù)據(jù)的冗雜性。
在本書第二章中,主要介紹了順序表的實(shí)現(xiàn)以及運(yùn)用。順序表中我認(rèn)為最重要的是一個實(shí)型數(shù)組,和順序表的表長,不論是在一個數(shù)據(jù)的倒置、插入、刪除以及數(shù)據(jù)的排序過程中,都能將數(shù)據(jù)依次存入數(shù)組當(dāng)中,利用數(shù)組下標(biāo)之間的關(guān)系,就能實(shí)現(xiàn)數(shù)據(jù)的一系列操作了。在存儲棧中,給我留下最深刻的映像就是“先進(jìn)后出”,由于它特殊的存儲特性,所以在括號的匹配,算術(shù)表達(dá)式中被大量應(yīng)用。在存儲隊(duì)列之中,數(shù)據(jù)的刪除和存儲分別在表的兩端進(jìn)行操作,所以存儲數(shù)據(jù)很方便。為節(jié)省隊(duì)列浪費(fèi)閑置空間的這一大缺點(diǎn),所以引入了循環(huán)隊(duì)列這一概念,很好用。
在第三章中,主要講的是鏈?zhǔn)酱鎯μ匦?。它最突出的?yōu)點(diǎn)就是可以選擇連續(xù)或者不連續(xù)的存儲空間都行。所以,不管是數(shù)據(jù)在插入或者刪除一個數(shù)據(jù)時,會很方便,不會像順序表那樣,要移動數(shù)組中的諸多元素。所以鏈表利用指針能很方便的進(jìn)行刪除或者插入操作。而鏈?zhǔn)皆跅:完?duì)列的基礎(chǔ)上,也有了多方面的應(yīng)用,所以在這些方面有了更多的應(yīng)用。
第四章字符串中,基本的數(shù)組內(nèi)部元素的排序和字符串的匹配大部分代碼自己還是能夠理解,能夠看懂,如果真的要將所學(xué)的大量運(yùn)用于實(shí)踐的話,那就要多花些功夫和時間了。在對稱矩陣的壓縮,三角矩陣的壓縮,稀疏矩陣在存儲中能夠合理的進(jìn)行,能大大提高空間的開支。
在第五章遞歸當(dāng)中,就是在函數(shù)的定義之中出現(xiàn)了自己本身的調(diào)用,稱之為遞歸。而遞歸設(shè)計(jì)出來的程序,具有結(jié)構(gòu)清晰,可讀性強(qiáng),便于理解等優(yōu)點(diǎn)。但是由于遞歸在執(zhí)行的過程中,伴隨著函數(shù)自身的多次調(diào)用,因而執(zhí)行效率較低。如果要在追求執(zhí)行效率的情況下,往往采用非遞歸方式實(shí)現(xiàn)問題的算法程序。
在第六章數(shù)型結(jié)構(gòu)當(dāng)中,這是區(qū)別于線性結(jié)構(gòu)的另一大類數(shù)據(jù)結(jié)構(gòu),它具有分支性和層次性。它是數(shù)據(jù)表示,信息組織和程序設(shè)計(jì)的基礎(chǔ)和工具。在本章中,映像深刻的是樹的存儲結(jié)構(gòu)。有雙親表示法,孩子表示法,以及孩子兄弟表示法。在表示怎樣存儲數(shù)據(jù)之后,接著要從數(shù)型結(jié)構(gòu)中將數(shù)據(jù)讀取出來,于是,有了樹的遍歷,在遍歷當(dāng)中,又分為前序、中序和后序遍歷,這三種遍歷各有各的特點(diǎn)。
在第七章中,說到了樹的擴(kuò)展---二叉樹。二叉樹不同一般的樹型結(jié)構(gòu)的另一種重要的非線性結(jié)構(gòu),它是處理兩種不同的數(shù)據(jù)結(jié)構(gòu),許多涉及樹的算法采用二叉樹表示和處理更加便捷和方便。其他的也是和一般的二叉樹差不多。還多了一個樹、森林和二叉樹之間的轉(zhuǎn)換。
第八章的圍繞著圖來展開,它是一種復(fù)雜的非線性結(jié)構(gòu),在人工智能、網(wǎng)絡(luò)工程、數(shù)學(xué)、并行計(jì)算和工業(yè)設(shè)計(jì)有著廣泛的應(yīng)用。圖最重要的由一個非空的頂點(diǎn)集合和一個描述頂點(diǎn)之間的多對多關(guān)系的邊集合組成的一種數(shù)據(jù)結(jié)構(gòu)。圖的存儲室通過鄰接矩陣?yán)洗鎯D的信息。而圖的讀取是通過深度優(yōu)先遍歷和廣度優(yōu)先遍歷實(shí)現(xiàn)。生成最小生成樹有prim算法和kruskal算法,相對于這兩種算法,后一種算法要更加易于理解。
在考試的時候,我以為老師只會出題作業(yè)部分。然后書中有一小部分就沒看,但是題中出現(xiàn)了一個二叉樹轉(zhuǎn)換為森林的時候,我有印象,但就是沒思路想法了,就沒做。從中我真的理解了老師說的,考試不代表學(xué)習(xí)的結(jié)束?;蛘吣悻F(xiàn)在看的內(nèi)容在生活中學(xué)習(xí)中暫時沒有太大的作用,但是到了某一特定的環(huán)境條件下,總會有作用。所以,學(xué)習(xí)是一個積累的過程,不懈怠,踏實(shí)的走下去,你才會有所收獲。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇三
數(shù)據(jù)結(jié)構(gòu)是一門純屬于設(shè)計(jì)的科目,它需用把理論變?yōu)樯蠙C(jī)調(diào)試。在學(xué)習(xí)科目的第一節(jié)課起,魯老師就為我們闡述了它的重要性。它對我們來說具有一定的難度。它是其它編程語言的一門基本學(xué)科。很多同學(xué)都說,數(shù)據(jù)結(jié)構(gòu)不好學(xué),這我深有體會。剛開始學(xué)的時候確實(shí)有很多地方我很不理解,每次上課時老師都會給我們出不同的設(shè)計(jì)題目,對于我們一個初學(xué)者來說,無疑是一個具大的挑戰(zhàn)。
我記得有節(jié)課上遍歷二叉樹的內(nèi)容,先序遍歷、中序遍歷、后序遍歷。魯老師說:這節(jié)課的內(nèi)容很重要,不管你以前聽懂沒有,現(xiàn)在認(rèn)真聽。說實(shí)在的,以前上的內(nèi)容確實(shí)沒大聽懂,不過聽了老師的話,我聽得很認(rèn)真。先序遍歷很簡單,是三個遍歷中,最簡單的。而中序遍歷聽得有點(diǎn)模糊,后序遍歷也半懂半懂,我心想如果老師再講一遍,我肯定能聽懂。后來老師畫了一個二叉樹,抽了同學(xué)到黑板上去排序,這個二叉樹看似復(fù)雜,不過用先序遍歷來排,并不難。于是我在下面排好了先序,先序遍歷很簡單,我有點(diǎn)得意,老師到位置上點(diǎn)了我上去排中序,上去之后排得一塌糊涂。后來老師又講了一遍,我這才聽懂了,魯老師又安慰我們說,這個二叉樹有點(diǎn)難,中序和后序都不好排,要學(xué)懂的確要花點(diǎn)功夫才行。我聽了老師的話,認(rèn)真做了筆記,回去再看了當(dāng)天學(xué)的內(nèi)容。第二堂課,老師還是先講的先前的內(nèi)容,畫了一個簡單的二叉樹,讓我們排序,又叫同學(xué)上去分別排出來,老師又點(diǎn)了我的名,叫我起來辨別排中序那兩個同學(xué)的答案哪個排正確了,我毫不猶豫的答對了。因?yàn)檫@次的內(nèi)容,先序遍歷二叉樹、中序遍歷二叉樹、后序遍歷二叉樹,我的確真的懂了,第一次上這個課這么有成就感。漸漸的對這門課有了興趣。我以為永遠(yuǎn)都聽不懂這個課,現(xiàn)在,我明白了,只要認(rèn)真聽,肯下功夫,這個課也沒有什么難的。而數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)的難易程度很大程度上決定于個人的興趣,把一件事情當(dāng)做任務(wù)去做會很痛苦,當(dāng)做興趣去做會很快樂。也希望老師能看到我的改變,在此也感謝老師的辛勤教導(dǎo)。老師沒有放棄我,幾次點(diǎn)我的名上去,老師一定看得到我的進(jìn)步。
后來,我每節(jié)課都認(rèn)真聽課,老師雖然沒有點(diǎn)名,但我還是很認(rèn)真的聽。雙親表示法孩子表示法和孩子兄弟表示法,這些內(nèi)容我都聽得很明白,差不多每節(jié)課都認(rèn)真聽課。有時我也會在上課空余時間看看以前的內(nèi)容,所以,第一遍看課本的時候要將概念熟記于心,然后構(gòu)建知識框架。數(shù)據(jù)結(jié)構(gòu)包括線性結(jié)構(gòu)、樹形結(jié)構(gòu)、圖狀結(jié)構(gòu)或網(wǎng)狀結(jié)構(gòu)。線性結(jié)構(gòu)包括線性表、棧、隊(duì)列、串、數(shù)組、廣義表等,棧和隊(duì)列是操作受限的線性表,串的數(shù)據(jù)對象約束為字符集,數(shù)組和廣義表是對線性表的擴(kuò)展:表中的數(shù)據(jù)元素本身也是一個數(shù)據(jù)結(jié)構(gòu)。除了線性表以外,棧是重點(diǎn),因?yàn)闂:瓦f歸緊密相連,遞歸是程序設(shè)計(jì)中很重要的一種工具。
其中我了解到:棧(stack)是只能在某一端插入和刪除的特殊線性表。它按照后進(jìn)先出的原則存儲數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù);隊(duì)列一種特殊的線性表,它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作。進(jìn)行插入的操作端稱為隊(duì)尾,進(jìn)行刪除的操作端稱為隊(duì)頭。隊(duì)列中沒有元素時,稱為空隊(duì)列;鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)組成,結(jié)點(diǎn)可以在運(yùn)行時動態(tài)生成。每個結(jié)點(diǎn)包括兩個部分:一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另一個是存儲下一個結(jié)點(diǎn)地址的指針域。
想著自己報(bào)考自考的專業(yè),也會考數(shù)據(jù)結(jié)構(gòu)這門,這學(xué)期就結(jié)束了,或多或少都收獲了一些知識。盡管學(xué)得還不是很透徹,我相信這對自己的自考會有很大的幫助,所以,即使是結(jié)束了這科的內(nèi)容,我也不會放棄去學(xué)習(xí)它。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇四
做了一個星期的程序設(shè)計(jì)終于做完了,在這次程序設(shè)計(jì)課中,真是讓我獲益匪淺,我突然發(fā)現(xiàn)寫程序還挺有意思的。
由于上學(xué)期的c語言跟這學(xué)期的數(shù)據(jù)結(jié)構(gòu)都算不上真正的懂,對于書上的稍微難點(diǎn)的知識就是是而非的,所以我只是對老師的程序理解,我也試著去改變了一些變量,自己也盡量多的去理解老師做程序的思路。當(dāng)我第一天坐在那里的時候,我就不知道該做些什么,后來我只有下來自己看了一遍書來熟悉下以前學(xué)過的知識。
通過這次的程序設(shè)計(jì),發(fā)現(xiàn)一個程序設(shè)計(jì)就是算法與數(shù)據(jù)結(jié)構(gòu)的結(jié)合體,自己也開始對程序產(chǎn)生了前所未有的興趣,以前偷工減料的學(xué)習(xí)也不可能一下子寫出一個程序出來,于是我就認(rèn)真看老師寫的程序,發(fā)現(xiàn)我們看懂了一個程序其實(shí)不難,難的是對于一個程序的思想的理解,我們要掌握一個算法,不僅僅限于讀懂,主要的是要理解老師的思路,學(xué)習(xí)老師的解決問題的方法。
這次試驗(yàn)中,我發(fā)現(xiàn)書本上的知識是一個基礎(chǔ),但是我基礎(chǔ)都沒掌握,更別說寫出一個整整的'程序了。自己在寫程序的時候,也發(fā)現(xiàn)自己的知識太少了,特別是基礎(chǔ)知識很多都是模模糊糊的一個概念,沒有落實(shí)到真正的程序,所以自己寫的時候也感到萬分痛苦,基本上涉及一個知識我就會去看看書,對于書本上的知識沒掌握好。在飯后閑暇時間我也總結(jié)了一下,自己以前上課也認(rèn)真的聽了,但是還是寫不出來,這主要?dú)w結(jié)于自己的練習(xí)太少了,而且也總是半懂就不管了。在改寫老師的程序中也出現(xiàn)了很多的問題,不斷的修改就是不斷的學(xué)習(xí)過程,當(dāng)我們?nèi)硇牡耐度肫渲袝r,實(shí)際上是一件很有樂趣的事情。對于以后的學(xué)習(xí)有了幾點(diǎn)總結(jié):第一、熟記各種數(shù)據(jù)結(jié)構(gòu)類型,定義、特點(diǎn)、基本運(yùn)算;第二、各種常用的排序算法,如冒泡排序、堆排序……,這些是必考的內(nèi)容,分?jǐn)?shù)不會少于20%;第三,多做習(xí)題,看題型,針對題型來有選擇復(fù)習(xí);數(shù)據(jù)結(jié)構(gòu)看上去很復(fù)雜,但你靜下心來把書掃上幾遍,分解各個知識點(diǎn),這一下來,學(xué)數(shù)據(jù)結(jié)構(gòu)的思路就會很清晰了。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇五
課程名稱:
學(xué)生學(xué)號:
所屬院部:
(理工類)。
學(xué)生姓名:
指導(dǎo)教師:——20學(xué)年第學(xué)期。
金陵科技學(xué)院教務(wù)處制。
實(shí)驗(yàn)報(bào)告書寫要求。
實(shí)驗(yàn)報(bào)告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點(diǎn)需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用a4的紙張。
實(shí)驗(yàn)報(bào)告書寫說明。
實(shí)驗(yàn)報(bào)告中一至四項(xiàng)內(nèi)容為必填項(xiàng),包括實(shí)驗(yàn)?zāi)康暮鸵?;?shí)驗(yàn)儀器和設(shè)備;實(shí)驗(yàn)內(nèi)容與過程;實(shí)驗(yàn)結(jié)果與分析。各院部可根據(jù)學(xué)科特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。
填寫注意事項(xiàng)。
(1)細(xì)致觀察,及時、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說明,層次清晰。
(3)盡量采用專用術(shù)語來說明事物。
(4)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報(bào)告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。
實(shí)驗(yàn)報(bào)告批改說明。
實(shí)驗(yàn)報(bào)告的批改要及時、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn)報(bào)告的批改成績采用百分制,具體評分標(biāo)準(zhǔn)由各院部自行制定。
實(shí)驗(yàn)報(bào)告裝訂要求。
實(shí)驗(yàn)批改完畢后,任課老師將每門課程的每個實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào)告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實(shí)驗(yàn)大綱。
實(shí)驗(yàn)項(xiàng)目名稱:順序表實(shí)驗(yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)1順序表。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
掌握順序表的定位、插入、刪除等操作。
二、實(shí)驗(yàn)儀器和設(shè)備。
vc6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結(jié)果。
(2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數(shù)測試結(jié)果。(3)在遞增有序的順序表中插入一個新結(jié)點(diǎn)x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個元素開始找到第一個大于該新結(jié)點(diǎn)值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結(jié)點(diǎn)x插入到i位置。
(4)刪除順序表中所有等于x的數(shù)據(jù)元素。
2、選做題。
(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實(shí)現(xiàn)將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
實(shí)驗(yàn)項(xiàng)目名稱:單鏈表實(shí)驗(yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)2單鏈表。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
1、實(shí)驗(yàn)?zāi)康摹?/p>
掌握單鏈表的定位、插入、刪除等操作。
2、實(shí)驗(yàn)要求。
(1)注意鏈表的空間是動態(tài)分配的,某結(jié)點(diǎn)不用之后要及時進(jìn)行物理刪除,以便釋放其內(nèi)存空間。
(2)鏈表不能實(shí)現(xiàn)直接定位,一定注意指針的保存,防止丟失。
二、實(shí)驗(yàn)儀器和設(shè)備。
visualc++6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個新結(jié)點(diǎn)x,保持單鏈表的有序性。
解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個結(jié)點(diǎn)開始找到第一個大于該新結(jié)點(diǎn)值的結(jié)點(diǎn)即為插入位置;然后在找到的此結(jié)點(diǎn)之前插入新結(jié)點(diǎn);注意保留插入位置之前結(jié)點(diǎn)的指針才能完成插入操作。
(3)編寫實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測試結(jié)果。
2、選做題。
已知指針la和lb分別指向兩個無頭結(jié)點(diǎn)單鏈表的首元結(jié)點(diǎn)。要求編一算法實(shí)現(xiàn),從表la中刪除自第i個元素起共len個元素后,將它們插入到表lb中第j個元素之前。程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
實(shí)驗(yàn)項(xiàng)目名稱:堆棧和隊(duì)列實(shí)驗(yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)3堆棧和隊(duì)列。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
(1)掌握應(yīng)用棧解決問題的方法。(2)掌握利用棧進(jìn)行表達(dá)式求和的算法。
(3)掌握隊(duì)列的存儲結(jié)構(gòu)及基本操作實(shí)現(xiàn),并能在相應(yīng)的應(yīng)用問題中正確選用它們。
二、實(shí)驗(yàn)儀器和設(shè)備。
visualc++6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
(1)判斷一個算術(shù)表達(dá)式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。
(3)假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結(jié)束符的字符序列是否是“回文”。
2、選做題。
在順序存儲結(jié)構(gòu)上實(shí)現(xiàn)輸出受限的雙端循環(huán)隊(duì)列的入列和出列算法。設(shè)每個元素表示一個待處理的作業(yè),元素值表示作業(yè)的預(yù)計(jì)時間。入隊(duì)列采取簡化的短作業(yè)優(yōu)先原則,若一個新提交的作業(yè)的預(yù)計(jì)執(zhí)行時間小于隊(duì)頭和隊(duì)尾作業(yè)的平均時間,則插入在隊(duì)頭,否則插入在隊(duì)尾。程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
實(shí)驗(yàn)項(xiàng)目名稱:串實(shí)驗(yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)4串。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
掌握串的存儲及應(yīng)用。
二、實(shí)驗(yàn)儀器和設(shè)備。
visualc++6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數(shù),并用主函數(shù)測試結(jié)果。
(2)編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測試結(jié)果。
解題思路:可以將第一題程序改進(jìn)成一個子函數(shù),在本題中循環(huán)調(diào)用。(3)設(shè)字符串采用單字符的鏈?zhǔn)酱鎯Y(jié)構(gòu),編程刪除串s從位置i開始長度為k的子串。
2、選做題。
假設(shè)以鏈結(jié)構(gòu)表示串,編寫算法實(shí)現(xiàn)將串s插入到串t中某個字符之后,若串t中不存在這個字符,則將串s聯(lián)接在串t的末尾。
提示:為提高程序的通用性,插入位置字符應(yīng)設(shè)計(jì)為從鍵盤輸入。程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
實(shí)驗(yàn)項(xiàng)目名稱:二叉樹實(shí)驗(yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)5二叉樹。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
(1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應(yīng)用二叉樹遞歸遍歷思想解決問題的方法。
二、實(shí)驗(yàn)儀器和設(shè)備。
visualc++6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
(1)建立一棵二叉樹。對此樹進(jìn)行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。
(2)在第一題基礎(chǔ)上,求二叉樹中葉結(jié)點(diǎn)的個數(shù)。(3)在第一題基礎(chǔ)上,求二叉樹中結(jié)點(diǎn)總數(shù)。(4)在第一題基礎(chǔ)上,求二叉樹的深度。
2、選做題。
已知一棵完全二叉樹存于順序表sa中,[1…]存儲結(jié)點(diǎn)的值。試編寫算法由此順序存儲結(jié)構(gòu)建立該二叉樹的二叉鏈表。
解題思路:根據(jù)完全二叉樹順序存儲的性質(zhì)來確定二叉樹的父子關(guān)系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構(gòu)造方法進(jìn)行建立。完全二叉樹順序存儲的一個重要性質(zhì)為,第i個結(jié)點(diǎn)的左孩子是編號為2i的結(jié)點(diǎn),第i個結(jié)點(diǎn)的右孩子是編號為2i+1的結(jié)點(diǎn)。程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
實(shí)驗(yàn)項(xiàng)目名稱:圖實(shí)驗(yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)6圖。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
(1)熟練掌握圖的基本概念、構(gòu)造及其存儲結(jié)構(gòu)。
(2)熟練掌握對圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷的算法。
二、實(shí)驗(yàn)儀器和設(shè)備。
visualc++6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
(1)構(gòu)造一個無向圖(用鄰接矩陣表示存儲結(jié)構(gòu))。
(2)對上面所構(gòu)造的無向圖,進(jìn)行深度優(yōu)先遍歷和廣度優(yōu)先遍歷,輸出遍歷序列。
2、選做題。
采用鄰接表存儲結(jié)構(gòu),編寫一個判別無向圖中任意給定的兩個頂點(diǎn)之間是否存在一條長度為k的簡單路徑的算法。簡單路徑是指其頂點(diǎn)序列中不含有重復(fù)頂點(diǎn)的路徑。提示:兩個頂點(diǎn)及k值均作為參數(shù)給出。程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
實(shí)驗(yàn)項(xiàng)目名稱:排序?qū)嶒?yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)7排序。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
(1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數(shù)排序的基本概念。
(2)掌握以上各種排序的算法。區(qū)分以上不同排序的優(yōu)、缺點(diǎn)。
二、實(shí)驗(yàn)儀器和設(shè)備。
visualc++6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
用隨機(jī)數(shù)產(chǎn)生100000個待排序數(shù)據(jù)元素的關(guān)鍵字值。測試下列各排序函數(shù)的機(jī)器實(shí)際執(zhí)行時間(至少測試兩個):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、二路歸并排序、堆排序和基于鏈?zhǔn)疥?duì)列的基數(shù)排序。
2、選做題。
假設(shè)含n個記錄的序列中,其所有關(guān)鍵字為值介于v和w之間的整數(shù),且其中很多關(guān)鍵字的值是相同的。則可按如下方法排序:另設(shè)數(shù)組number[v…w],令number[i]統(tǒng)計(jì)關(guān)鍵字為整數(shù)i的紀(jì)錄個數(shù),然后按number重排序列以達(dá)到有序。試編寫算法實(shí)現(xiàn)上述排序方法,并討論此種方法的優(yōu)缺點(diǎn)。程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
實(shí)驗(yàn)項(xiàng)目名稱:查找實(shí)驗(yàn)學(xué)時:2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績:批改教師:批改時間:
實(shí)驗(yàn)8查找。
一、實(shí)驗(yàn)?zāi)康暮鸵蟆?/p>
(1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設(shè)計(jì)。
二、實(shí)驗(yàn)儀器和設(shè)備。
visualc++6.0。
三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)。
1、必做題。
(1)在一個遞增有序的線性表中利用二分查找法查找數(shù)據(jù)元素x。
2、選做題。
(2)構(gòu)造一個哈希表,哈希函數(shù)采用除留余數(shù)法,哈希沖突解決方法采用鏈地址法。設(shè)計(jì)一個測試程序進(jìn)行測試。
提示:構(gòu)造哈希表只是完成查找的第一步,大家應(yīng)該掌握在哈希表上進(jìn)行查找的過程,可以試著編程序?qū)崿F(xiàn)。程序清單:
四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)。
五、實(shí)驗(yàn)體會(遇到問題及解決辦法,編程后的心得體會)。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇六
(一)課程性質(zhì)。
《數(shù)據(jù)結(jié)構(gòu)》是一門專業(yè)基礎(chǔ)課,在計(jì)算機(jī)軟件的各個領(lǐng)域中均會使用到數(shù)據(jù)結(jié)構(gòu)的有關(guān)知識。本課程的先修課程為c程序設(shè)計(jì)或c++程序設(shè)計(jì)。
(二)教學(xué)目的。
學(xué)會從問題入手,分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用所涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及其相應(yīng)的操作算法,并初步掌握時間和空間分析技術(shù)。另一方面,本課程的學(xué)習(xí)過程也是進(jìn)行復(fù)雜程序設(shè)計(jì)的訓(xùn)練過程,要求學(xué)生會書寫符合軟件工程規(guī)范的文件,編寫的程序代碼應(yīng)結(jié)構(gòu)清晰、正確易讀,能上機(jī)調(diào)試并排除錯誤。
(三)教學(xué)時數(shù)。
課堂講授每周4學(xué)時,18周,共72學(xué)時。
(四)教學(xué)方法。
本課程將采用課堂講授及課堂討論相結(jié)合的交互式教學(xué)法,同時輔以必要的上機(jī)操作實(shí)踐。
(五)面向?qū)I(yè)。
計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)。
二、教學(xué)內(nèi)容。
第一章緒論。
(一)教學(xué)目的要求。
介紹數(shù)據(jù)結(jié)構(gòu)的一些基本概念,算法的時間復(fù)雜度和空間復(fù)雜度的分析方法,抽象數(shù)據(jù)類型的定義和使用以及算法的描述方法。掌握數(shù)據(jù)結(jié)構(gòu)的一些基本概念,掌握算法的時間復(fù)雜度和空間復(fù)雜度的分析方法,了解抽象數(shù)據(jù)類型的定義和使用,了解算法的描述方法。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:數(shù)據(jù)結(jié)構(gòu)的一些基本概念:數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)邏輯結(jié)構(gòu)、數(shù)據(jù)存儲結(jié)構(gòu)、數(shù)據(jù)類型、算法等。抽象數(shù)據(jù)類型。算法時間復(fù)雜度和空間復(fù)雜度的分析。
教學(xué)重點(diǎn):有關(guān)數(shù)據(jù)結(jié)構(gòu)的各個名詞和術(shù)語的含義,以及語句頻度和時間復(fù)雜度、空間復(fù)雜度的估算。
教學(xué)難點(diǎn):算法時間復(fù)雜度和空間復(fù)雜度的分析。
第一節(jié)。
一、非數(shù)值計(jì)算。
第二節(jié)。
一、數(shù)據(jù)。
三、數(shù)據(jù)類型。
四、抽象數(shù)據(jù)類型。
五、多型數(shù)據(jù)類型。
第三節(jié)。
一、固有數(shù)據(jù)類型。
基本概念和術(shù)語什么是數(shù)據(jù)結(jié)構(gòu)。
二、數(shù)據(jù)抽象。
三、抽象數(shù)據(jù)類型的描述語言。
第四節(jié)。
一、算法。
二、算法設(shè)計(jì)的要求。
三、算法效率的度量。
四、算法的存儲空間需求。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
4學(xué)時。
第二章線性表。
(一)教學(xué)目的與要求。
介紹線性表的基本概念和類型定義,對順序表和單鏈表的常用操作方法及其程序?qū)崿F(xiàn),循環(huán)鏈表和雙向鏈表的定義和它的插入、刪除等操作方法。掌握線性表的基本概念和類型定義;熟練掌握對順序表和單鏈表的常用操作方法及其程序?qū)崿F(xiàn);掌握循環(huán)鏈表和雙向鏈表的定義和它的插入、刪除等操作方法。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:線性表的基本概念和類型定義,線性表的順序存儲結(jié)構(gòu),線性表的鏈接存儲結(jié)構(gòu):(1)單鏈表的查找、插入和刪除;(2)循環(huán)鏈表;(3)雙向鏈表。
教學(xué)重點(diǎn):在順序表和鏈表上各種基本算法的實(shí)現(xiàn)及相關(guān)的時間性能分析。
教學(xué)難點(diǎn):用所學(xué)的基本知識設(shè)計(jì)有效算法解決與線性表相關(guān)的應(yīng)用問題。鏈表要分清鏈表中指針p和結(jié)點(diǎn)*p之間的對應(yīng)關(guān)系,區(qū)分鏈表中的頭結(jié)點(diǎn)、頭指針以及循環(huán)鏈表、雙向鏈表的特點(diǎn)等。
第一節(jié)。
一、線性表的定義。
二、線性表的基本操作。
第二節(jié)。
一、順序表。
二、順序表上基本運(yùn)算的實(shí)現(xiàn)。
三、順序表應(yīng)用舉例。
第三節(jié)。
一、線性鏈表。
二、循環(huán)鏈表。
三、雙向鏈表。
四、靜態(tài)鏈表。
第四節(jié)一、一元多項(xiàng)式的數(shù)學(xué)表示二、一元多項(xiàng)式的計(jì)算機(jī)表示。
三、抽象數(shù)據(jù)類型:一元多項(xiàng)式的定義。
四、抽象數(shù)據(jù)類型:一元多項(xiàng)式的存儲結(jié)構(gòu)。
五、抽象數(shù)據(jù)類型:一元多項(xiàng)式的基本操作算法實(shí)現(xiàn)。
(三)教學(xué)方法與形式。
一元多項(xiàng)式的表示及相加線性表的鏈?zhǔn)酱鎯Ρ硎竞蛯?shí)現(xiàn)線性表的順序存儲表示和實(shí)現(xiàn)。
線性表的類型定義算法和算法分析課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
8學(xué)時。
第三章棧和隊(duì)列。
(一)教學(xué)目的與要求。
介紹棧和隊(duì)列的定義,順序和鏈接存儲的棧和隊(duì)列的各種運(yùn)算的方法及其程序?qū)崿F(xiàn)。掌握棧和隊(duì)列的定義,熟練掌握順序和鏈接存儲的棧和隊(duì)列的各種運(yùn)算的方法及其程序?qū)崿F(xiàn)。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:棧的類型定義,棧的順序存儲和鏈接存儲的表示,在棧的順序存儲和鏈接存儲上進(jìn)行各種棧操作的算法,棧的應(yīng)用舉例,隊(duì)列的類型定義,隊(duì)列的順序存儲(循環(huán)隊(duì))和鏈接存儲表示及各種操作的實(shí)現(xiàn)算法。
教學(xué)重點(diǎn):棧和隊(duì)列在兩種存儲結(jié)構(gòu)上實(shí)現(xiàn)的基本運(yùn)算。教學(xué)難點(diǎn):遞歸的實(shí)現(xiàn)、循環(huán)隊(duì)列中對邊界條件的處理。
第一節(jié)。
一、抽象數(shù)據(jù)類型棧的定義。
二、棧的表示和實(shí)現(xiàn)。
第二節(jié)。
一、數(shù)制轉(zhuǎn)換。
二、括號匹配的檢驗(yàn)。
三、表達(dá)式求值。
第三節(jié)。
一、函數(shù)調(diào)用與棧。
二、遞歸調(diào)用棧的變化。
第四節(jié)。
一、抽象數(shù)據(jù)類型隊(duì)列的定義。
二、鏈隊(duì)列--隊(duì)列的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)。
三、循環(huán)隊(duì)列--隊(duì)列的順序表示和實(shí)現(xiàn)。
第五節(jié)。
一、優(yōu)先級隊(duì)列的概念。
二、優(yōu)先級隊(duì)列的存儲表示和實(shí)現(xiàn)。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
4學(xué)時。
第四章串。
(一)教學(xué)目的與要求。
介紹串的基本概念和操作,串的存儲結(jié)構(gòu)以及基本操作的算法實(shí)現(xiàn)。掌握串的基本概念和操作,掌握串的存儲結(jié)構(gòu)以及基本操作的算法實(shí)現(xiàn)。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:串的類型定義,串的表示和實(shí)現(xiàn),正文模式匹配,正文編輯——串操作應(yīng)用舉例串的類型定義。
教學(xué)重點(diǎn):串類型定義中各基本操作的定義以及串的實(shí)現(xiàn)方法。教學(xué)難點(diǎn):利用串的基本操作來實(shí)現(xiàn)串的其它操作。
優(yōu)先級隊(duì)列隊(duì)列棧與遞歸的實(shí)現(xiàn)棧的應(yīng)用舉例。
棧
第一節(jié)。
一、串的定義。
二、串的基本操作。
第二節(jié)。
一、定長順序存儲表示。
二、堆分配存儲表示。
三、串的塊鏈存儲表示。
四、字符串操作的實(shí)現(xiàn)。
第三節(jié)。
二、模式匹配的一種改進(jìn)算法。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
4學(xué)時。
串的類型定義。
串的表示和實(shí)現(xiàn)。
字符串的模式匹配。
一、求子串位置的定位函數(shù)index(s,t,pos)。
第五章數(shù)組和廣義表。
(一)教學(xué)目的。
介紹數(shù)組的基本概念和基本操作的算法實(shí)現(xiàn);稀疏矩陣的定義和各種存儲結(jié)構(gòu),稀疏矩陣的轉(zhuǎn)置和相加的方法并了解其算法;廣義表的定義、存儲結(jié)構(gòu)和求廣義表的長度及深度的算法,建立廣義表和輸出廣義表的方法并了解其算法。掌握數(shù)組的基本概念和基本操作的算法實(shí)現(xiàn);掌握稀疏矩陣的定義和各種存儲結(jié)構(gòu),掌握稀疏矩陣的轉(zhuǎn)置和相加的方法并了解其算法;掌握廣義表的定義、存儲結(jié)構(gòu)和求廣義表的長度及深度的算法,掌握建立廣義表和輸出廣義表的方法并了解其算法。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:稀疏矩陣的定義、存儲和運(yùn)算,廣義表的定義、存儲和運(yùn)算串的類型定義。教學(xué)重點(diǎn):特殊矩陣的壓縮存儲,以及稀疏矩陣的三元組順序表示。教學(xué)難點(diǎn):特殊矩陣的壓縮存儲,以及稀疏矩陣的三元組順序表示。
第一節(jié)第二節(jié)。
一、數(shù)組的存儲方式。
二、數(shù)組元素存儲位置的計(jì)算。
三、基本操作的實(shí)現(xiàn)。
第三節(jié)。
一、特殊矩陣。
二、稀疏矩陣。
第四節(jié)。
一、廣義表的基本概念。
二、廣義表的三個重要結(jié)論。
第五節(jié)。
一、頭尾鏈表存儲表示。
二、擴(kuò)展線性鏈表存儲表示。
第六節(jié)。
一、求廣義表的深度。
二、復(fù)制廣義表。
三、建立廣義表的存儲結(jié)構(gòu)。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
6學(xué)時。
第六章樹和二叉樹。
(一)教學(xué)目的與要求。
介紹樹的定義、性質(zhì)、存儲結(jié)構(gòu)及遍歷算法,握二叉樹的各種遍歷方法及其實(shí)現(xiàn),二叉樹的其他操作方法及實(shí)現(xiàn),樹、森林和二叉樹的轉(zhuǎn)換方法,哈夫曼樹的定義和構(gòu)造哈夫曼樹的方法,哈夫曼樹編碼的方法。掌握樹的定義、性質(zhì)、存儲結(jié)構(gòu)及遍歷算法,熟練掌握二叉樹的各種遍歷方法及其實(shí)現(xiàn),掌握二叉樹的其他操作方法及實(shí)現(xiàn),掌握樹、森林和二叉樹的轉(zhuǎn)換方法,掌握哈夫曼樹的定義和構(gòu)造哈夫曼樹的方法,了解哈夫曼樹編碼的方法。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:樹的定義、性質(zhì)和表示方法,二叉樹的定義、性質(zhì)和存儲結(jié)構(gòu),二叉樹的各種遍歷方法及實(shí)現(xiàn),建立二叉樹、輸出二叉樹、求二叉樹深度等的操作方法及實(shí)現(xiàn),樹的存儲結(jié)構(gòu),進(jìn)行先根遍歷、后根遍歷和按層遍歷的方法及實(shí)現(xiàn),進(jìn)行樹與二叉樹的轉(zhuǎn)換方法,哈夫曼樹的定義、構(gòu)造哈夫曼樹的方法及哈夫曼編碼的方法。
教學(xué)重點(diǎn):二叉樹和樹的遍歷及其應(yīng)用。
教學(xué)難點(diǎn):實(shí)現(xiàn)二叉樹和樹的各種操作的遞歸算法。
第一節(jié)。
一、樹的定義。
二、森林的定義。
三、樹的抽象數(shù)據(jù)類型定義。
第二節(jié)一、二叉樹的定義二、二叉樹的性質(zhì)三、二叉樹的存儲結(jié)構(gòu)。
第三節(jié)。
一、遍歷二叉樹。
二、線索二叉樹。
第四節(jié)。
一、樹的存儲結(jié)構(gòu)。
二、森林與二叉樹的轉(zhuǎn)換。
三、樹和森林的遍歷。
第五節(jié)。
一、最優(yōu)二叉樹(赫夫曼樹)。
二、赫夫曼編碼。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
10學(xué)時。
最優(yōu)樹和赫夫曼編碼。
樹和森林。
遍歷二叉樹和線索二叉樹。
二叉樹。
樹的定義和基本術(shù)語。
第七章圖。
(一)教學(xué)目的與要求。
介紹圖的定義和術(shù)語;圖的存儲結(jié)構(gòu)及深度和廣度優(yōu)先搜索方法及其實(shí)現(xiàn);圖的生成樹的概念,求圖的最小生成樹的普里姆算法和克魯斯卡爾算法并了解其實(shí)現(xiàn)算法;拓?fù)渑判虻姆椒ú⒘私馄鋵?shí)現(xiàn)算法;計(jì)算關(guān)鍵路徑的方法及其實(shí)現(xiàn)算法。掌握圖的定義和術(shù)語;熟練掌握圖的存儲結(jié)構(gòu)及深度和廣度優(yōu)先搜索方法及其實(shí)現(xiàn);掌握圖的生成樹的概念,掌握求圖的最小生成樹的普里姆算法和克魯斯卡爾算法并了解其實(shí)現(xiàn)算法;掌握拓?fù)渑判虻姆椒ú⒘私馄鋵?shí)現(xiàn)算法;了解計(jì)算關(guān)鍵路徑的方法并了解其實(shí)現(xiàn)算法。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:圖的定義和術(shù)語,圖的鄰接矩陣、鄰接表和邊集數(shù)組表示,圖的深度和廣度優(yōu)先搜索遍歷,圖的生成樹和最小生成樹,拓?fù)渑判颉?/p>
教學(xué)重點(diǎn):圖在鄰接矩陣與鄰接表上實(shí)現(xiàn)的遍歷算法(dfs和bfs)。教學(xué)難點(diǎn):基于遍歷算法的應(yīng)用。
第一節(jié)。
一、圖的定義。
二、無向圖。
三、有向圖。
四、連通圖。
五、生成樹。
第二節(jié)。
一、數(shù)組表示法。
二、鄰接表三、十字鏈表。
四、鄰接多重表。
第三節(jié)。
一、深度優(yōu)先搜索。
二、廣度優(yōu)先搜索。
三、連通分量。
第四節(jié)。
一、kruskal算法。
二、prim算法。
第五節(jié)。
一、拓?fù)渑判颉?/p>
二、關(guān)鍵路徑。
第六節(jié)。
一、從某個源點(diǎn)到其余各項(xiàng)點(diǎn)的最短路徑。
二、每一對頂點(diǎn)之間的最短路徑。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
12學(xué)時。
最短路徑有向無環(huán)圖及其應(yīng)用。
最小生成樹圖的遍歷圖的存儲表示圖的定義和術(shù)語。
第八章查找表。
(一)教學(xué)目的與要求。
介紹順序表查找和有序表查找的方法及實(shí)現(xiàn);二叉排序樹和平衡二叉樹的定義、對二叉排序樹和平衡二叉樹進(jìn)行插入、刪除和查找的方法和實(shí)現(xiàn)。哈希表的定義,構(gòu)造哈希函數(shù)的多種方法,以及處理沖突的方法;b樹的定義,查找、插入和刪除元素的方法。熟練掌握順序表查找和有序表查找的方法及實(shí)現(xiàn);掌握二叉排序樹和平衡二叉樹的定義、熟練掌握對二叉排序樹和平衡二叉樹進(jìn)行插入、刪除和查找的方法和實(shí)現(xiàn)。掌握哈希表的定義,構(gòu)造哈希函數(shù)的多種方法,以及處理沖突的方法;了解b樹的定義,查找、插入和刪除元素的方法。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:順序查找和二分查找,索引查找和分塊查找,散列查找,動態(tài)查找樹表。教學(xué)重點(diǎn):順序查找、二分查找、二叉排序樹上查找以及散列表上查找的基本思想和算法實(shí)現(xiàn)。
教學(xué)難點(diǎn):二叉排序樹的刪除算法。
第一節(jié)。
一、順序表的查找。
二、有序表的查找。
三、靜態(tài)樹表的查找。
四、索引順序表的查找。
第二節(jié)一、二叉排序樹。
二、平衡二叉樹。
三、動態(tài)的m路搜索樹。
四、b樹和b+樹基本概念。
第三節(jié)。
一、什么是哈希表。
二、哈希函數(shù)的構(gòu)造方法。
三、處理沖突的方法。
四、哈希表的查找及其分析。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
10學(xué)時。
第九章內(nèi)部排序。
(一)教學(xué)目的與要求。
介紹插入排序、交換排序、選擇排序、快速排序、歸并排序、基數(shù)排序的方法及其實(shí)現(xiàn),快速排序、堆排序、二路歸并排序的方法及其實(shí)現(xiàn),各種排序方法的穩(wěn)定性、時間復(fù)雜度和空間復(fù)雜度。掌握插入排序、交換排序、選擇排序、快速排序、歸并排序、基數(shù)排序的方法及其實(shí)現(xiàn),熟練掌握快速排序、堆排序、二路歸并排序的方法及其實(shí)現(xiàn),掌握各種排序方法的穩(wěn)定性、時間復(fù)雜度和空間復(fù)雜度。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:排序的概念,直接插入排序,冒泡排序和快排序,直接選擇排序和堆排序,歸并排序。
哈希表動態(tài)查找表靜態(tài)查找表教學(xué)重點(diǎn):插入排序(直接插入、折半插入)、交換排序(冒泡、快速排序)、選擇排序(直接選擇、堆)、2-路歸并排序。
教學(xué)難點(diǎn):快速排序partition算法的應(yīng)用和堆的調(diào)整。
第一節(jié)。
一、穩(wěn)定的排序方法。
二、內(nèi)部/外部排序。
三、內(nèi)部排序種類。
四、排序中的基本操作。
五、排序數(shù)據(jù)的存儲方式。
第二節(jié)。
一、直接插入排序。
二、其他插入排序。
三、希爾排序。
第三節(jié)。
一、起泡排序算法。
二、快速排序算法。
第四節(jié)。
一、簡單選擇排序。
二、樹形選擇排序。
三、堆排序。
第五節(jié)第六節(jié)。
一、多關(guān)鍵字的排序。
二、鏈?zhǔn)交鶖?shù)排序。
第七節(jié)。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
10學(xué)時。
第十章文件。
(一)教學(xué)目的與要求。
介紹文件和記錄的基本概念以及基本操作。掌握文件和記錄的基本概念以及基本操作。
(二)教學(xué)內(nèi)容。
主要內(nèi)容:基本概念,順序文件,索引文件,索引順序文件,散列文件,多關(guān)鍵碼文件。教學(xué)重點(diǎn):各種文件的結(jié)構(gòu)特點(diǎn)及其適用場合。教學(xué)難點(diǎn):各種文件的結(jié)構(gòu)特點(diǎn)及其適用場合。
第一節(jié)。
一、文件及其類別。
二、記錄的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。
三、文件的操作。
四、文件的物理結(jié)構(gòu)。
第二節(jié)。
一、順序文件的定義。
順序文件基本概念。
各種排序方法的綜合比較。
歸并排序法基數(shù)排序選擇排序法交換排序法插入排序排序的定義和方法。
二、順序文件的優(yōu)缺點(diǎn)。
第三節(jié)。
一、索引文件的定義。
二、索引文件的特點(diǎn)。
第四節(jié)。
一、isam文件。
二、vsam文件。
第五節(jié)。
一、散列文件的定義。
二、散列文件的特點(diǎn)。
第六節(jié)。
一、多重表文件。
二、倒排文件。
(三)教學(xué)方法與形式。
課堂講授、多媒體課件。
(四)教學(xué)時數(shù)。
4學(xué)時。
三、考核方式。
本課程的考核采用閉卷考試的方式,課程的總評成績由平時成績、實(shí)驗(yàn)成績和期末考試成績?nèi)糠纸M成,其中平時成績占總評成績的10%,實(shí)驗(yàn)成績占總評成績的30%,期末考試成績占總評成績的60%。
四、教材選用。
1、殷人昆,陶永雷,謝若陽等:《數(shù)據(jù)結(jié)構(gòu)(用面向?qū)ο蠓椒ㄅcc++語言描述)》,清華大學(xué)出版社,2007.6年第二版。
2、嚴(yán)蔚敏,吳偉民:《數(shù)據(jù)結(jié)構(gòu)(c語言版)》及《數(shù)據(jù)結(jié)構(gòu)題集(c語言版)》,清華大學(xué)出版社,2003年第一版。
多關(guān)鍵碼文件散列文件isam文件和vsam文件。
索引文件。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇七
本學(xué)期所學(xué)習(xí)的《數(shù)據(jù)結(jié)構(gòu)與算法》課程已經(jīng)告一段落,就其知識點(diǎn)及其掌握情況、學(xué)習(xí)體會以及對該門課程的教學(xué)建議等方面進(jìn)行學(xué)習(xí)總結(jié)。以便在所學(xué)習(xí)知識有更深刻的認(rèn)識。
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)之前、一直以為數(shù)據(jù)結(jié)構(gòu)是一門新的語言、后來才知道學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)是為了更加高效的的組織數(shù)據(jù)、設(shè)計(jì)出良好的算法,而算法則是一個程序的靈魂。經(jīng)過了一學(xué)期的數(shù)據(jù)結(jié)構(gòu)了,在期末之際對其進(jìn)行總結(jié)。首先,學(xué)完數(shù)據(jù)結(jié)構(gòu)我們應(yīng)該知道數(shù)據(jù)結(jié)構(gòu)講的是什么,數(shù)據(jù)結(jié)構(gòu)課程主要是研究非數(shù)值計(jì)算的研究的程序設(shè)計(jì)問題中所出現(xiàn)的計(jì)算機(jī)處理對象以及它們之間關(guān)系和操作的學(xué)科。
第一章主要介紹了相關(guān)概念,如數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)類型以及數(shù)據(jù)結(jié)構(gòu)的定義。其中,數(shù)據(jù)結(jié)構(gòu)包括邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和運(yùn)算集合。邏輯結(jié)構(gòu)分為四類:集合型、線性、樹形和圖形結(jié)構(gòu),數(shù)據(jù)元素的存儲結(jié)構(gòu)分為:順序存儲、鏈接存儲、索引存儲和散列存儲四類。最后著重介紹算法性能分析,包括算法的時間性能分析以及算法的空間性能分析。
第二章具體地介紹了順序表的定義、特點(diǎn)及其主要操作,如查找、插入和刪除的實(shí)現(xiàn)。需要掌握對它們的性能估計(jì)。包括查找算法的平均查找長度,插入與刪除算法中的對象平均移動次數(shù)。
鏈表中數(shù)據(jù)元素的存儲不一定是連續(xù)的,還可以占用任意的、不連續(xù)的物理存儲區(qū)域。與順序表相比,鏈表的插入、刪除不需要移動元素,給算法的效率帶來較大的提高。鏈表這一章中介紹了鏈表的節(jié)點(diǎn)結(jié)構(gòu)、靜態(tài)與動態(tài)鏈表的概念、鏈表的基本運(yùn)算(如求表長、插入、查找、刪除等)、單鏈表的建立(頭插法和尾插法)以及雙向循環(huán)鏈表的定義、結(jié)構(gòu)、功能和基本算法。
第三章介紹了堆棧與隊(duì)列這兩種運(yùn)算受限制的線性結(jié)構(gòu)。其基本運(yùn)算方法與順序表和鏈表運(yùn)算方法基本相同,不同的是堆棧須遵循“先進(jìn)后出”的規(guī)則,對堆棧的操作只能在棧頂進(jìn)行;而隊(duì)列要遵循“先進(jìn)先出”的規(guī)則,教材中列出了兩種結(jié)構(gòu)的相應(yīng)算法,如入棧、出棧、入隊(duì)、出隊(duì)等。在介紹隊(duì)列時,提出了循環(huán)隊(duì)列的概念,以避免“假溢出”的現(xiàn)象。算法上要求掌握進(jìn)棧、退棧、取棧頂元素、判??蘸兄每諚5任宸N操作及掌握使用元素個數(shù)計(jì)數(shù)器及少用一個元素空間來區(qū)分隊(duì)列空、隊(duì)列滿的方法。
第四章串和數(shù)組中,我們知道串是一種特殊的線性表,是由零個或多個任意字符組成的字符序列。串的儲存結(jié)構(gòu)分為緊縮模式和非緊縮模式。
基本運(yùn)算需掌握求串長、串賦值、連接操作、求子串、串比較、串定位、串插入、串刪除、串替換等。
第五章二叉樹的知識是重點(diǎn)內(nèi)容。在介紹有關(guān)概念時,提到了二叉樹的性質(zhì)以及兩種特殊的二叉樹:完全二叉樹和滿二叉樹。接著介紹二叉樹的順序存儲和鏈接存儲以及生成算法。重點(diǎn)介紹二叉樹的遍歷算法(遞歸算法、先序、中序和后序遍歷非遞歸算法)和線索二叉樹。二叉樹的應(yīng)用:基本算法、哈弗曼樹、二叉排序樹和堆排序。
樹與二叉樹是不同的概念。教材介紹了樹和森林的概念、遍歷和存儲結(jié)構(gòu),還有樹、森林和二叉樹的相互關(guān)系,樹或森林怎樣轉(zhuǎn)化成二叉樹,二叉樹又如何轉(zhuǎn)換為樹和森林等算法。
第六章介紹了圖的概念及其應(yīng)用,圖的存儲結(jié)構(gòu)的知識點(diǎn)有:鄰接矩陣、鄰接表、逆鄰接表、十字鏈表和鄰接多重表。圖的遍歷包括圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷。其余知識點(diǎn)有:有向圖、連通圖、生成樹和森林、最短路徑問題和有向無環(huán)圖及其應(yīng)用。有向無環(huán)圖重點(diǎn)理解aov網(wǎng)和拓?fù)渑判蚣捌渌惴ā?/p>
最后兩章集體說明了查找和排序算法,查找教材上介紹了靜態(tài)查找表和哈希查找表,靜態(tài)查找表中介紹了順序查找、折半查找以及分塊查找。哈希法中,學(xué)習(xí)要點(diǎn)包括哈希函數(shù)的比較;解決地址沖突的線性探查法的運(yùn)用,平均探查次數(shù);解決地址沖突的二次哈希法的運(yùn)用。
排序是使用最頻繁的一類算法,可分為內(nèi)部排序和外部排序。主要需要理解排序的基本概念,在算法上、需要掌握插入排序(包括直接插入排序算法、折半插入排序算法),交換排序(包括冒泡排序算法、快速排序遞歸算法),選擇排序(包括直接選擇排序算法、堆排序算法)等。
二、對各知識點(diǎn)的掌握情況。
總體來看,對教材中的知識點(diǎn)理解較為完善,但各個章節(jié)均出現(xiàn)有個別知識點(diǎn)較為陌生的現(xiàn)象?,F(xiàn)將各個章節(jié)出現(xiàn)的知識點(diǎn)理解情況列舉如下。
第一章中我對數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)的概念理解較為透徹,熟悉數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)。而對算法的時間、空間性能分析較為模糊,尤其是空間性能分析需要加強(qiáng)。
第二章,順序表的概念、生成算法理解較為清晰,并且熟悉簡單順序查找和二分查找,對分塊查找較為含糊;排序問題中,由于冒泡排序在大一c語言課上已經(jīng)學(xué)習(xí)過,再來學(xué)習(xí)感覺很輕松。對插入排序和選擇排序理解良好,但是,在實(shí)際運(yùn)用中仍然出現(xiàn)明顯不熟練的現(xiàn)象。由于在歸并排序?qū)W習(xí)中感覺較吃力,現(xiàn)在對這種排序方法仍然非常模糊,所以需要花較多的時間來補(bǔ)習(xí)。此外串的模式匹配也是較難理解的一個地方。
鏈表這一章中,除對雙向循環(huán)鏈表這一知識點(diǎn)理解困難之外,其他的知識點(diǎn)像單鏈表的建立和基本算法等都較為熟悉。
接下來的有關(guān)堆棧以及隊(duì)列的知識點(diǎn)比較少,除有關(guān)算法較為特殊以外,其余算法都是先前學(xué)過的順序表和鏈表的知識,加上思想上較為重視,因此這部分內(nèi)容是我對全書掌握最好的一部分。不足之處仍然表現(xiàn)在算法的性能分析上。
在學(xué)習(xí)第六章時感覺較為吃力的部分在于矩陣的應(yīng)用上,尤其對矩陣轉(zhuǎn)置算法的c語言描述不太理解。稀疏矩陣相加算法中,用三元組表實(shí)現(xiàn)比較容易理解,對十字鏈表進(jìn)行矩陣相加的方法較為陌生。
第七章是全書的重點(diǎn),卻也有一些內(nèi)容沒有完全理解。在第一節(jié)基本概念中,二叉樹的性質(zhì)容易懂卻很難記憶。對二叉樹的存儲結(jié)構(gòu)和遍歷算法這部分內(nèi)容掌握較好,能夠熟練運(yùn)用,而對于二叉樹應(yīng)用中的哈弗曼樹卻比較陌生。
第八章內(nèi)容較少,牽涉到所學(xué)的隊(duì)列的有關(guān)內(nèi)容,總體來說理解上沒有什么困難,問題依舊出現(xiàn)在算法的性能分析上。
散列結(jié)構(gòu)這一章理解比較完善的知識點(diǎn)有:基本概念和存儲結(jié)構(gòu)。散列函數(shù)中直接定址法和除留余數(shù)法學(xué)得比較扎實(shí),對數(shù)字分析法等方法則感覺較為陌生。對兩種沖突處理的算法思想的理解良好,問題在于用c語言描述上。
最后一章,圖及其應(yīng)用中,圖的定義、基本運(yùn)算如圖的生成等起初理解有困難,但隨著學(xué)習(xí)深入,對它的概念也逐步明朗起來。鄰接矩陣、鄰接表和逆鄰接表掌握較好,而對十字鏈表和鄰接多重表則較為陌生。感覺理解較為吃力的內(nèi)容還有圖的遍歷(包括深度和廣度優(yōu)先遍歷),最小生成樹問題也是比較陌生的知識點(diǎn)。最短路徑和aov網(wǎng)學(xué)習(xí)起來感覺比較輕松,而對于c語言描述卻又不大明白。
由于平時上機(jī)練習(xí)的少,對于教材中很多算法都掌握的不是很熟悉、不過這些都是可以彌補(bǔ)的,我會在剩下的時間中不斷練習(xí)書上給出的算法和練習(xí),正如教材上說的,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),僅從書本上學(xué)習(xí)是不夠的,必須經(jīng)過大量的程序設(shè)計(jì)實(shí)踐,在實(shí)踐中體會構(gòu)造性思維方法,掌握數(shù)據(jù)組織與程序設(shè)計(jì)技術(shù)。
三、學(xué)習(xí)體會:
多做實(shí)驗(yàn)!這個就沒有太多理由了,我一直覺得編程是一門熟練科學(xué),多編程,水平肯定會提高,最重要的是能夠養(yǎng)成一種感覺,就是對程序?qū)λ惴ǖ拿舾?,為什么那些牛人看一個算法一下子就看懂了?而自己要看很久才能弄懂,而且弄懂了過了一陣子又忘記了?其實(shí)這個是因?yàn)榕H藗円郧翱吹某绦蚝芏?,編得也很多,所以他們有了那種感覺,所以我覺得大家應(yīng)該多看程序,多寫程序,培養(yǎng)自己的感覺。
復(fù)習(xí)和考試的技巧,我想大家應(yīng)該都有這樣的感覺,就是覺得自己什么都掌握了,但是在考試的時候就是會犯暈,有時候一出考場就知道錯在哪個了,然后考完以后一對答案,發(fā)現(xiàn)其實(shí)考得很簡單,應(yīng)該都是自己會做的,這個就是與自己的復(fù)習(xí)和考試的技巧有關(guān)系了。
首先就是復(fù)習(xí),前面已經(jīng)說過其實(shí)我們學(xué)的算法也就是幾十個,那么我們的任務(wù)也就是理解這幾十個算法,復(fù)習(xí)也就是要加深你的理解。如何理解算法,然后理解到什么程度呢?是能默出整個算法嗎?其實(shí)不是這樣的,數(shù)據(jù)結(jié)構(gòu)的考試有它的特點(diǎn),考過程考試了,大家應(yīng)該都發(fā)現(xiàn)數(shù)據(jù)結(jié)構(gòu)其實(shí)不要求你把整個算法背出來,它注重考察你的理解,那么怎么考察呢?其實(shí)也就是兩種方式吧,一種就是用實(shí)例,就是給你一個例子,要你用某個算法運(yùn)行出結(jié)果,我想這個期末考試的時候仍然會有很多這樣的題目,比如排序那塊就很好出這樣的題目,要復(fù)習(xí)這種題目我覺得很簡單,就是每個算法都自己用例子去實(shí)踐一下,以不變應(yīng)萬變,我期中復(fù)習(xí)的時候就是這樣去做的,而且考試之前我就覺得那個并查集的題目就很有可能會考,于是就自己出了幾個例子,做了一下。另外一種考察方式就是算法填空和算法改錯,可能有一些同學(xué)覺得這種題目很難,其實(shí)我們首先可以確定這兩種題目肯定是與書上算法有關(guān)系的,只要理解了書上的算法就可以了,有人覺得看完書以后什么都懂了,而且要默也默得出來,其實(shí)不是這樣的,算法改錯和填空主要是考察的細(xì)微處,雖然你覺得你默得出來,那是能夠默出算法的主體部分,很多細(xì)微的地方你就會很容易忽略。我想大家考過期中考以后應(yīng)該都有這種感覺吧?那要怎樣解決這種問題呢?我覺得有兩種方法,一種就是自己去編程實(shí)現(xiàn),這種方法比較有意義,還能夠提高編程水平,另外一種就是用實(shí)例分析算法的每句話,我認(rèn)為這種方法是最有效的。
然后還有一種題目,就是最后的寫算法的題目,我覺得這種題目還是很好解決的,只要是能夠自己做出作業(yè)的,基本上都會很容易做出來,這也是為什么我前面覺得平時做作業(yè)應(yīng)該自己獨(dú)立思考的原因,同時做這種題目千萬要小心,尤其是題目簡單的時候,那肯定會有一些小地方要考慮清楚,一不小心就會被扣掉很多分,這樣很不值。
我覺得考試的時候沒有太多要講的,只要復(fù)習(xí)好了,考試的時候細(xì)心一點(diǎn)就可以了,然后就是做一個題目開始就要盡量保證正確,如果覺得留在那里等后面做完了再來檢查,這樣錯誤還是很有可能檢查不出來,我期中考試的時候就基本上沒有檢查,因?yàn)槲易雒總€題目都是確保正確,用的時間也挺多的,然后也覺得沒有檢查的必要了。
1、建議在上課過程中加大隨堂練習(xí)的分量,以便學(xué)生能當(dāng)堂消化課堂上學(xué)習(xí)的知識,也便于及時了解學(xué)生對知識點(diǎn)的掌握情況,同時有助于學(xué)生保持良好的精神狀態(tài)。
2、建議在課時允許的情況下,增加習(xí)題課的分量,通過課堂的習(xí)題講解,加深對知識點(diǎn)的掌握,同時對各知識點(diǎn)的運(yùn)用有一個更為直觀和具體的認(rèn)識。
3、要更加重視實(shí)驗(yàn)的重要性。
以上便是我對《數(shù)據(jù)結(jié)構(gòu)與算法》這門課的學(xué)習(xí)總結(jié),我會抓緊時間將沒有吃透的知識點(diǎn)補(bǔ)齊。今后我仍然會繼續(xù)學(xué)習(xí),克服學(xué)習(xí)中遇到的難關(guān),在打牢基礎(chǔ)的前提下向更深入的層面邁進(jìn)!
數(shù)據(jù)結(jié)構(gòu)與算法心得篇八
在兩周的學(xué)習(xí)和實(shí)踐過程中,通過解決學(xué)生搭配問題這一實(shí)際問題,讓我對循環(huán)隊(duì)列有了更深的了解,對數(shù)據(jù)結(jié)構(gòu)也產(chǎn)生了更加濃厚的興趣,同時也是對我解決實(shí)際問題能力的一次提升。
記得王教授給我們上課時就要不斷的通過走算法的方式,掌握所學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)、算法等,而上機(jī)則能進(jìn)一步鞏固自己所學(xué)的知識、提高自己的學(xué)習(xí)能力。在上機(jī)的同時也改正了自己對某些算法的錯誤使用,使自己能在通過程序解決問題時抓住關(guān)鍵算法,能夠很好的夠造出解決問題的數(shù)據(jù)結(jié)構(gòu)、算法的設(shè)計(jì)思想和流程圖,并用c語言描繪出關(guān)鍵算法。
首先對于這次的課程設(shè)計(jì)題目而言,主要是對隊(duì)列這一知識點(diǎn)的運(yùn)用。首先是對問題的分析,明白題目的具體要求,即將現(xiàn)實(shí)生活中的舞會搭配問題,用鏈隊(duì)列這一數(shù)據(jù)結(jié)構(gòu)描繪出來。用兩個鏈隊(duì)列boy和girl分別代表男生和女生,當(dāng)播放每一首歌曲時,便可使兩隊(duì)各有一元素出隊(duì)列,這樣就可以模擬出搭配情況。同時,由于題目要求系統(tǒng)能模擬動態(tài)地顯示出上述過程,所以就考慮調(diào)用一個延遲函數(shù)sleep(),使歌曲之間有一段時間間隔,即模擬了顯示中的那一動態(tài)過程。其次便是在實(shí)現(xiàn)過程中遇到的具體細(xì)節(jié)問題,比如一開始設(shè)計(jì)了兩個出對函數(shù)dequeue(),讓首元素結(jié)點(diǎn)出隊(duì),然后調(diào)用入隊(duì)函數(shù)add(),使其入隊(duì)到隊(duì)尾,但在測試時發(fā)現(xiàn),如果輸入的人數(shù)為2,那么在到第三首歌曲時程序便會終止;經(jīng)過分析發(fā)現(xiàn)是這兩個函數(shù)的調(diào)用,使數(shù)據(jù)出錯,所以就將這兩個出對函數(shù)用一個函數(shù)change()代替,這個函數(shù)能實(shí)現(xiàn)將首元素結(jié)點(diǎn)移到隊(duì)尾的功能。這樣不僅沒有了之前的問題,而且使程序更加易懂。在這些細(xì)節(jié)方面的具體設(shè)計(jì),是對個人分析問題、解決問題能力的一個很好的鍛煉。通過這個過程的鍛煉,不僅能對所學(xué)的知識點(diǎn)有很好的掌握,而且還是對個人能力的很好的訓(xùn)練。
其次,以前我對數(shù)據(jù)結(jié)構(gòu)(c語言描述)的一些標(biāo)準(zhǔn)庫函數(shù)不太了解,還有對函數(shù)調(diào)用的正確使用不夠熟悉,還有對c語言中經(jīng)常出現(xiàn)的錯誤也不了解,通過實(shí)踐,使我在這幾個方面的認(rèn)識有所提高。讓自己有一定的能力去改正一些常見的錯誤語法,很高興這兩周的學(xué)習(xí)讓我對數(shù)據(jù)結(jié)構(gòu)(c語言描述)有了新的認(rèn)識,所以后在學(xué)習(xí)過程中,我會更加注視實(shí)踐操作,使自己便好地學(xué)好計(jì)算機(jī)。在這次課程設(shè)計(jì)的實(shí)驗(yàn)中,我收獲了許多知識,通過查找大量資料,請教老師,以及不懈的努力,也培養(yǎng)了獨(dú)立思考、動手操作的能力。我也學(xué)會了許多學(xué)習(xí)和解決實(shí)際問題的方法,讓我受益匪淺。課程設(shè)計(jì)對我來說,趣味性強(qiáng),不僅鍛煉能力,而且可以學(xué)到很多東西,在與老師和同學(xué)的交流過程中,互動學(xué)習(xí),將知識融會貫通,也增強(qiáng)了我和同學(xué)之間的團(tuán)隊(duì)合作的能力。讓我們知道只要努力,集中精力解決問題,一定會有收獲的,過程也是很重要的。
在這次課程設(shè)計(jì)中我們要學(xué)會利用時間,在規(guī)定的時間內(nèi)完成我們的任務(wù),要逐漸養(yǎng)成用c語言編寫程序的良好習(xí)慣。這些對我來說都是一種鍛煉,一個知識積累的過程,一種能力的提高。要打好基礎(chǔ),才能用更好的辦法,更簡潔明了的程序解決實(shí)際問題,只有這樣才能進(jìn)一步的取得更好的成績。我們會更加努力,努力的去彌補(bǔ)自己的缺點(diǎn),發(fā)展自己的優(yōu)點(diǎn),去充實(shí)自己,只有在了解了自己的長短之后,我們會更加珍惜擁有的,更加努力的去完善它,增進(jìn)它。
當(dāng)然我現(xiàn)在的水平還是很有限,但我還會繼續(xù)努力的,在解決實(shí)際問題時如果遇到了難題,我們要學(xué)會去查找大量的有關(guān)這方面的資料,還要借助于網(wǎng)絡(luò)不斷擴(kuò)大自己的知識面和閱讀量。這樣也可以鍛煉我們的自主學(xué)習(xí)能力和解決問題的能力,學(xué)到了許多以前沒學(xué)到的東西。
在課程設(shè)計(jì)中的程序都比較復(fù)雜,所以需要我們要更加地細(xì)心,認(rèn)真的完成每一步的操作,修改語法,按照老師的指導(dǎo)思想來完成。還記得一開始拿到題目時我們的一臉茫然,而現(xiàn)在是收獲滿滿的自信,每個人都或多或少有所收獲,也讓我們對程序設(shè)計(jì)和算法有了進(jìn)一步理解、認(rèn)識。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇九
數(shù)據(jù)結(jié)構(gòu)與算法是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),它不僅是計(jì)算機(jī)科學(xué)的核心課程,而且也已經(jīng)成為其他理工專業(yè)的熱門選修課。總的來說感觸還是比較深的,剛開始上的時候還蠻簡單的,越到后面感覺越難,算法也更復(fù)雜了,有時候甚至聽不懂,老師上課時講的也蠻快的,所以只能靠課下下功夫了。下面是我對本學(xué)期學(xué)習(xí)這門課的總結(jié)。
第一章的數(shù)據(jù)結(jié)構(gòu)和算法的引入,介紹了數(shù)據(jù)和數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)、算法描述工具、算法和算法評價四個方面的知識。
第二章具體地介紹了順序表的概念、基本運(yùn)算及其應(yīng)用?;具\(yùn)算有:初始化表、求表長、排序、元素的查找、插入及刪除等。元素查找方法有:簡單順序查找、二分查找和分塊查找。排序方法有:直接插入排序、希爾排序、冒泡排序、快速排序、直接選擇排序及歸并排序等。最后介紹了順序串的概念,重點(diǎn)在于串的模式匹配。
第三章主要介紹的是線性邏輯結(jié)構(gòu)的數(shù)據(jù)在鏈接存儲方法下數(shù)據(jù)結(jié)構(gòu)鏈表的相關(guān)知識。主要是單鏈表、循環(huán)鏈表的數(shù)據(jù)類型結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、基本運(yùn)算及其實(shí)現(xiàn)以及鏈表的相關(guān)應(yīng)用問題,在此基礎(chǔ)上介紹了鏈串的相關(guān)知識。在應(yīng)用方面有多項(xiàng)式的相加問題、歸并問題、箱子排序問題和鏈表在字符處理方面的應(yīng)用問題等。本章未完全掌握的是循環(huán)鏈表的算法問題和c的描述。
第四章介紹在兩種不同的存儲結(jié)構(gòu)下設(shè)計(jì)的堆棧,即順序棧和鏈棧的相關(guān)知識,了解堆棧的相關(guān)應(yīng)用,掌握應(yīng)用堆棧來解決實(shí)際問題的思想及方法。本章主要內(nèi)容是順序棧和鏈棧的概念、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)定義和基本運(yùn)算算法及其性能分析。本章堆棧算法思想較為簡單,所以能較好掌握。
第五章主要介紹順序存儲和鏈接存儲方法下的兩種隊(duì)列、順序(循環(huán))隊(duì)列和鏈隊(duì)列的數(shù)據(jù)結(jié)構(gòu)、基本運(yùn)算及其性能分析以及應(yīng)用。順序隊(duì)列(重點(diǎn)是循環(huán)隊(duì)列)和鏈隊(duì)列的概念、數(shù)據(jù)類型描述、數(shù)據(jù)結(jié)構(gòu)和基本運(yùn)算算法及其性能分析等。本章同堆棧有點(diǎn)類似,算法思想較為簡單,所以能較好掌握;但難點(diǎn)重在循環(huán)隊(duì)列隊(duì)空、隊(duì)滿的判斷條件問題。
第六章“特殊矩陣、廣義表及其應(yīng)用”將學(xué)習(xí)數(shù)組、稀疏矩陣和廣義表的基本概念,幾種特殊矩陣的存儲結(jié)構(gòu)及其基本運(yùn)算,在此基礎(chǔ)上學(xué)習(xí)特殊矩陣的計(jì)算算法與廣義表應(yīng)用等相關(guān)問題。本章的重點(diǎn)是相關(guān)數(shù)據(jù)結(jié)構(gòu)的存儲結(jié)構(gòu)及其基本運(yùn)算算法。掌握了特殊矩陣的壓縮存儲結(jié)構(gòu),在該存儲結(jié)構(gòu)下元素的定位方法,理解了稀疏矩陣的計(jì)算和廣義表的存儲結(jié)構(gòu)。
第七章二叉樹及其應(yīng)用。分為二叉樹的基本概念、二叉樹存儲結(jié)構(gòu)、二叉樹的遍歷算法、線索二叉樹、二叉樹的應(yīng)用(哈夫曼樹、二叉排序樹、堆和堆排序、基本算法)?;舅惴òǘ鏄涞慕?、遍歷、線索化等算法。在此基礎(chǔ)上,介紹二叉樹的一些應(yīng)用問題,包括哈夫曼編碼問題、(平衡)二叉排序樹問題和堆排序問題等。
第八章說的是樹和森林,首先我們要知道樹與二叉樹是不同的概念。課本介紹了樹和森林的概念、遍歷和存儲結(jié)構(gòu),還有樹、森林和二叉樹的相互關(guān)系,樹或森林怎樣轉(zhuǎn)化成二叉樹,二叉樹又如何轉(zhuǎn)換為樹和森林等算法。
第九章“散列結(jié)構(gòu)及其應(yīng)用”是邏輯結(jié)構(gòu)“集合型”的數(shù)據(jù)元素在散列存儲方法下的數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用知識內(nèi)容。主要介紹散列函數(shù)的概念、散列結(jié)構(gòu)的概念、散列存儲結(jié)構(gòu)的概念---散列表、散列函數(shù)和散列表中解決沖突的處理方法---開放定址法、鏈地址法以及散列表的基本算法及其性能分析。本章概念較為多,所以掌握不太好。
第十章圖及其應(yīng)用。分為圖的概念、圖的存儲結(jié)構(gòu)及其基本算法、圖的遍歷及算法、有向圖的連通性和最小生成樹、圖的最小生成樹、非連通圖的生成森林算法、最短路徑、有向無環(huán)圖及其應(yīng)用。
二、對各知識點(diǎn)的掌握情況。
我對各知識點(diǎn)的掌握情況總結(jié)如下:
對于第一章對數(shù)據(jù)結(jié)構(gòu)的概念理解頗深,大概是每次都要談?wù)摰桨伞λ惴ǖ臅r間性能,空間性能基本了解。這些在后面的章節(jié)都會有運(yùn)用。第二章本章重點(diǎn)和難點(diǎn)在查找和排序問題的算法思想上,6種排序方法的性能比較。本章未掌握的為希爾排序、快速排序、歸并排序的時間復(fù)雜度分析。第三章,對鏈表掌握還好,對其數(shù)據(jù)結(jié)構(gòu)進(jìn)行了分析,有循環(huán)鏈表,掌握的不是很好,對其中一些用法不熟練。第四章堆棧,本章堆棧算法思想較為簡單,所以能較好掌握,但表達(dá)式計(jì)算問題未掌握好的。第五章的循環(huán)隊(duì)列隊(duì)空、隊(duì)滿的判斷條件問題掌握的不是很好。第六章的重點(diǎn)是相關(guān)數(shù)據(jù)結(jié)構(gòu)的存儲結(jié)構(gòu)及其基本運(yùn)算算法。掌握了特殊矩陣的壓縮存儲結(jié)構(gòu),在該存儲結(jié)構(gòu)下元素的定位方法,理解了稀疏矩陣的計(jì)算和廣義表的存儲結(jié)構(gòu)。第七章對二叉樹掌握較好,其概念,存儲,遍歷有很好的掌握。就是對二叉排序樹有點(diǎn)生疏,它的生成算法不是很會。第八章樹樹與二叉樹之間的轉(zhuǎn)換,森林與二叉樹的轉(zhuǎn)換算法思想基本掌握。第九章散列的一些知識,沒有深入學(xué)習(xí),大概了解了散列存儲結(jié)構(gòu)散列表,散列函數(shù),沖突的處理方法。第十章了解了圖的逆鄰接表的存儲結(jié)構(gòu),關(guān)鍵路徑求解算法未能掌握好,不能靈活運(yùn)用圖的不同數(shù)據(jù)結(jié)構(gòu)和遍歷算法解決復(fù)雜的應(yīng)用問題。
三、學(xué)習(xí)體會。
剛剛接觸這門課時,看到課本中全是算法,當(dāng)時就暈了,因?yàn)槲业腸語言學(xué)的不好,我擔(dān)心會影響這門課的學(xué)習(xí),后來上課時老師說學(xué)習(xí)這門課的基礎(chǔ)是c語言,所以我當(dāng)時就決定一定要好好補(bǔ)補(bǔ),爭取不被拖后腿,在學(xué)習(xí)這門課的期間,也遇到了不少問。但是通過學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法,讓我對程序有了新的認(rèn)識,也有了更深的理解。同時,也讓我認(rèn)識到,不管學(xué)習(xí)什么,概念是基礎(chǔ),所有的知識框架都是建立在基礎(chǔ)概念之上的,所以,第一遍看課本要將概念熟記于心,然后構(gòu)建知識框架。并且,對算法的學(xué)習(xí)是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵。在第二遍看課本的過程中,要注重對算法的掌握。對于一個算法,讀一遍可能能讀懂,但不可能完全領(lǐng)會其中的思想。掌握一個算法,并不是說將算法背過,而是掌握算法的思想。我們需要的是耐心。每看一遍就會有這一遍的收獲。讀懂算法之后,自己再默寫算法,寫到不會的地方,看看課本想想自己為什么沒有想到。對算法的應(yīng)用上,學(xué)習(xí)算法的目的是利用算法解決實(shí)際問題。會寫課本上已有的算法之后,可以借其思想進(jìn)行擴(kuò)展,逐步提高編程能力。
四、對課程教學(xué)的建議。
1、課程課時較緊,課堂上的練習(xí)時間較少,講解的東西越多,頭腦有時就很混亂。
2、感覺上課時的氣氛不是很好,雖然大部分人都在聽,可是效果不是很好。所以希望老師能在授課中間能穿插一些活躍課堂氛圍的話題,可以是大家都非常關(guān)心的一些內(nèi)容,這樣既讓大家能在思考之余有一個放松,也能夠提高學(xué)生的學(xué)習(xí)積極性和學(xué)習(xí)效率。
3、學(xué)習(xí)的積極性很重要,有時候我們花了很長時間去寫實(shí)驗(yàn)報(bào)告,也很認(rèn)真的去理解去掌握,可是最后實(shí)驗(yàn)報(bào)告可能就只得了一個c,抄的人反而得a,這樣的話很容易打擊學(xué)生的積極性,在后面的實(shí)驗(yàn)報(bào)告中沒動力再去認(rèn)真寫。所以希望老師能在這方面有所調(diào)整。
4、雖然講課的時間很緊,但是還是希望老師能在講述知識點(diǎn)的時候能運(yùn)用實(shí)際的調(diào)試程序來給我們講解,這樣的話能讓我們對這些內(nèi)容有更深刻的印象和理解。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇十
知識部分:1.數(shù)據(jù)結(jié)構(gòu)的內(nèi)容:
數(shù)據(jù)的存儲結(jié)構(gòu):是數(shù)據(jù)的邏輯結(jié)構(gòu)在存儲器里的實(shí)現(xiàn);
數(shù)據(jù)的運(yùn)算:插入、刪除、排序、查找等;2.數(shù)據(jù)的存儲結(jié)構(gòu)分為:順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。3.單鏈表與雙鏈表的插入與刪除這里不再贅述,百度一下吧!
5.串的基本運(yùn)算有:鏈接、賦值、求長度、全等比較、求子串、求子串的位置及替換等。6.廣義表:廣義表是線性表的推廣,也稱列表。
廣義表的特點(diǎn):
廣義表的元素可以使字表,且字表的元素還可以是字表;
廣義表可以被其他廣義表所共享;
廣義表可以是遞歸的表,機(jī)本身的一個字表;
7.多維數(shù)組與稀疏矩陣的存儲比較復(fù)雜,請用百度查找相關(guān)內(nèi)容,不再贅述;
8.樹:樹并不重要,重要的知識點(diǎn)是二叉樹,對樹理解不透徹的同學(xué),請用百度搜索。9.二叉樹:
二叉樹的重點(diǎn)內(nèi)容包括:
二叉樹的遍歷:中序遍歷、前序遍歷、后續(xù)遍歷;(重點(diǎn)考察)完全二叉樹(定義):在一棵二叉樹中,若最多只有最下面兩層的節(jié)點(diǎn)數(shù)可小于2,且最下面一層的節(jié)點(diǎn)集中于最左邊的位置,則稱此二叉樹為完全二叉樹;樹的先根次序周游對應(yīng)于二叉樹的前序周游(遍歷),樹的后根次序周游對應(yīng)于二叉樹的中序周游(遍歷)。
10.二叉樹的存儲結(jié)構(gòu):鏈?zhǔn)酱鎯Y(jié)構(gòu)與順序存儲結(jié)構(gòu)。
二叉樹的鏈?zhǔn)酱鎯Γ?/p>
是指二叉樹的各節(jié)點(diǎn)隨機(jī)存儲在內(nèi)存空間中,節(jié)點(diǎn)之間的關(guān)系用指針標(biāo)示;
二叉樹的順序存儲:
二叉樹的順序存儲就是按一定的次序,用一組地址連續(xù)的存儲單元存儲二叉樹的節(jié)點(diǎn)元素;
完全二叉樹的順序存儲的性質(zhì):
用數(shù)組a[1….n]順序存儲完全二叉樹的各節(jié)點(diǎn),則當(dāng)i0,且i=[(n-1)/2]時,節(jié)點(diǎn)a[i]的右子女是節(jié)點(diǎn)a[2i+1],否則節(jié)點(diǎn)a[i]沒有右子女;同理當(dāng)i0且i=[n/2],節(jié)點(diǎn)i的左子女節(jié)點(diǎn)是2i,否則沒有!11.哈夫曼樹:基本定義術(shù)語:
節(jié)點(diǎn)的路徑長度:從根節(jié)點(diǎn)到該節(jié)點(diǎn)的路徑上分支的數(shù)目;
樹的路徑長度:樹中所有的節(jié)點(diǎn)的路徑長度之和;
哈夫曼樹:在有n個葉子節(jié)點(diǎn),并帶有相同權(quán)值的二叉樹中,必定存在一個二叉樹,使其帶權(quán)路徑長度最短,這樣的二叉樹被稱為“最優(yōu)二叉樹”或“哈夫曼樹”
如下圖:
12.排序算法:
??嫉呐判蛩惴ㄓ校翰迦肱判?、冒泡排序、選擇排序、快速排序、堆排序。
快速排序:這是一種高效排序方法:
實(shí)踐證明,快速排序是所有排序算法中最高效的一種。它采用了分治的思想:先保證列表的前半部分都小于后半部分,然后分別對前半部分和后半部分排序,這樣整個列表就有序了。這是一種先進(jìn)的思想,也是它高效的原因。因?yàn)樵谂判蛩惴ㄖ?,算法的高效與否與列表中數(shù)字間的比較次數(shù)有直接的關(guān)系,而“保證列表的前半部分都小于后半部分”就使得前半部分的任何一個數(shù)從此以后都不再跟后半部分的數(shù)進(jìn)行比較了,大大減少了數(shù)字間不必要的比較。但查找數(shù)據(jù)得另當(dāng)別論了。
堆排序:與前面的算法都不同,它是這樣的:
首先新建一個空列表,作用與插入排序中的“有序列表”相同。
找到數(shù)列中最大的數(shù)字,將其加在“有序列表”的末尾,并將其從原數(shù)列中刪除。
重復(fù)2號步驟,直至原數(shù)列為空。
堆排序的平均時間復(fù)雜度為nlogn,效率高(因?yàn)橛卸堰@種數(shù)據(jù)結(jié)構(gòu)以及它奇妙的特征,使得“找到數(shù)列中最大的數(shù)字”這樣的操作只需要o(1)的時間復(fù)雜度,維護(hù)需要logn的時間復(fù)雜度),但是實(shí)現(xiàn)相對復(fù)雜(可以說是這里7種算法中比較難實(shí)現(xiàn)的)。
看起來似乎堆排序與插入排序有些相像,但他們其實(shí)是本質(zhì)不同的算法。至少,他們的時間復(fù)雜度差了一個數(shù)量級,一個是平方級的,一個是對數(shù)級的。
算法的時間復(fù)雜度:
平均時間復(fù)雜度。
插入排序o(n2)。
冒泡排序o(n2)。
選擇排序o(n2)。
快速排序o(nlogn)。
堆排序o(nlogn)。
歸并排序o(nlogn)。
基數(shù)排序o(n)。
希爾排序o(n1.25)。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇十一
通過這次課程設(shè)計(jì)使我進(jìn)一步達(dá)到理論與實(shí)際相結(jié)合,提高了自己組織數(shù)據(jù)及編寫程序的能力,使我們能夠根據(jù)問題要求和數(shù)據(jù)對象的特性,學(xué)會數(shù)據(jù)組織的方法,把現(xiàn)實(shí)世界中的實(shí)際問題在計(jì)算機(jī)內(nèi)部表示出來并用軟件解決問題,培養(yǎng)良好的程序設(shè)計(jì)技能,掌握設(shè)計(jì)程序的思路,學(xué)會用計(jì)算機(jī)語言編寫程序,以實(shí)現(xiàn)所需處理的任務(wù),鍛煉自己的動腦能力,學(xué)會用自己的思路解決現(xiàn)實(shí)中的實(shí)際問題,雖然一開始也走了一些彎路不過在同學(xué)和老師的'點(diǎn)撥下完成了該程序,這次課程設(shè)計(jì)中遇到了很多問題,一開始準(zhǔn)備用二維數(shù)組存放的可考慮到同一個學(xué)校同一個項(xiàng)目有好幾個人參加,就不能用二維數(shù)組了,如果每個學(xué)校都申請一個二維數(shù)組也非常不方便,還是用順序表方便也不浪費(fèi)空間,在這次課程設(shè)計(jì)的過程中雖然很多次都參照了課本及資料,不過這使我更加熟悉了順序表以及結(jié)構(gòu)體的定義及實(shí)現(xiàn),調(diào)試過程中也遇到了一些問題也都是自己獨(dú)立思考完成的,還有一個體會是,遇到不會的地方可以參考課本也可以去圖書館或網(wǎng)上查資料,當(dāng)然主要思路有了也就簡單點(diǎn)了。在老師的答辯指指導(dǎo)下,程序數(shù)組那塊程序的書寫老師問我為什么是那樣的,當(dāng)時寫這塊程序的時候是看書上數(shù)組那塊程序再加上自己的主觀想法覺得就是這樣寫的,雖然這塊程序當(dāng)時那種主觀想法是寫對了,但是經(jīng)過老師的答辯提問才知道雖然是寫對了,但是這種思考和想法是錯誤不科學(xué)的,真正的是因?yàn)榈?次循環(huán)是因?yàn)榈谝淮吾尫帕艘粋€。所以通過這次課程設(shè)計(jì)讓我懂得了一個很重要的道理,就是以后如果哪地方有一點(diǎn)迷惑,有一點(diǎn)不懂的地方不能憑自己主觀的思考和想法覺得應(yīng)該是這樣的,一定要找老師問清楚為什么是這樣的,一定要把每步每個小程序都要搞的十分的清楚,這真是個很好的收獲。還有就是這個程序的男女問題上,開始準(zhǔn)備在結(jié)構(gòu)體中加一個sex的點(diǎn),大使那樣對與男女項(xiàng)目還是有點(diǎn)麻煩,后來在同學(xué)的提醒下,通過參賽項(xiàng)目號就可以解決了,比m大就是女子項(xiàng)目,比m小或者等于m就是男子項(xiàng)目。這樣就可以很完美地解決這個問題了。
其實(shí),當(dāng)你實(shí)驗(yàn)遇到問題時,自己會通過很多途徑去解決它,沒有解決時,心急如焚,解決之后的那種快感是前所未有的,這也許就是付出了行動之后的收獲吧!
這也教會了我們以后在社會上,遇見了事情不可怕,只要不被困難擊倒,解決了它,那樣我們就是勝利的!
xxx。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇十二
時光荏苒,如白駒過隙般匆匆而去,眼看的一年實(shí)習(xí)生活馬上就要成為美好的回憶。在這短短一年的時間里我感覺自己成長了許多,從象牙塔邁出的第一步走的特別的穩(wěn)重,感謝學(xué)校給我提供了一個努力拼搏的舞臺,讓我學(xué)會了如何面對這個真實(shí)的社會,實(shí)現(xiàn)了從在校學(xué)子向職場人士的轉(zhuǎn)變。
實(shí)習(xí)是繼中考后又一個人生的十字路口,它意味著人生一個新時期的到來——告別學(xué)校走入社會。社會是個大的集合,不管是以前的學(xué)校還是現(xiàn)在的實(shí)習(xí)單位都同屬這個集合。這幾個月來,給我感覺學(xué)校純一點(diǎn),單位復(fù)雜一點(diǎn)。不過我知道不論學(xué)校還是單位其實(shí)都是社會的縮影。實(shí)習(xí)的真正目的就是讓我們這些在校的學(xué)生走入社會。社會是形形色色、方方面面的,你要學(xué)會的是適應(yīng)這個社會而不是讓這個社會適應(yīng)你。
剛剛走進(jìn)社會不適應(yīng)是正常的。人有的時候很奇怪:心情或者更準(zhǔn)確地說是熱情往往會因時間、環(huán)境、所經(jīng)歷的事而起伏。就像我對境界一詞的理解:人與他所受教育、所處環(huán)境、所經(jīng)歷對事物的理解、判斷、預(yù)知的程度就是這個人的境界。作為一名中專生,專業(yè)需求的建筑認(rèn)識實(shí)訓(xùn)開始了,我們?nèi)珜I(yè)的同學(xué)在__的各大建筑工地認(rèn)識實(shí)習(xí),對于我當(dāng)初選擇土木工程這樣的專業(yè),說真的我并不知道什么是土木工程?,F(xiàn)在我對土木工程有了基本的感性認(rèn)識了,我想任何事的認(rèn)識都是通過感性認(rèn)識上升到理性認(rèn)識的,這次認(rèn)識實(shí)習(xí)應(yīng)該是一個鍛煉的好機(jī)會!
土木工程是建造各類工程設(shè)施的學(xué)科、技術(shù)和工程的總稱。它既指與與人類生活、生產(chǎn)活動有關(guān)的各類工程設(shè)施,如建筑公程、公路與城市道路工程、鐵路工程、橋梁工程、隧道工程等,也指應(yīng)用材料、設(shè)備在土地上所進(jìn)行的勘測、設(shè)計(jì)、施工等工程技術(shù)活動。
我應(yīng)該知道現(xiàn)在的.我還不夠成熟,如果說人生是一片海洋,那么我應(yīng)該在這片海洋里劈波斬浪,揚(yáng)帆遠(yuǎn)航而不是躲在避風(fēng)港里。只要經(jīng)歷多了,我就會成熟;我就會變強(qiáng)。我相信。那時的成功是領(lǐng)導(dǎo)、師傅們給我鼓勵,是實(shí)習(xí)的經(jīng)歷給我力量,所以我感謝領(lǐng)導(dǎo)師傅還有我的好朋友們,也感謝學(xué)校給我這次實(shí)習(xí)的機(jī)會。一年的實(shí)習(xí)生活中,緊張過,努力過,醒悟過,開心過。這些從為有過的經(jīng)歷讓我進(jìn)步了,成長了。學(xué)會了一些在學(xué)校從未學(xué)過以后也學(xué)不到的東西,也有很多的感悟。
通過本次課程設(shè)計(jì),對圖的概念有了一個新的認(rèn)識,在學(xué)習(xí)離散數(shù)學(xué)的時候,總覺得圖是很抽象的東西,但是在學(xué)習(xí)了《數(shù)據(jù)結(jié)構(gòu)與算法》這門課程之后,我慢慢地體會到了其中的奧妙,圖能夠在計(jì)算機(jī)中存在,首先要捕捉他有哪些具體化、數(shù)字化的信息,比如說權(quán)值、頂點(diǎn)個數(shù)等,這也就說明了想要把生活中的信息轉(zhuǎn)化到計(jì)算機(jī)中必須用數(shù)字來完整的構(gòu)成一個信息庫,而圖的存在,又涉及到了頂點(diǎn)之間的聯(lián)系。圖分為有向圖和無向圖,而無向圖又是有向圖在權(quán)值雙向相等下的一種特例,如何能在計(jì)算機(jī)中表示一個雙向權(quán)值不同的圖,這就是一件很巧妙的事情,經(jīng)過了思考和老師同學(xué)的幫助,我用edges[i][j]=up和edges[j][i]=up就能實(shí)現(xiàn)了一個雙向圖信息的存儲。對整個程序而言,dijkstra算法始終都是核心內(nèi)容,其實(shí)這個算法在實(shí)際思考中并不難,也許我們誰都知道找一個路徑最短的方法,及從頂點(diǎn)一步一步找最近的路線并與其直接距離相比較,但是,在計(jì)算機(jī)中實(shí)現(xiàn)這么一個很簡單的想法就需要涉及到很多專業(yè)知識,為了完成設(shè)計(jì),在前期工作中,基本都是以學(xué)習(xí)c語言為主,所以浪費(fèi)了很多時間,比如說在程序中,刪除頂點(diǎn)和增加頂點(diǎn)的模塊中都有和建圖模塊相互重復(fù)的函數(shù),但是由于技術(shù)的原因,只能做一些很累贅的函數(shù),可見在調(diào)用知識點(diǎn),我沒有掌握好。不過,有了這次課程設(shè)計(jì)的經(jīng)驗(yàn)和教訓(xùn),我能夠很清楚的對自己定一個合適的水平,而且在這次課程設(shè)計(jì)中我學(xué)會了運(yùn)用兩個新的函數(shù)sprintf()和包涵在#include頭文件中的輸入函數(shù)。因?yàn)檎n程設(shè)計(jì)的題目是求最短路徑,本來是想通過算法的實(shí)現(xiàn)把這個程序與交通情況相連,但是因?yàn)閬聿患安檎腋鞯氐男畔?,所以,這個計(jì)劃就沒有實(shí)現(xiàn),我相信在以后有更長時間的情況下,我會做出來的。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇十三
這學(xué)期開始兩周時間是我們自己選題上機(jī)的時間,這學(xué)期開始兩周時間是我們自己選題上機(jī)的時間,雖然上機(jī)時間只有短短兩個星期但從中確實(shí)學(xué)到了不少知識。上機(jī)時間只有短短兩個星期但從中確實(shí)學(xué)到了不少知識。數(shù)據(jù)結(jié)構(gòu)可以說是計(jì)算機(jī)里一門基礎(chǔ)課程,據(jù)結(jié)構(gòu)可以說是計(jì)算機(jī)里一門基礎(chǔ)課程,但我覺得我們一低計(jì)算機(jī)里一門基礎(chǔ)課程定要把基礎(chǔ)學(xué)扎實(shí),定要把基礎(chǔ)學(xué)扎實(shí),然而這次短短的上機(jī)幫我又重新鞏固了c語言知識,讓我的水平又一部的提高。數(shù)據(jù)結(jié)構(gòu)這是一門語言知識讓我的水平又一部的提高。數(shù)據(jù)結(jié)構(gòu)這是一門知識,純屬于設(shè)計(jì)的科目,它需用把理論變?yōu)樯蠙C(jī)調(diào)試。
純屬于設(shè)計(jì)的科目,它需用把理論變?yōu)樯蠙C(jī)調(diào)試。它對我們來說具有一定的難度。它是其它編程語言的一門基本學(xué)科。來說具有一定的難度。它是其它編程語言的一門基本學(xué)科。我選的.上機(jī)題目是交叉合并兩個鏈表,對這個題目,我選的上機(jī)題目是交叉合并兩個鏈表,對這個題目,我覺得很基礎(chǔ)。剛開始調(diào)試代碼的時候有時就是一個很小的錯覺得很基礎(chǔ)。剛開始調(diào)試代碼的時候有時就是一個很小的錯調(diào)試代碼的時候誤,導(dǎo)致整個程序不能運(yùn)行,然而開始的我還沒從暑假的狀導(dǎo)致整個程序不能運(yùn)行,態(tài)轉(zhuǎn)到學(xué)習(xí)上,每當(dāng)程序錯誤時我都非常焦躁,態(tài)轉(zhuǎn)到學(xué)習(xí)上,每當(dāng)程序錯誤時我都非常焦躁,甚至想到了放棄,但我最終找到了狀態(tài),一步一步慢慢來,放棄,但我最終找到了狀態(tài),一步一步慢慢來,經(jīng)過無數(shù)次的檢查程序錯誤的原因后慢慢懂得了耐心是一個人成功的必然具備的條件!
同時,通過此次課程設(shè)計(jì)使我了解到,必然具備的條件!同時,通過此次課程設(shè)計(jì)使我了解到,硬件語言必不可缺少,要想成為一個有能力的人,必須懂得件語言必不可缺少,要想成為一個有能力的人,硬件基礎(chǔ)語言。在這次課程設(shè)計(jì)中,硬件基礎(chǔ)語言。在這次課程設(shè)計(jì)中,雖然不會成功的編寫一個完整的程序,但是在看程序的過程中,個完整的程序,但是在看程序的過程中,不斷的上網(wǎng)查資料以及翻閱相關(guān)書籍,通過不斷的模索,測試,發(fā)現(xiàn)問題,以及翻閱相關(guān)書籍,通過不斷的模索,測試,發(fā)現(xiàn)問題,解決問題和在老師的幫助下一步一步慢慢的正確運(yùn)行程序,決問題和在老師的幫助下一步一步慢慢的正確運(yùn)行程序,終于完成了這次課程設(shè)計(jì),于完成了這次課程設(shè)計(jì),雖然這次課程設(shè)計(jì)結(jié)束了但是總覺得自已懂得的知識很是不足,學(xué)無止境,得自已懂得的知識很是不足,學(xué)無止境,以后還會更加的努力深入的學(xué)習(xí)。力深入的學(xué)習(xí)。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇十四
談到計(jì)算機(jī)方面的專業(yè)課程,我覺得數(shù)據(jù)結(jié)構(gòu)算是一門必不可少的課了,它是計(jì)算機(jī)從業(yè)和研究人員了解、開發(fā)及最大程度的利用計(jì)算機(jī)硬件的一種工具。數(shù)據(jù)結(jié)構(gòu)與算法分析是兩門緊密聯(lián)系的課程,算法要靠好的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn),二者的關(guān)系是密不可分的,談到算法不得不講數(shù)據(jù)結(jié)構(gòu),談數(shù)據(jù)結(jié)構(gòu)也不可避免的要了解算法,好的算法一定有一個好的數(shù)據(jù)結(jié)構(gòu),很多算法實(shí)際上是對某種數(shù)據(jù)結(jié)構(gòu)實(shí)行的一種變換,研究算法也就是研究在實(shí)行變換過程中數(shù)據(jù)的動態(tài)性質(zhì)。這兩門課程分別是我在大二和研一的時候?qū)W的,因?yàn)樗鼈兠芮械穆?lián)系,這里將其放在一起總結(jié)如下。
什么是數(shù)據(jù)結(jié)構(gòu)呢?研究數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)(物理結(jié)構(gòu))以及它們之間的關(guān)系,且為該結(jié)構(gòu)定義相應(yīng)的運(yùn)算設(shè)計(jì)相應(yīng)的算法。這里的數(shù)據(jù)是指可輸入到計(jì)算機(jī)能被程序處理的符號的集合。其中,數(shù)據(jù)的邏輯結(jié)構(gòu)是指數(shù)據(jù)之間邏輯關(guān)系的描述,邏輯結(jié)構(gòu)的分類有線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在計(jì)算機(jī)中存儲結(jié)構(gòu),也稱為物理結(jié)構(gòu),它有4類基本的存儲映射方法:1.順序的方法;2.鏈接的方法;3.索引的方法;4.散列的方法。在程序設(shè)計(jì)語言中,數(shù)據(jù)結(jié)構(gòu)直接反映在數(shù)據(jù)類型上,比如一個整型變量就是一個節(jié)點(diǎn),根據(jù)類型給他分配內(nèi)存單元。抽象數(shù)據(jù)類型:一組值以及在這些值上定義的操作集合,它是描述數(shù)據(jù)結(jié)構(gòu)的一種理論工具,其特點(diǎn)是把數(shù)據(jù)結(jié)構(gòu)作為獨(dú)立于應(yīng)用程序的一種抽象代數(shù)結(jié)構(gòu)。
線性表結(jié)構(gòu):由一系列元素組成的有序的序列,除了第一個元素和最后一個元素外,每個元素都只有一個直接前趨和直接后繼,元素的個數(shù)稱為線性表的長度。它的存儲方式有順序存儲和鏈?zhǔn)酱鎯?。順序存儲方式它的?yōu)點(diǎn)是存儲單元是連續(xù)的,適合快速訪問元素內(nèi)容,鏈表的特點(diǎn)是動態(tài)申請內(nèi)存空間,并通過指針來鏈接結(jié)點(diǎn),按照線性表的前驅(qū)關(guān)系把一個個結(jié)點(diǎn)鏈接起來,這樣可以動態(tài)地根據(jù)需要分配內(nèi)存空間,經(jīng)常用于插入新結(jié)點(diǎn)或刪除節(jié)點(diǎn)的需要,鏈表還可以根據(jù)結(jié)點(diǎn)中指針個數(shù)分為單鏈表、雙鏈表、循環(huán)鏈表等。在線性表結(jié)構(gòu)中有兩類特別的線性表:棧和隊(duì)列。棧是一種限制訪問端口的線性表,常稱為后進(jìn)先出表。正是這種特殊的性質(zhì)使得棧的用途非常廣泛,比如在計(jì)算表達(dá)式的值時處理運(yùn)算符的先后次序,另外一個大的用處就是遞歸了,hanoi塔就是最典型的用了遞歸的思想,在算法中,也有很多運(yùn)用遞歸思想的例子。隊(duì)列也屬于限制訪問點(diǎn)的線性表,它的特點(diǎn)就是加入和刪除元素都只能在隊(duì)列的一端進(jìn)行,即隊(duì)列首出,隊(duì)列尾進(jìn),最大的特點(diǎn)是先來先服務(wù),先進(jìn)先出。因?yàn)檫@個特點(diǎn),隊(duì)列常被用作消息緩沖器。
在算法設(shè)計(jì)中,順序表主要用于檢索,而利用棧中的遞歸思想在算法中則應(yīng)用非常廣泛,如遞歸排序,分治算法等。
樹結(jié)構(gòu):是一種非常重要的非線性數(shù)據(jù)結(jié)構(gòu),它是由一個根結(jié)點(diǎn)和若干葉結(jié)點(diǎn)組成的樹狀結(jié)構(gòu),除了根結(jié)點(diǎn)每個結(jié)點(diǎn)只能有一個父節(jié)點(diǎn),可以有若干子結(jié)點(diǎn),若干個樹結(jié)構(gòu)還可以構(gòu)成森林,樹的存儲結(jié)構(gòu)也分為順序存儲和鏈?zhǔn)酱鎯?,最典型的是左孩子右兄弟法。在樹結(jié)構(gòu)中比較重要的算法就是周游(遍歷)樹,有先根次序、后根次序以及中根次序。樹結(jié)構(gòu)中有幾類非常重要的特殊樹結(jié)構(gòu),如二叉樹,b樹,b+樹等,其中,二叉樹應(yīng)用最為廣泛。
二叉樹:是指每個結(jié)點(diǎn)最多有兩個子結(jié)點(diǎn)的樹結(jié)構(gòu),具體細(xì)分,根據(jù)葉子結(jié)點(diǎn)的特性可分為滿二叉樹、完全二叉樹等。二叉樹的遍歷也分為深度優(yōu)先和廣度優(yōu)先。另外,二叉樹有幾條非常重要的性質(zhì),這也使得它的應(yīng)用非常廣泛。
在算法設(shè)計(jì)中,典型的利用樹的深度優(yōu)先遍歷的算法是回溯法,而典型的廣度優(yōu)先搜索算法是分枝定界法。
圖:是一種較線性表和樹更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。一般來講,數(shù)據(jù)的邏輯結(jié)構(gòu)可表示為結(jié)點(diǎn)的有窮集合k和k上的一個關(guān)系r,如果對k中結(jié)點(diǎn)相對于r的前驅(qū)、后繼個數(shù)加以限制,則可以分別定義線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖結(jié)構(gòu),即:
圖結(jié)構(gòu):不限制前驅(qū)的個數(shù),亦不限制后繼的個數(shù),反映一種網(wǎng)狀關(guān)系。
通常用g=(v,e)代表一個圖,其中v是頂點(diǎn)集,e是邊集。圖分為有向圖和無向圖,圖的存儲方式有鄰接表和鄰接矩陣法。和樹類似的,圖中也需要周游,同樣有深度優(yōu)先搜索和廣度優(yōu)先搜索,而比樹的周游要更復(fù)雜,也更重要。在這一塊中,有兩種比較典型的求最短路徑和最小支撐樹的算法需要注意,它們分別是dijkstra算法和prim算法。另外需要注意的是圖的連通性。
在算法設(shè)計(jì)中,典型的用到圖論的算法有貪心算法和動態(tài)規(guī)劃算法。
(1)輸入:有零個或多個由外部提供的量作為算法的輸入。(2)輸出:算法產(chǎn)生至少一個量作為輸出。
(3)確定性:組成算法的每條指令是清晰的,無歧義的。(4)有限性:算法中每條指令的執(zhí)行次數(shù)是有限的,執(zhí)行每條指令的時間也是有限的。
我們研究一個算法或者評價一個算法主要是通過估計(jì)該算法的復(fù)雜性,包括時間復(fù)雜性和空間復(fù)雜性。空間復(fù)雜性是指使用該算法的程序在運(yùn)行時需要占用多少內(nèi)存空間,具體包括指令空間、數(shù)據(jù)空間和環(huán)境??臻g。時間復(fù)雜性是指執(zhí)行該程序所需要的時間量級,通常是估算的時間,包括編譯時間和運(yùn)行時間。同時評價一個算法的好壞還要看其時間復(fù)雜性和空間復(fù)雜性隨著輸入規(guī)模的增長趨勢,一般能接受的最好是線性增長。在算法設(shè)計(jì)這本書中,每介紹一個算法都會分析其算法復(fù)雜度,由此可看出它的重要性。
首先,從遞歸的分治算法開始。分治算法的基本思想是將一個規(guī)模為n的問題分解為k個規(guī)模較小的子問題,這些子問題互相獨(dú)立且與原問題相同。遞歸的解這些子問題,然后將各個子問題的解合并得到原問題的解。該算法的主要應(yīng)用有大整數(shù)乘法,矩陣乘法、合并排序等??梢源蟠蠼档退惴ǖ臅r間復(fù)雜度,但使用遞歸??赡茉黾映绦虻目臻g規(guī)模。
動態(tài)規(guī)劃算法和貪心算法:與分治算法類似,動態(tài)規(guī)劃的基本思想也是將待求解問題分解成若干子問題,先求解子問題,然后從這些子問題的解得到原問題的解。與分治算法不同的是,適合于用動態(tài)規(guī)劃法求解的問題,經(jīng)分解得到的子問題往往不是相互獨(dú)立的。動態(tài)規(guī)劃算法適用于解最優(yōu)化問題。通常可按以下4個步驟:
(1)找出最優(yōu)解的性質(zhì),并刻畫其結(jié)構(gòu)特征。(2)遞歸的定義最優(yōu)值。
(3)以自底向上的方式計(jì)算出最優(yōu)值。
(4)根據(jù)計(jì)算最優(yōu)值時得到的信息,構(gòu)造最優(yōu)解。
動態(tài)規(guī)劃算法的基本要素是最優(yōu)子結(jié)構(gòu)性質(zhì)和子問題重疊性質(zhì)。
最優(yōu)子結(jié)構(gòu)性質(zhì)。如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的,我們就稱該問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)(即滿足最優(yōu)化原理)。最優(yōu)子結(jié)構(gòu)性質(zhì)為動態(tài)規(guī)劃算法解決問題提供了重要線索。
子問題重疊性質(zhì)。子問題重疊性質(zhì)是指在用遞歸演算法自頂向下對問題進(jìn)行求解時,每次產(chǎn)生的子問題并不總是新問題,有些子問題會被重復(fù)計(jì)算多次。動態(tài)規(guī)劃算法正是利用了這種子問題的重疊性質(zhì),對每一個子問題只計(jì)算一次,然后將其計(jì)算結(jié)果保存在一個表格中,當(dāng)再次需要計(jì)算已經(jīng)計(jì)算過的子問題時,只是在表格中簡單地查看一下結(jié)果,從而獲得較高的效率。
另外一點(diǎn)要素是備忘錄方法,它作為動態(tài)規(guī)劃算法的變形,用表格保存已解決問題的答案,在下次需要解此子問題時,只要簡單查看子問題的解答,而不必重新計(jì)算。與動態(tài)規(guī)劃不同的是備忘錄方法的遞歸是自頂向下的,而動態(tài)規(guī)劃則是自底向上的。
動態(tài)規(guī)劃算法設(shè)計(jì)策略典型的應(yīng)用案例有:矩陣連乘、最大字段和、流水作業(yè)調(diào)度等。有時滿足動態(tài)規(guī)劃條件的問題可以有更好的算法,比如貪心算法。貪心算法即總是做出在當(dāng)前看來是最好的選擇。也就是說貪心算法并不從整體最優(yōu)上加以考慮,它所做的總是做出的選擇只是在某種意義上的局部最優(yōu)。這種啟發(fā)式的策略并不能總是奏效,然而對某些特定的問題確能達(dá)到預(yù)期目的。比如活動安排的例子。
貪心算法的基本要素主要有貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì)。所謂貪心選擇性質(zhì)是指所求問題的整體最優(yōu)解可以通過一系列局部最優(yōu)的選擇,即貪心選擇來達(dá)到。這是貪心算法與動態(tài)規(guī)劃的主要區(qū)別,它們的共同點(diǎn)是都要求問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。
貪心算法的典型案列是:活動安排、最優(yōu)裝載問題、最短路徑和最優(yōu)生成樹問題。回溯法和分枝定界法:回溯法有“通用的解題法”之稱。用它可以系統(tǒng)的搜索一個問題的所有解或任一解。它在問題的解空間樹中,按深度優(yōu)先策略,從根節(jié)點(diǎn)出發(fā)搜索解空間樹。其算法框架包含遞歸回溯和迭代回溯,兩個特別的解空間樹為子集樹和排列樹。典型的回溯法的案例有:批處理作業(yè)調(diào)度、圖的m著色、旅行售貨員問題、0-1背包問題等。
分枝定界法類似于回溯法,也是在問題的解空間上搜索問題解的算法。一般情況下,分治定界法與回溯法的求解目標(biāo)不同。回溯法的求解目標(biāo)是找出解空間中滿足約束條件的所有的解,而分枝定界法的求解目標(biāo)則是找出滿足約束條件的一個解,或是滿足約束條件的解中找出使某一目標(biāo)函數(shù)值達(dá)到極大或極小的解,即在某種意義下的最優(yōu)解。由于求解目標(biāo)不同,導(dǎo)致分支定界法與回溯法對解空間的搜索方式也不相同?;厮莘ㄒ陨疃葍?yōu)先的方式搜索解空間,而分枝定界法則以廣度優(yōu)先或以最小耗費(fèi)優(yōu)先的方式搜索解空間。
另外,在算法分析中一定要提的是np問題。首先需要介紹p(polynomial,多項(xiàng)式)問題.p問題是可以在多項(xiàng)式時間內(nèi)被確定機(jī)(通常意義的計(jì)算機(jī))解決的問題。np(non-deterministicpolynomial,非確定多項(xiàng)式)問題,是指可以在多項(xiàng)式時間內(nèi)被非確定機(jī)(他可以猜,他總是能猜到最能滿足你需要的那種選擇,如果你讓他解決n皇后問題,他只要猜n次就能完成----每次都是那么幸運(yùn))解決的問題.這里有一個著名的問題----千禧難題之首,是說p問題是否等于np問題,也即是否所有在非確定機(jī)上多項(xiàng)式可解的問題都能在確定機(jī)上用多項(xiàng)式時間求解。
np完全(npcomplete,npc)問題是指這樣一類np問題,所有的np問題都可以用多項(xiàng)式時間劃歸到他們中的一個。所以顯然np完全的問題具有如下性質(zhì):它可以在多項(xiàng)式時間內(nèi)求解,當(dāng)且僅當(dāng)所有的其他的np-完全問題也可以在多項(xiàng)式時間內(nèi)求解。這樣一來,只要我們找到一個npc問題的多項(xiàng)式解,所有的np問題都可以多項(xiàng)式時間內(nèi)劃歸成這個npc問題,再用多項(xiàng)式時間解決,這樣np就等于p了。
小結(jié)一下,在算法設(shè)計(jì)這么課中學(xué)了這么幾大類典型的算法,里面也涉及到具體的應(yīng)用案例,但我覺得學(xué)算法的目的遠(yuǎn)不是學(xué)會這幾種固定的特殊問題的解法而已,事實(shí)上領(lǐng)會這些巧妙算法背后的思想然后學(xué)會遷移到其他新的問題中去才是領(lǐng)會了算法設(shè)計(jì)的精髓。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇十五
計(jì)算機(jī)技術(shù)已成為現(xiàn)代化發(fā)展的重要支柱和標(biāo)志,并逐步滲透到人類生活的各個領(lǐng)域。隨著計(jì)算機(jī)硬件的發(fā)展,對計(jì)算機(jī)軟件的發(fā)展也提出了越來越高的要求。由于軟件的核心是算法,而算法實(shí)際上是對加工數(shù)據(jù)過程的描述,所以研究數(shù)據(jù)結(jié)構(gòu)對提高編程能力和設(shè)計(jì)高性能的算法是至關(guān)重要的。
非數(shù)值計(jì)算問題的數(shù)學(xué)模型不再是傳統(tǒng)的數(shù)學(xué)方程問題,而是諸如表、樹、圖之類的數(shù)據(jù)結(jié)構(gòu)。因此,簡單地說,數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算的程序設(shè)計(jì)問題的學(xué)科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和算法。
一、教學(xué)目的與要求---了解數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu);
教學(xué)要求在每章教學(xué)內(nèi)容給出,大體上為三個層次:了解、掌握和熟練掌握。他們的含義大致為:了解是正確理解概念,掌握是學(xué)會所學(xué)知識,熟練掌握就是運(yùn)用所學(xué)知識解決實(shí)際問題。
教學(xué)目的為:了解算法對于程序設(shè)計(jì)的重要性;學(xué)習(xí)掌握基本數(shù)據(jù)結(jié)構(gòu)的描述與實(shí)現(xiàn)方法,熟練掌握典型數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用算法的設(shè)計(jì)。了解算法分析方法。
二、教學(xué)重點(diǎn)與難點(diǎn)--數(shù)據(jù)結(jié)構(gòu)中基本概念和術(shù)語,算法描述和分析方法。
1、鏈表插入、刪除運(yùn)算的算法。算法時間復(fù)雜度。
2、后綴表達(dá)式的算法,數(shù)制的換算。
利用本章的基本知識設(shè)計(jì)相關(guān)的應(yīng)用問題。
3、循環(huán)隊(duì)列的特點(diǎn)及判斷溢出的條件。
利用隊(duì)列的特點(diǎn)設(shè)計(jì)相關(guān)的應(yīng)用問題。
4、串的模式匹配運(yùn)算算法。
5、二叉樹遍歷算法的設(shè)計(jì)。
利用二叉樹遍歷算法,解決簡單應(yīng)用問題哈夫曼樹的算法。
6、圖的遍歷。
最小生成樹。
最短路徑。
7、二叉排序樹查找。
平衡樹二叉樹。
8、堆排序。
快速排序歸并排序。
四、教學(xué)內(nèi)容、目標(biāo)與學(xué)時分配。
教學(xué)內(nèi)容教學(xué)目標(biāo)課時分配。
1、緒論。
邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)。
算法和算法分析。
2、線性表。
線性表的定義與運(yùn)算。
線性表的順序存儲。
線性表的鏈?zhǔn)酱鎯Α?/p>
3、棧。
棧的定義與運(yùn)算。
棧存儲和實(shí)現(xiàn)。
棧的應(yīng)用舉例。
4、隊(duì)列。
隊(duì)列的定義與基本運(yùn)算。
隊(duì)列的存儲與實(shí)現(xiàn)。
隊(duì)列的應(yīng)用舉例。
5、串。
串的定義與基本運(yùn)算。
串的表示與實(shí)現(xiàn)。
串的基本運(yùn)算。
6、樹和二叉樹。
樹的定義和術(shù)語。
二叉樹樹的基本概念和術(shù)語遍歷二叉數(shù)和線索二叉樹。
二叉樹的轉(zhuǎn)換。
二叉樹的應(yīng)用。
哈夫曼樹及其應(yīng)用。
7、圖。
圖的定義和術(shù)語。
圖的存儲結(jié)構(gòu)。
圖的遍歷算法。
圖的連通性。
8、查找。
查找的基本概念與靜態(tài)查找動態(tài)查找。
哈希表。
了解。
了解。
掌握。
熟練掌握順序表存儲地址的計(jì)算。
掌握單鏈表的結(jié)構(gòu)特點(diǎn)和基本運(yùn)算。
掌握雙鏈表的結(jié)構(gòu)特點(diǎn)和基本運(yùn)算。
掌握棧的定義與運(yùn)算。
掌握棧的存儲與實(shí)現(xiàn)。
熟練掌握棧的各種實(shí)際應(yīng)用。
掌握隊(duì)列的定義與基本運(yùn)算。
熟練掌握隊(duì)列的存儲與實(shí)現(xiàn)。
掌握循環(huán)隊(duì)列的特征和基本運(yùn)算。
了解串的邏輯結(jié)構(gòu)。
掌握串的存儲結(jié)構(gòu)。
熟練掌握串的基本運(yùn)算。
了解。
了解二叉樹。
熟練掌握二叉樹定義和存儲結(jié)構(gòu)。
了解二叉樹的遍歷算法。
掌握。
掌握哈夫曼的建立及編碼。
了解。
了解。
熟練掌握。
熟練掌握。
了解。
熟練掌握。
了解哈希表與哈希方法。
4學(xué)時。
1學(xué)時。
1學(xué)時。
2學(xué)時。
8學(xué)時。
2學(xué)時。
2學(xué)時。
4學(xué)時。
8學(xué)時。
2學(xué)時。
2學(xué)時。
4學(xué)時。
6學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
6學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
12學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
8學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
2學(xué)時。
8學(xué)時。
4學(xué)時。
2學(xué)時。
2學(xué)時。
9、排序。
12學(xué)時插入排序。
熟練掌握基本思想。
3學(xué)時快速排序。
了解各種內(nèi)部排序方法和特點(diǎn)。
3學(xué)時選擇排序。
掌握。
2學(xué)時各種排序方法比較。
掌握。
2學(xué)時。
實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)?zāi)繕?biāo)課時分配算法編程實(shí)驗(yàn):
1、用指針方式編寫程序復(fù)習(xí)c(c++)語言指針、結(jié)構(gòu)體等的用法。
2、對單鏈表進(jìn)行遍歷。
鏈表的描述與操作實(shí)現(xiàn)。
3、棧及其操作。
描述方法及操作。
4、編寫串子系統(tǒng)1串的特點(diǎn)及順序定長存儲、操作、查找。
5、編寫串子系統(tǒng)2串的特點(diǎn)及順序定長存儲、操作、查找。
6、編寫樹子系統(tǒng)1二叉樹的特點(diǎn)及存儲方式、創(chuàng)建、顯示、遍歷等。
7、編寫樹子系統(tǒng)2二叉樹的特點(diǎn)及存儲方式、創(chuàng)建、顯示、遍歷等。
8、圖子系統(tǒng)。
圖的鄰接矩陣的存儲、遍歷、廣度/深度優(yōu)先搜索。
9、查找子系統(tǒng)。
理解查找基本算法、平均查找長度、靜態(tài)、動態(tài)查找等。
五、考試范圍與題型。
1、考試范圍與分?jǐn)?shù)比例。
1)緒論。
12%2)線性表。
17%3)棧。
7%4)隊(duì)列。
6%5)串。
4%6)樹和二叉樹。
14%7)圖。
15%8)查找。
4%9)排序。
21%。
2、考試題型與分?jǐn)?shù)比例。
1)名詞解釋。
18%2)判斷對錯。
16%3)填空。
16%4)單項(xiàng)選擇。
18%5)應(yīng)用。
32%。
六、教材與參考資料。
1、教材:實(shí)用數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)(譚浩強(qiáng))中國鐵道出版社。
2、參考資料:數(shù)據(jù)結(jié)構(gòu)(嚴(yán)蔚敏)清華大學(xué)出版社。
(撰寫人:
審核人:2學(xué)時2學(xué)時2學(xué)時2學(xué)時2學(xué)時2學(xué)時2學(xué)時2學(xué)時2學(xué)時)。
數(shù)據(jù)結(jié)構(gòu)與算法心得篇十六
通過兩周的課程設(shè)計(jì),完成了預(yù)定的目標(biāo),其中有很多的隨想。老師的題目發(fā)下來的很早,大概提前了3周,當(dāng)時就著手搜索有關(guān)線索二叉樹的思想,思路,借了一本《數(shù)據(jù)結(jié)構(gòu)-c語言描述》,在大體上就有了一個輪廓,先是輸入二叉樹,在對二叉樹進(jìn)行線索化,依次往下,但在具體實(shí)現(xiàn)時,遇到了很多問題:首先是思想的確定,其非常重要,以前有了這個想法,現(xiàn)在愈加清晰起來,因此,花了大量的時間在插入刪除的具體操作設(shè)計(jì)上,大概三個晚上的時間,對其中什么不清晰明確之處均加以推敲,效果是顯著的,在上機(jī)上相應(yīng)的節(jié)約了時間。
通過具體的實(shí)驗(yàn)編碼,思路是對的,但是在小問題上摔了一次又一次,大部分時間都是花在這方面,這個節(jié)點(diǎn)沒傳過來啊之類的,以后應(yīng)該搞一個小冊子,記錄一些錯誤的集合,以避免再犯,思想與c語言聯(lián)系起來,才是我們所需要的,即常說的理論與實(shí)踐的關(guān)系。
數(shù)據(jù)結(jié)構(gòu)是基礎(chǔ)的一門課,對于有過編程經(jīng)驗(yàn)的人,結(jié)合自己的編程體會去悟它的思想;而且我覺得隨著編程經(jīng)歷的豐富對它的體會越深入,最初接觸是對一些思想可能只是生硬的記憶,隨著學(xué)習(xí)的深入逐漸領(lǐng)悟了很多。看了這次課程設(shè)計(jì)的`題目,雖然具體要求沒有看清,但是總結(jié)一下,可以看出,其需要我們能把一個具體案例或一件事情反映為程序來表達(dá),數(shù)據(jù)結(jié)構(gòu)就是橋梁,通過自己的設(shè)計(jì),使應(yīng)用能力得以融匯,對與問題,具有了初步的分析,繼而解決之的能力,感覺對以后的學(xué)習(xí)會有很大的幫助,學(xué)習(xí)無非是用于實(shí)踐。
認(rèn)識到自己的不足,希望能有進(jìn)一步的發(fā)展。
【本文地址:http://mlvmservice.com/zuowen/13560206.html】