程序設(shè)計基礎(chǔ)是專門為高等院校理工類特別是新工科學生編寫的教材。全書共分3部分:結(jié)構(gòu)化程序設(shè)計方法,面向?qū)ο蟪绦蛟O(shè)計方法,數(shù)據(jù)結(jié)構(gòu)和算法。本書通過對一些精選問題求解思路和方法的分析,以及針對初學者容易出現(xiàn)錯誤和困惑的地方提供了大量的提示,幫助讀者更好地理解使用計算機解決問題的基本原理和方法、提高他們的計算思維能力、使他們初步具備使用C 程序設(shè)計語言解決實際問題的能力 本書面向初學者,不要求讀者有相關(guān)的概念和計算機高級程序設(shè)計語言方面的背景知識。本書還是學堂在線的程序設(shè)計基礎(chǔ)(上)和程序設(shè)計基礎(chǔ)(下)MOOC課程使用的教材,同時還配套了《程序設(shè)計基礎(chǔ)上機實習及習題》。因此,本書適合高等院校理工類、特別是新工科學生使用,也適合結(jié)合MOOC課程自主學習的讀者使用。
近年來,計算機基礎(chǔ)教學內(nèi)容不斷更新,注重學生計算思維能力和應(yīng)用創(chuàng)新能力的培養(yǎng);教學方式不斷變革,基于MOOC、微課、翻轉(zhuǎn)課堂等多種教學方法和手段相結(jié)合;诖,面向理工類特別是新工科的計算機基礎(chǔ)課程的教學需要配合新的教學方式進行重新編寫,提供配套的在線資源,以新形態(tài)教材方式呈現(xiàn);同時為方便MOOC/SPOC課程提供以知識點為單位的配套教材以及與本教材配套的《程序設(shè)計基礎(chǔ)實驗與習題集》教材。
本書面向高等院校理工類學生, 針對如何使用計算機求解問題、能夠具有主動使用計算機解決生活和學科問題的意識和能力的需求,計算機學科*基礎(chǔ)性的問題編寫的教材。全書共分3部分:結(jié)構(gòu)化程序設(shè)計方法,面向?qū)ο蟪绦蛟O(shè)計方法,數(shù)據(jù)結(jié)構(gòu)和算法。除了講解計算進行基本的概念、方法,還給出了完整的實現(xiàn)代碼。幾乎每一章還給出了拓展學習的內(nèi)容,讀者可以通過掃面二維碼進行進一步的學習和提高。同時在配套教材《程序設(shè)計基礎(chǔ)上機實習及習題》中還為每一章配套了上機實習習題和課后習題參考答案等內(nèi)容。
前言
程序設(shè)計基礎(chǔ)21世紀人類步入信息社會,大數(shù)據(jù)、人工智能、互聯(lián)網(wǎng) 、物聯(lián)網(wǎng)、區(qū)塊鏈等已經(jīng)融入人們?nèi)粘5纳钪,正在影響和改變著人們工作、學習和生活的方式,而這些都離不開計算機。
計算本身是一門學科,它在發(fā)展的同時也促進了其他學科的發(fā)展。21世紀科學上最重要的、經(jīng)濟上最有前途的研究前沿都有可能通過與計算科學進行學科融合而得到解決。計算機不僅為不同專業(yè)提供了解決專業(yè)問題的有效方法和手段,而且還提供了一種獨特的處理問題的思維方式計算思維。邏輯思維、實證思維和計算思維三大科學思維構(gòu)成了現(xiàn)代科技創(chuàng)新的三大支柱。計算思維不僅僅屬于計算機科學家所特有,它已經(jīng)成為每個人應(yīng)該具備的基本能力。因此,在培養(yǎng)學生的解析能力時,不僅要掌握閱讀、寫作和算術(shù)(Reading,wRiting,and aRithmetic3R)能力,還要使學生接觸計算的方法和模型,學會計算思維。
眾所周知,計算機可以進行數(shù)值計算(科學計算)問題的求解,例如解方程(組)、函數(shù)求值、概率統(tǒng)計等,用來解決如氣象預(yù)報、石油探測等問題。更多的時候,人們利用計算機進行非數(shù)值計算問題的求解,例如字符、圖形、圖像、聲音、動畫等,來解決文字處理、飛機售票、學生信息管理、道路交通管理等問題。對于計算機的處理對象,特別是非數(shù)值計算的問題求解,需要研究計算機的操作對象(數(shù)據(jù)元素)以及它們之間的關(guān)系和運算。
人類使用計算機求解實際問題的基本步驟是:首先將實際問題抽象成數(shù)學模型,即分析問題,從中抽象出操作的對象和相應(yīng)的操作,找出這些操作對象之間的關(guān)系,并用數(shù)學的語言加以描述;其次設(shè)計實現(xiàn)這些操作的算法,并編寫程序?qū)崿F(xiàn)相應(yīng)的算法;最后才是運行程序?qū)嶋H問題進行求解。如何表示信息和如何處理信息,這正是計算機科學研究的主要問題。人類進行抽象和形式化,就需要學習和掌握常用的計算思維方式。
程序設(shè)計方法、數(shù)據(jù)結(jié)構(gòu)和算法是計算機科學與工程的基礎(chǔ)性領(lǐng)域知識,是開發(fā)高效計算機程序、解決各領(lǐng)域應(yīng)用問題的核心。在尋求和實現(xiàn)數(shù)學模型的過程中,計算機算法與數(shù)據(jù)的結(jié)構(gòu)密切相關(guān)。學習程序設(shè)計方法、數(shù)據(jù)結(jié)構(gòu)和算法課程,不僅可以使學生掌握計算機基礎(chǔ)課程的基本方法,更是訓練學生計算思維的有效途徑。
本書面向高等院校理工類特別是新工科學生掌握如何使用計算機求解問題、具有主動使用計算機解決生活和學科問題的意識和能力的需求,針對計算機學科最基礎(chǔ)性的問題編寫的教材。全書共分3部分: ①結(jié)構(gòu)化程序設(shè)計方法; ②面向?qū)ο蟪绦蛟O(shè)計方法; ③基本數(shù)據(jù)結(jié)構(gòu)和算法。書中除了講解計算的基本概念、方法,還給出了完整的實現(xiàn)代碼。幾乎每一章都給出了拓展學習的內(nèi)容,讀者可以通過掃描二維碼進一步學習和提高。同時在配套教材《程序設(shè)計基礎(chǔ)上機實習及習題集》中,還為每一章配套了課程實習課后習題和課后習題參考答案等內(nèi)容。
全書共16章,主要內(nèi)容如下。
程序設(shè)計基礎(chǔ) 前言 第1~6章為結(jié)構(gòu)化程序設(shè)計方法。其中:
第1章 如何讓計算機進行計算。首先介紹計算思維和程序流程圖的基本畫法;然后介紹程序設(shè)計的基本概念、步驟和方法;最后介紹C 源程序的基本結(jié)構(gòu)和組成元素以及Visual studio 2010集成開發(fā)環(huán)境。
第2章 計算機如何表示與處理數(shù)據(jù)。首先介紹二進制數(shù)及幾種基本數(shù)據(jù)類型的二進制數(shù)據(jù)表示方法,包括不同數(shù)制數(shù)據(jù)之間的轉(zhuǎn)換方法,整數(shù)、實數(shù)、字符和邏輯型數(shù)據(jù)的二進制表示方法等;然后介紹如何通過C 語言實現(xiàn)這些基本數(shù)據(jù)類型在計算機中的存儲,以及如何對這些基本數(shù)據(jù)類型的數(shù)據(jù)進行處理的方法。
第3章 選擇與迭代算法。介紹處理問題時的選擇算法和迭代算法,以及如何使用C 語言實現(xiàn)選擇和迭代算法。
第4章 結(jié)構(gòu)化數(shù)據(jù)的處理。介紹多記錄數(shù)據(jù)和多屬性數(shù)據(jù)的存儲方法,以及如何使用C 語言實現(xiàn)這些數(shù)據(jù)的存儲和處理。
第5章 模塊化。介紹模塊化的思想,以及如何使用C 語言編寫模塊化程序。
第6章 數(shù)據(jù)存儲。重點介紹計算機中數(shù)據(jù)存儲的基本原理,以及如何使用C 語言編寫程序去操作內(nèi)存中的數(shù)據(jù)。
第7~10章為面向?qū)ο蟪绦蛟O(shè)計方法。其中:
第7章 面向?qū)ο蠓椒。介紹面向?qū)ο蠓椒ǖ幕靖拍?以及用C 語言實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的基本方法。
第8章 繼承與多態(tài)。介紹如何使用C 語言來實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的兩個重要特性繼承和多態(tài)。
第9章 輸入輸出流。介紹標準輸入輸出的基本方法,即輸入輸出流和文件輸入輸出流兩方面的內(nèi)容。
第10章 模板。介紹模板的基本概念,以及C 中函數(shù)模板和類模板的定義及使用方法等。
第11~16章為基本的數(shù)據(jù)結(jié)構(gòu)和算法。其中:
第11章 數(shù)據(jù)結(jié)構(gòu)與算法的基本概念。首先介紹數(shù)據(jù)結(jié)構(gòu)的基本術(shù)語、抽象數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)的存儲結(jié)構(gòu)和邏輯結(jié)構(gòu),然后介紹算法的基本概念和算法分析方法,最后介紹算法設(shè)計基本方法與常用的算法設(shè)計策略。
第12章 線性表。介紹線性表的邏輯結(jié)構(gòu),并給出線性表的抽象數(shù)據(jù)類型;還介紹線性表的順序存儲和鏈式存儲的表示和實現(xiàn)方法等。
第13章 棧和隊列。介紹棧的邏輯結(jié)構(gòu)和抽象數(shù)據(jù)類型,并分別給出棧的順序存儲和鏈式存儲的表示和實現(xiàn)方法;介紹隊列的邏輯結(jié)構(gòu)和抽象數(shù)據(jù)類型,并分別給出隊列的順序存儲和鏈式存儲的表示及實現(xiàn)方法等。
第14章 樹和二叉樹。介紹樹的基本概念、二叉樹的基本特性;二叉樹的順序表示、鏈式表示,二叉樹的遍歷和其他常用操作及其實現(xiàn)方法;哈夫曼樹和哈夫曼碼等。
第15章 圖。介紹圖的基本概念;圖在計算機中常用的3種表示方法、圖的遍歷方法及其實現(xiàn)方法;結(jié)合具體應(yīng)用問題,講解最小生成樹和最短路徑的問題等。
第16章 算法設(shè)計策略及應(yīng)用實例。介紹分治、貪心、動態(tài)規(guī)劃、回溯和分支限界5種算法設(shè)計策略,并給出相應(yīng)的應(yīng)用實例。啟發(fā)讀者在遇到實際問題時,使用合理的策略設(shè)計出理想的算法。
為了便于練習,本書不僅給出算法的描述,還給出完整的程序代碼。讀者可直接或稍加改動就可以復(fù)用這些代碼來解決自己的實際問題。
本書是由南開大學計算機學院公共計算機基礎(chǔ)教學部的教師結(jié)合多年的教學經(jīng)驗及目前理工類和新工科大學生對計算機基礎(chǔ)知識的需要編寫的,教材綜合考慮了MOOC和SPOC課程知識碎片化的特點,方便教師、學生和其他讀者使用。趙宏負責第1~3章、第7章、第10~13章和第16章的編寫并統(tǒng)編全書,王愷負責第4~6章、第8章、第9章、第14章和第15章的編寫。
在本書的編寫過程中,得到了清華大學出版社張瑞慶編審的大力支持,在此表示真誠的感謝!
本書還參考了國內(nèi)外的一些程序設(shè)計方面的開放課程網(wǎng)站和書籍,力求有所突破和創(chuàng)新。由于編者能力和時間的限制,書中難免有不妥之處,懇請同行和讀者指正,在此表示真誠謝意!
編者
2019年4月于南開園 程序設(shè)計基礎(chǔ)
趙宏 碩士生導(dǎo)師,博士后,南開大學計算機學院副教授,公共計算機基礎(chǔ)教學部主任。長期從事公共計算機基礎(chǔ)課程的教學和科學研究工作。主講南開大學計算機基礎(chǔ)(理)、數(shù)據(jù)結(jié)構(gòu)與算法、大數(shù)據(jù)分析基礎(chǔ)-基于R語言等公共計算機基礎(chǔ)課程。教學方面主要從事公共計算基礎(chǔ)課教學與研究,2013-2017教育部高等學校教學指導(dǎo)委員會委員?蒲蟹矫嬷饕M行計算機與環(huán)境科學交叉科學領(lǐng)域研究。負責/參加科研項目二十余項,負責/參加國家及學校教學改革項目9項,發(fā)表科研/教學論文30余篇,軟件著作權(quán)6項。主編教材9本,參編教材5本,獲得校級教學成果一等獎1項、校級教學成果二等獎4項及其他獎項若干。
王愷,男,1979年生人,南開大學計算機應(yīng)用技術(shù)專業(yè),博士。于2006年留校,任南開大學信息學院教師,副教授。研究方向為圖像/視頻中的智能信息檢索、優(yōu)化問題建模和求解算法。主主講南開大學計算機基礎(chǔ)(理)、數(shù)據(jù)結(jié)構(gòu)與算法等公共計算機基礎(chǔ)課程。主持科研項目4項,發(fā)表EI收錄論文10余篇,參與編寫教材4本。
目錄
程序設(shè)計基礎(chǔ)第1章如何讓計算機進行計算1
1.1計算思維和程序流程圖1
1.1.1計算思維1
1.1.2程序流程圖2
1.2程序設(shè)計的基本概念4
1.2.1用計算機求解問題的過程4
1.2.2程序設(shè)計方法6
1.3高級程序設(shè)計語言C 7
1.4初識C 程序8
1.4.1簡單C 程序?qū)嵗?
1.4.2C 源程序的組成9
1.4.3C 源程序的組成元素12
1.5集成開發(fā)環(huán)境VS 201013第2章計算機如何表示與處理數(shù)據(jù)16
2.1常用數(shù)制及不同數(shù)制數(shù)值之間的轉(zhuǎn)換17
2.1.1數(shù)制17
2.1.2不同數(shù)制之間的轉(zhuǎn)換18
2.2整數(shù)在計算機中的表示20
2.2.1數(shù)據(jù)的單位20
2.2.2整數(shù)的表示方法20
2.3實數(shù)在計算機中的表示24
2.4非數(shù)值數(shù)據(jù)在計算機中的表示25
2.4.1字符型數(shù)據(jù)在計算機中的表示25
2.4.2字符串27
2.4.3邏輯型數(shù)據(jù)27
2.5C 中的基本數(shù)據(jù)類型和轉(zhuǎn)義字符27
2.5.1C 的基本數(shù)據(jù)類型27
2.5.2C 中的轉(zhuǎn)義字符28 程序設(shè)計基礎(chǔ) 目錄 2.6變量和常量29
2.6.1常量29
2.6.2變量30
2.7基本數(shù)據(jù)的處理31
2.7.1運算符和表達式31
2.7.2算術(shù)運算符與算術(shù)表達式31
2.7.3賦值運算符與賦值表達式32
2.7.4關(guān)系運算符與關(guān)系表達式33
2.7.5邏輯運算符與邏輯表達式34
2.7.6基本數(shù)據(jù)類型之間的轉(zhuǎn)換35
2.8C 中的基本語句38
2.8.1定義/聲明語句38
2.8.2表達式語句41
2.8.3復(fù)合語句和空語句41
2.8.4輸入輸出語句42
2.9C 中的幾個特殊運算符42
2.9.1 和--42
2.9.2條件運算符43
2.9.3逗號運算符45
2.9.4sizeof運算符45
2.10更多關(guān)于C 的運算符和表達式46
2.10.1運算符的優(yōu)先級和結(jié)合性46
2.10.2有副作用的表達式和無副作用的表達式48
2.10.3表達式的求值順序49第3章選擇與迭代算法50
3.1單路選擇算法及其C 實現(xiàn)50
3.1.1單路選擇問題50
3.1.2用C 的if語句編程解決單路選擇問題51
3.2雙路選擇算法及其C 實現(xiàn)52
3.2.1雙路選擇問題52
3.2.2用C 提供的if…else語句編程解決雙路選擇問題53
3.3嵌套選擇及其C 實現(xiàn)54
3.4多路選擇算法及其C 實現(xiàn)56
3.4.1多路選擇問題56
3.4.2用C 提供的switch語句編程解決多路選擇問題56
3.5迭代算法及其for語句的實現(xiàn)58
3.5.1迭代算法59
3.5.2用C 提供的for語句實現(xiàn)迭代算法59
3.6迭代算法及其while語句的實現(xiàn)60
3.6.1用C 提供的while語句實現(xiàn)迭代算法60
3.6.2用C 提供的do…while語句實現(xiàn)迭代算法61
3.7迭代嵌套及其C 實現(xiàn)62
3.8迭代與選擇嵌套及其C 實現(xiàn)64
3.8.1迭代與選擇嵌套及其C 實現(xiàn)64
3.8.2選擇與迭代嵌套及其C 實現(xiàn)65
3.9C 中的轉(zhuǎn)向語句65
3.9.1break語句66
3.9.2continue語句66
3.9.3return語句67
3.9.4goto語句67第4章結(jié)構(gòu)化數(shù)據(jù)的處理69
4.1一維數(shù)據(jù)及其C 實現(xiàn)69
4.1.1一維數(shù)據(jù)問題69
4.1.2用C 提供的一維數(shù)組存儲一維數(shù)據(jù)71
4.2二維數(shù)據(jù)及其C 實現(xiàn)73
4.2.1二維數(shù)據(jù)問題73
4.2.2C 提供的一維數(shù)組或二維數(shù)組存儲二維數(shù)據(jù)74
4.3字符串及其C 實現(xiàn)77
4.3.1字符串問題77
4.3.2用C 提供的一維數(shù)組存儲字符串78
4.4多個字符串的處理79
4.4.1多個字符串問題79
4.4.2用C 提供的二維數(shù)組存儲來多個字符串80
4.5多屬性數(shù)據(jù)及其C 實現(xiàn)81
4.5.1多屬性數(shù)據(jù)問題81
4.5.2用C 提供的結(jié)構(gòu)體存儲多屬性數(shù)據(jù)81
4.6一組多屬性數(shù)據(jù)的處理84
4.6.1一組多屬性數(shù)據(jù)的問題84
4.6.2使用結(jié)構(gòu)體數(shù)組對一組多屬性數(shù)據(jù)進行存儲和處理84
4.7C 中的枚舉數(shù)據(jù)類型85
4.7.1枚舉類型的定義85
4.7.2枚舉變量的定義86
4.7.3枚舉變量的使用86
4.8數(shù)組的應(yīng)用選擇排序87
4.8.1選擇排序算法87
4.8.2用C 實現(xiàn)選擇排序算法88第5章模塊化90
5.1模塊化及其C 實現(xiàn)90
5.1.1采用模塊化思想處理問題91
5.1.2用C 實現(xiàn)結(jié)構(gòu)化程序設(shè)計91
5.1.3函數(shù)的調(diào)用機制及內(nèi)聯(lián)函數(shù)94
5.1.4調(diào)用庫函數(shù)95
5.2遞歸算法及其C 實現(xiàn)95
5.2.1遞歸算法95
5.2.2遞歸算法實例96
5.3默認形參值98
5.3.1指定默認形參值的位置98
5.3.2默認形參值的指定順序99
5.4函數(shù)重載99
5.5編譯預(yù)處理101
5.5.1文件包含101
5.5.2宏定義102
5.5.3條件編譯103
5.6多文件結(jié)構(gòu)105
5.6.1頭文件105
5.6.2源文件106
5.6.3多文件結(jié)構(gòu)程序?qū)嵗?06
5.6.4避免頭文件被重復(fù)包含108
5.7變量和函數(shù)的作用域與生存期109
5.7.1全局變量的作用域與生存期109
5.7.2局部變量的作用域與生存期110
5.7.3函數(shù)的作用域112
5.8模塊化應(yīng)用實例二分查找法114
5.8.1二分查找法114
5.8.2二分查找法應(yīng)用實例115第6章數(shù)據(jù)存儲117
6.1數(shù)據(jù)存儲的基本原理117
6.2地址與C 中的指針118
6.2.1指針變量的定義119
6.2.2指針變量的初始化119
6.2.3使用指針訪問內(nèi)存中的數(shù)據(jù)120
6.3指針與數(shù)組123
6.3.1數(shù)組在內(nèi)存中的存儲方式123
6.3.2使用指針操作數(shù)組124
6.3.3數(shù)組名與指針變量的區(qū)別125
6.3.4指向行的指針變量126
6.4指針與字符串127
6.5動態(tài)使用內(nèi)存空間129
6.6二級指針133
6.7指針與函數(shù)134
6.7.1指針作為函數(shù)參數(shù)134
6.7.2指針作為函數(shù)返回值140
6.8引用與函數(shù)141
6.8.1引用的概念和聲明141
6.8.2函數(shù)的傳值調(diào)用142
6.8.3函數(shù)的引用調(diào)用143
6.8.4返回引用的函數(shù)144第7章面向?qū)ο蠓椒?46
7.1面向?qū)ο蠓椒ǖ幕靖拍?47
7.2C 中的類和對象150
7.2.1類的定義150
7.2.2構(gòu)造函數(shù)152
7.2.3對象的定義和對象的訪問153
7.3類成員的訪問控制156
7.4析構(gòu)函數(shù)158
7.5拷貝構(gòu)造函數(shù)160
7.6類聲明與實現(xiàn)的分離162
7.7類的靜態(tài)成員164
7.7.1靜態(tài)數(shù)據(jù)成員164
7.7.2靜態(tài)成員函數(shù)166
7.8類的常量成員168
7.8.1常量數(shù)據(jù)成員168
7.8.2常量成員函數(shù)168
7.9this指針169
7.10類的友元170
7.11類的對象成員174
7.12自定義類的運算符重載177
7.12.1類成員函數(shù)形式的運算符重載177
7.12.2類友元形式的運算符重載179第8章繼承與多態(tài)184
8.1繼承184
8.1.1繼承概述184
8.1.2派生類的定義185
8.1.3訪問控制方式和派生類的繼承方式187
8.1.4成員函數(shù)重定義189
8.1.5派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)190
8.1.6多繼承192
8.2多態(tài)199
8.2.1類型兼容和多態(tài)性的概念199
8.2.2多態(tài)性的實現(xiàn)202
8.3抽象類204
8.3.1抽象類的作用204
8.3.2抽象類的實現(xiàn)205第9章輸入輸出流207
9.1輸入輸出流概述207
9.2cout和cin對象以及插入和提取運算符208
9.2.1標準流對象208
9.2.2>>和<<運算符與標準輸入輸出208
9.3使用成員函數(shù)進行標準輸出和輸入210
9.3.1使用put()函數(shù)進行標準輸出210
9.3.2使用get()函數(shù)進行標準輸入210
9.3.3getline()函數(shù)進行標準輸入212
9.4文件流對象以及插入和提取運算符213
9.4.1文件流對象213
9.4.2<<和>>運算符與文件輸入輸出216
9.5使用成員函數(shù)進行文件的輸出和輸入217
9.5.1使用put()函數(shù)進行文本文件輸出217
9.5.2使用get()函數(shù)進行文本文件輸入218
9.5.3使用getline()函數(shù)進行文本文件輸入218
9.6按數(shù)據(jù)塊進行輸出和輸入220
9.6.1使用write()函數(shù)按數(shù)據(jù)塊進行輸出220
9.6.2使用read()函數(shù)按數(shù)據(jù)塊進行輸入221
9.7文件的隨機讀寫225
9.8自定義數(shù)據(jù)類型的輸入輸出227第10章模板231
10.1函數(shù)模板231
10.1.1函數(shù)模板的定義232
10.1.2函數(shù)模板的使用232
10.2類模板234
10.2.1類模板的定義235
10.2.2類模板的使用236
10.2.3類模板的靜態(tài)成員和友元238第11章數(shù)據(jù)結(jié)構(gòu)和算法的基本概念240
11.1數(shù)據(jù)結(jié)構(gòu)的基本概念240
11.1.1基本術(shù)語241
11.1.2數(shù)據(jù)的邏輯結(jié)構(gòu)242
11.1.3數(shù)據(jù)的存儲結(jié)構(gòu)244
11.1.4數(shù)據(jù)的操作245
11.2抽象數(shù)據(jù)類型246
11.3算法設(shè)計與算法分析基礎(chǔ)248
11.3.1算法的基本概念248
11.3.2算法分析249
11.3.3算法分析實例254
11.4算法設(shè)計基本方法與策略基礎(chǔ)256
11.4.1算法設(shè)計的方法256
11.4.2算法設(shè)計策略260第12章線性表269
12.1線性表及其抽象數(shù)據(jù)類型269
12.1.1線性表的基本概念270
12.1.2線性表的抽象數(shù)據(jù)類型270
12.2線性表的順序存儲結(jié)構(gòu)及其實現(xiàn)271
12.2.1線性表的順序表示271
12.2.2順序表的實現(xiàn)273
12.2.3順序表代碼復(fù)用實例277
12.3線性表的鏈式表示方法及實現(xiàn)281
12.3.1鏈式存儲結(jié)構(gòu)281
12.3.2單向鏈表及其基本操作281
12.3.3單向鏈表代碼復(fù)用實例288
12.3.4線性表的順序存儲與鏈式存儲的比較291
12.3.5循環(huán)鏈表及其基本操作292
12.3.6雙向鏈表及其基本操作294第13章棧和隊列297
13.1棧的基本概念297
13.1.1棧的基本概念297
13.1.2棧的抽象數(shù)據(jù)類型298
13.2棧的表示及實現(xiàn)299
13.2.1棧的順序表示及實現(xiàn)299
13.2.2順序棧代碼復(fù)用實例303
13.2.3棧的鏈式表示及實現(xiàn)304
13.3隊列的基本概念307
13.3.1隊列的基本概念307
13.3.2隊列的抽象數(shù)據(jù)類型308
13.4隊列的表示及實現(xiàn)308
13.4.1隊列的順序表示及實現(xiàn)309
13.4.2循環(huán)隊列代碼復(fù)用實例313
13.4.3隊列的鏈式表示及實現(xiàn)315第14章樹和二叉樹319
14.1樹的基本概念319
14.1.1樹的定義321
14.1.2樹的表示形式321
14.1.3樹的基本術(shù)語322
14.2二叉樹及其基本性質(zhì)324
14.2.1二叉樹的定義324
14.2.2二叉樹的基本性質(zhì)325
14.3二叉樹的抽象數(shù)據(jù)類型和表示方式327
14.3.1二叉樹的順序表示及實現(xiàn)328
14.3.2二叉樹的鏈式表示及實現(xiàn)333
14.4二叉樹的遍歷及常用操作339
14.4.1二叉樹的遍歷及其實現(xiàn)339
14.4.2二叉樹其他常用操作的實現(xiàn)345
14.5二叉排序樹350
14.5.1二叉排序樹的定義350
14.5.2二叉排序樹的生成350
14.5.3二叉排序樹的查找353
14.6二叉樹排序樹應(yīng)用示例355
14.7哈夫曼樹和哈夫曼碼356
14.7.1基本術(shù)語356
14.7.2哈夫曼樹及其構(gòu)造方法357
14.7.3哈夫曼碼及其編解碼方法358第15章圖360
15.1圖的基本概念及特性360
15.2圖的抽象數(shù)據(jù)類型和表示方式364
15.2.1圖的抽象數(shù)據(jù)類型364
15.2.2圖的表示法365
15.2.3圖的鄰接矩陣表示法的實現(xiàn)367
15.3圖的遍歷370
15.3.1廣度優(yōu)先遍歷及其實現(xiàn)371
15.3.2深度優(yōu)先遍歷及其實現(xiàn)373
15.4應(yīng)用實例376
15.4.1圖的應(yīng)用376
15.4.2用圖來描述和求解實際問題377第16章算法設(shè)計策略及應(yīng)用實例380
16.1分治策略380
16.1.1分治策略概述380
16.1.2分治策略的算法設(shè)計步驟和程序模式381
16.1.3分治策略應(yīng)用實例382
16.2貪心策略385
16.2.1最優(yōu)化問題與最優(yōu)化原理385
16.2.2貪心策略概述385
16.2.3貪心策略的算法設(shè)計步驟及程序模式386
16.2.4貪心策略應(yīng)用實例387
16.3動態(tài)規(guī)劃策略389
16.3.1動態(tài)規(guī)劃策略概述390
16.3.2動態(tài)規(guī)劃策略的相關(guān)概念392
16.3.3動態(tài)規(guī)劃策略算法設(shè)計步驟及程序模式394
16.3.4動態(tài)規(guī)劃策略應(yīng)用實例395
16.4回溯策略398
16.4.1回溯策略概述398
16.4.2回溯策略算法設(shè)計步驟及程序模式399
16.4.3回溯策略應(yīng)用實例400
16.5分支限界策略401
16.5.1堆401
16.5.2分支限界策略概述404
16.5.3分支限界策略算法設(shè)計步驟及程序模式405
16.5.4分支限界策略應(yīng)用實例405