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