好! 我告訴你。 我畢業(yè)兩年了,都是做c/c++開發(fā)方面的~
首先說一下數(shù)據(jù)結(jié)構(gòu)和vc/mfc以及數(shù)據(jù)結(jié)構(gòu)的應(yīng)用,vc/mfc主要是開發(fā)上位機(jī)軟件,即pc機(jī)上的軟件的。一般情況下做vc一般開發(fā)不需要掌握太多的數(shù)據(jù)結(jié)構(gòu)知識(shí)。開發(fā)中不會(huì)用太多,了解就夠了。數(shù)據(jù)結(jié)構(gòu)一般常用在嵌入式開發(fā),譬如路由器開發(fā)里常用到樹結(jié)構(gòu)。
第二數(shù)據(jù)結(jié)構(gòu)和數(shù)學(xué),數(shù)據(jù)結(jié)構(gòu)里用的最多的是離散數(shù)學(xué),尤其是樹和圖,基本就是離散數(shù)學(xué)的知識(shí),其次是線性代數(shù)里的矩陣也用的比較多。所以學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)也不一定要把所有的數(shù)學(xué)都學(xué)好。不過要想學(xué)得好必須先學(xué)好我指的那幾點(diǎn)。否則學(xué)起來比較吃力。
第三c++、數(shù)據(jù)結(jié)構(gòu)、vc++。的順序問題,數(shù)據(jù)結(jié)構(gòu)是不分語種的,但你要想學(xué)c++版的數(shù)據(jù)結(jié)構(gòu),你首先得了解c++的一般語法吧,至少得看懂偽代碼,常用的c++結(jié)構(gòu),指針、類的使用等。要知道c++是計(jì)算機(jī)語言、vc是開發(fā)工具、數(shù)據(jù)結(jié)構(gòu)是程序的思路,數(shù)學(xué)是基礎(chǔ)。好了,不啰嗦了,相信你都已經(jīng)明白了
第一章 什么是數(shù)據(jù)結(jié)構(gòu)1.1 基本概念和術(shù)語1.2 數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu) 1.1 基本概念和術(shù)語1.數(shù)據(jù)(data): 是對(duì)客觀事物的符號(hào)的表示,是所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號(hào)的總稱。
2.數(shù)據(jù)元素(data element): 是數(shù)據(jù)的基本單位,在計(jì)算機(jī)程序中通常作為一個(gè)整體來處理。一個(gè)數(shù)據(jù)元素由多個(gè) 數(shù)據(jù)項(xiàng)(data item)組成,數(shù)據(jù) 項(xiàng)是數(shù)據(jù)不可分割的最小單位。
3.數(shù)據(jù)結(jié)構(gòu)(data structure): 是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。數(shù)據(jù)結(jié)構(gòu)是一個(gè)二元組,記為: data_structure=(D,S).其中D為數(shù)據(jù)元素的集合,S是D上關(guān)系的集合。
數(shù)據(jù)元素相互之間的關(guān)系稱為結(jié)構(gòu)(structure)。根據(jù)數(shù)據(jù)元素之間關(guān)系的不同特性,通常由下列四類基本結(jié)構(gòu): (1)集合:數(shù)據(jù)元素間的關(guān)系是同屬一個(gè)集合。
(圖1) (2)線性結(jié)構(gòu):數(shù)據(jù)元素間存在一對(duì)一的關(guān)系。(圖2) (3)樹形結(jié)構(gòu):結(jié)構(gòu)中的元素間的關(guān)系是一對(duì)多的關(guān)系。
(圖3) (4)圖(網(wǎng))狀結(jié)構(gòu):結(jié)構(gòu)中的元素間的關(guān)系是多對(duì)多的關(guān)系。(圖4) 1.2 數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)邏輯結(jié)構(gòu):數(shù)據(jù)元素之間存在的關(guān)系(邏輯關(guān)系)叫數(shù)據(jù)的邏輯結(jié)構(gòu)。
物理結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的表示(映象)叫數(shù)據(jù)的物理結(jié)構(gòu)。 一種邏輯結(jié)構(gòu)可映象成不同的存儲(chǔ)結(jié)構(gòu):順序存儲(chǔ)結(jié)構(gòu)和非順序存儲(chǔ)結(jié)構(gòu)(鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)和散列結(jié)構(gòu))。
第一章:數(shù)據(jù)結(jié)構(gòu)概述一、什么是數(shù)據(jù)結(jié)構(gòu)1、作者開篇談到: 一般來說解決一個(gè)具體的問題時(shí),大致需要經(jīng)過下列幾個(gè)步驟:首先要從具體的問題抽象出一個(gè)適當(dāng)?shù)臄?shù)學(xué)模型,然后設(shè)計(jì)一個(gè)解此數(shù)學(xué)模型的算法,最后編寫出程序代碼,進(jìn)行測(cè)試、調(diào)整直至得到最終的解決方案。
總結(jié)為:現(xiàn)實(shí)中具體的問題—>數(shù)學(xué)模型—>算法程序—>解決方案動(dòng)作為:抽象提取、設(shè)計(jì)編碼、測(cè)試調(diào)整2、數(shù)學(xué)角度闡述: 尋求數(shù)學(xué)模型的實(shí)質(zhì)是分析問題,從中提取操作的對(duì)象,并找出這些操作對(duì)象之間含有的關(guān)系,然后用數(shù)學(xué)的語言加以描述。3、定義數(shù)據(jù)結(jié)構(gòu): 描述這類非數(shù)值計(jì)算問題的數(shù)學(xué)模型不再是數(shù)學(xué)方程,而是諸如表、樹和圖之類的數(shù)據(jù)結(jié)構(gòu),因此,簡(jiǎn)單來說,數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算的程序設(shè)計(jì)問題中計(jì)算機(jī)的操作對(duì)象以及它們之間關(guān)系和操作等的學(xué)科,用一句話來說就是,數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。
研究對(duì)象:1、集合2、線性結(jié)構(gòu)3、樹形結(jié)構(gòu)4、圖狀結(jié)構(gòu)(網(wǎng)狀結(jié)構(gòu)) 結(jié)構(gòu)分類:1、數(shù)據(jù)的邏輯結(jié)構(gòu)2、數(shù)據(jù)的物理結(jié)構(gòu)(存儲(chǔ)結(jié)構(gòu)) 關(guān)系表示:1、順序映像2、非順序映像,兩者分別對(duì)應(yīng)為順序存儲(chǔ)結(jié)構(gòu)、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)二、算法和算法分析 1、算法的五個(gè)特性:有窮性、確定性、可行性、輸入和輸出 2、算法設(shè)計(jì)的要求:正確性、可讀性、健壯性以及效率與低存儲(chǔ)量需求 3、算法的度量:時(shí)間復(fù)雜度和空間復(fù)雜度 總結(jié):編寫代碼設(shè)計(jì)算法時(shí)候首先先考慮算法的正確性,確保程序能夠滿足要求,在正確性的前提下再進(jìn)一步考慮算法的可讀性、健壯性、拓展性以及算法的效率等。第二章:線性表一、線性表的定義 線性結(jié)構(gòu)的特點(diǎn)是:在數(shù)據(jù)元素的非空有限集中(1)存在唯一的一個(gè)被稱做“第一個(gè)”的數(shù)據(jù)元素;(2)存在唯一的一個(gè)被稱做“最后一個(gè)”的數(shù)據(jù)元素;(3)除第一個(gè)之外,集合中每個(gè)數(shù)據(jù)元素均只有一個(gè)前驅(qū);(4)除最后一個(gè)元素之外,集合中每個(gè)數(shù)據(jù)元素均只有一個(gè)后繼。
線性表是最常用并且最簡(jiǎn)單的一種數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)單來說,一個(gè)線性表是n個(gè)數(shù)據(jù)元素的有限序列。至于每個(gè)數(shù)據(jù)元素的具體含義,在不同的情況下各不相同,既可以是一個(gè)數(shù)也可以是一個(gè)符號(hào)等等。
二、線性表的操作 線性表是一個(gè)相當(dāng)靈活的數(shù)據(jù)結(jié)構(gòu),它的長(zhǎng)度可根據(jù)需要增長(zhǎng)或者縮短,即對(duì)線性表的數(shù)據(jù)元素不但可以進(jìn)行訪問,還可以進(jìn)行插入和刪除等操作。線性表存儲(chǔ)方式有兩種,順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ),下面通過代碼進(jìn)行簡(jiǎn)單模擬操作。
第三章:棧和隊(duì)列 棧和隊(duì)列是兩種重要的線性結(jié)構(gòu),從數(shù)據(jù)結(jié)構(gòu)的角度看,棧和隊(duì)列也是線性表,其特殊性在于棧和隊(duì)列的基本操作是線性表操作的子集,它們是操作受限制的線性表,因此可以稱為限定性的數(shù)據(jù)結(jié)構(gòu)。一、棧的定義 棧是限定在表尾進(jìn)行插入或刪除操作的線性表,棧的特定是先進(jìn)后出。
棧的存儲(chǔ)方式有兩種,一種是順序棧另外一種是鏈?zhǔn)綏?,下面只通過代碼簡(jiǎn)單模擬棧的操作。二、棧的應(yīng)用 棧的應(yīng)用主要有數(shù)制轉(zhuǎn)換、括號(hào)匹配的檢驗(yàn)、迷宮問題求解以及表達(dá)式求值。
另外棧遞歸實(shí)現(xiàn)的經(jīng)典例子有八皇后問題、漢諾塔問題等。三、隊(duì)列的定義 隊(duì)列和棧有點(diǎn)不同,隊(duì)列是一種先進(jìn)先出得線性表,它只能夠在表的一端進(jìn)行插入另外一頭進(jìn)行刪除操作。
隊(duì)列在程序設(shè)計(jì)中比較常見的例子是操作系統(tǒng)中的作業(yè)排隊(duì)。雙端隊(duì)列、循環(huán)隊(duì)列有時(shí)間再進(jìn)一步演進(jìn),暫時(shí)先了解些基本概念。
第四章:串一、串的定義 計(jì)算機(jī)上的非數(shù)值處理的對(duì)象基本上都是字符串?dāng)?shù)據(jù)。串是由零個(gè)或多個(gè)字符組成的有限序列。
串中字符的數(shù)目成為字符串的長(zhǎng)度,零個(gè)字符的串成為空串。串的模式匹配算法經(jīng)典的是KMP算法。
第五章:數(shù)組和廣義表一、數(shù)組和廣義表定義 數(shù)組是讀者已經(jīng)很熟悉的一種數(shù)據(jù)類型,幾乎所有的程序設(shè)計(jì)語言都把數(shù)組類型設(shè)為固有的類型。數(shù)組的應(yīng)用中涉及到一個(gè)比較重要的數(shù)學(xué)知識(shí),矩陣的壓縮存儲(chǔ)問題。
廣義表是線性表的推廣,在java開發(fā)中好像用得不多,有時(shí)間再進(jìn)一步學(xué)習(xí)。 第六章:樹和二叉樹一、樹的定義和基本操作1、樹的特點(diǎn) 樹是一個(gè)結(jié)點(diǎn)n的有限集,在任意一顆樹非空樹中:1、有且只有一個(gè)根結(jié)點(diǎn),2、當(dāng)n>1時(shí),其余結(jié)點(diǎn)分為m(m>0)個(gè)互不相交的有限集,其中每個(gè)集合本身又是一棵樹,叫做根的子樹。
關(guān)鍵詞組:有限集、唯一性、對(duì)稱性、遞歸性。 基本術(shù)語:結(jié)點(diǎn)、度、葉子、分支結(jié)點(diǎn)、孩子、雙親、兄弟、層次以及深度等。
基本操作:構(gòu)造初始化樹、取得左子樹或右子樹、插入結(jié)點(diǎn)、刪除結(jié)點(diǎn)、樹的遍歷等等。2、線性結(jié)構(gòu)VS樹結(jié)構(gòu) 線性結(jié)構(gòu)是一個(gè)“序列”,元素之間存在的是“一對(duì)一”的關(guān)系,而樹是一個(gè)層次結(jié)構(gòu),元素之間存在的是“一對(duì)多”的關(guān)系。
二、二叉樹的定義1、二叉樹的特點(diǎn) 每個(gè)結(jié)點(diǎn)至多只有二棵子樹(即二叉樹中不存在度大于2的結(jié)點(diǎn)),并且二叉樹的子樹有左右之分,其次序不能顛倒。 關(guān)鍵詞組:對(duì)稱、次序2、二叉樹的具體實(shí)例 滿二叉樹、完全二叉樹、平衡二叉樹等,具體區(qū)別參考書籍教材詳解。
3、二叉樹的存儲(chǔ)結(jié)構(gòu) 主要分為兩種方式,一類是順序結(jié)構(gòu)(可使用一組地址連續(xù)的存儲(chǔ)單元依次自上而下、自左至右存儲(chǔ)完全二叉樹上的結(jié)點(diǎn)元。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:3.125秒