《C++與數據結構(第2版)》是國家網絡精品課程的教學成果,根據教育部計算機基礎課程教學指導委員會《計算機基礎課程教學基本要求》(試行)中,有關理工類專業“算法基礎與程序設計”課程教學要求組織編寫,內容由淺入深,循序漸進,案例豐富,通俗易懂,實用性強。《C++與數據結構(第2版)》分為C++程序設計基礎和數據結構——面向對象方法與C++描述兩篇,包括C++語言概述,數據類型與運算規則,數組與指針,函數,結構類型及其他構造類型,C++類及其對象的封裝性,引用、友元和重載,繼承與派生,多態性與虛函數,模板,數據結構基本概念,線性表,堆棧與隊列,樹與二叉樹,圖,查找與散列結構,排序共15章。《C++與數據結構(第2版)》各章節配有實驗例題和題目,方便實踐教學,并為任課老師提供電子課件和示例源代碼。
《C++與數據結構(第2版)》可作為高等學校信息類專業及其他相關專業本科生的教科書,也可供從事程序設計的工程人員參考使用。
第1篇 C++程序設計基礎
第1章 C++語言概述
1.1 C++語言簡介
1.2 最簡單的C++程序
1.3 C++語言的基本組成
1.3.1 基本字符集
1.3.2 詞法記號
1.3.3 語句
1.3.4 標準函數庫
1.4 C++程序的基本結構
1.5 C++程序設計的編寫與實現
習題1
實驗訓練1
第2章 數據類型與運算規則
2.1 數據類型
2.2 常量與變量
2.2.1 常量
2.2.2 變量
2.3 C++的運算規則與表達式
2.3.1 C++的運算規則
2.3.2 算術運算符與算術表達式
2.3.3 自增、自減運算
2.3.4 賦值運算符和賦值表達式
2.3.5 組合賦值運算符與組合賦值
表達式
2.3.6 關系運算符與關系表達式
2.3.7 邏輯運算符與邏輯表達式
2.3.8 條件運算符與條件表達式
2.4 其他運算
2.4.1 位運算
2.4.2 逗號運算符
2.4.3 “.”和“->”運算符
2.4.4 “( )”和“[ ]”運算符
2.4.5 “*”和“&”運算符
2.4.6 (type)運算符
2.5 混合運算及數據類型轉換
習題2
實驗訓練2
第3章 數組與指針
3.1 數組
3.1.1 一維數組
3.1.2 多維數組
3.1.3 字符數組和字符串
3.2 指針
3.2.1 指針的概念
3.2.2 指針變量定義
3.2.3 指針運算
3.3 指針與數組
3.3.1 指向數組的指針
3.3.2 指向字符串的指針
3.3.3 指針數組和指向指針的指針
3.4 指針與函數
3.4.1 指向函數的指針
3.4.2 返回指針值的函數
實驗訓練3
第4章 函數
4.1 函數的聲明和調用
4.1.1 函數的聲明
4.1.2 函數的調用
4.2 函數間的參數傳遞
4.2.1 值傳遞
4.2.2 函數參數為指針類型
4.3 帶默認參數的函數
4.4 變量的存儲屬性
4.4.1 動態存儲方式與靜態存儲
方式
4.4.2 局部變量的存儲屬性
4.4.3 全局變量的存儲屬性
習題4
實驗訓練4
第5章 結構類型及其他構造類型
5.1 結構類型
5.1.1 結構類型的概念與定義
5.1.2 結構變量的說明
5.1.3 引用結構中的成員
5.1.4 結構的初始化
5.2 結構數組
5.3 結構指針
5.4 在函數之間傳遞結構
5.4.1 向函數傳遞結構的成員
5.4.2 向函數傳遞整個結構
5.4.3 向函數傳遞結構的地址
5.5 聯合類型
5.6 枚舉類型
5.6.1 枚舉的概念
5.6.2 枚舉運算
習題5
實驗訓練5
第6章 C++類及其對象的封裝性
6.1 面向對象的基本概念與基本特征
6.1.1 面向對象的基本概念
6.1.2 面向對象的基本特征
6.2 類的聲明和對象的定義
6.2.1 類和對象的關系
6.2.2 聲明類類型
6.2.3 定義對象的方法
6.2.4 類和結構體類型的異同
6.3 類的成員函數
6.3.1 成員函數的性質
6.3.2 在類外定義成員函數
6.3.3 inline成員函數
6.3.4 成員函數的存儲方式
6.4 對象成員的引用
6.4.1 通過對象名和成員運算符訪問
對象中的成員
6.4.2 通過指向對象的指針訪問對象中
的成員
6.5 構造函數
6.5.1 對象的初始化
6.5.2 構造函數的作用
6.5.3 帶參數的構造函數
6.5.4 用參數初始化表對數據成員
初始化
6.5.5 構造函數的重載
6.5.6 使用默認參數的構造函數
6.6 析構函數
6.7 動態存儲
習題6
實驗訓練6
第7章 引用、友元和重載
7.1 引用
7.1.1 引用的概念
7.1.2 引用的應用
7.1.3 引用作為函數參數
7.2 友元
7.2.1 友元的定義
7.2.2 友元函數
7.2.3 友元成員
7.2.4 友元類
7.3 重載
7.3.1 函數重載
7.3.2 運算符重載
習題7
實驗訓練7
第8章 繼承與派生
8.1 繼承與派生的概念
8.2 派生類的聲明
8.3 派生類的構成
8.4 派生類成員的訪問屬性
8.4.1 公有繼承
8.4.2 私有繼承
8.4.3 保護成員和保護繼承
8.4.4 多級派生時的訪問屬性
8.5 派生類的構造函數和析構函數
8.5.1 簡單的派生類的構造函數
8.5.2 有子對象的派生類的構造
函數
8.5.3 多級派生時的構造函數
8.5.4 派生類的析構函數
8.6 多繼承
8.6.1 聲明多繼承的方法
8.6.2 多繼承派生類的構造函數
8.6.3 多繼承的析構函數
8.6.4 多繼承引起的二義性問題
8.7 虛基類
8.7.1 虛基類的概念
8.7.2 虛基類的初始化
習題8
實驗訓練8
第9章 多態性與虛函數
9.1 多態性
9.1.1 多態性的概念
9.1.2 編譯時的多態性
9.1.3 運行時的多態性
9.2 虛函數
9.2.1 虛函數的作用
9.2.2 虛函數的聲明
9.2.3 虛析構函數
9.3 純虛函數與抽象類
9.3.1 純虛函數
9.3.2 抽象類
習題9
實驗訓練9
第10章 模板
10.1 模板的概念
10.2 函數模板
10.2.1 函數模板和模板函數
10.2.2 重載模板函數
10.3 類模板
10.3.1 類模板和模板類的概念
10.3.2 類模板的派生
習題10
實驗訓練10
第2篇 數據結構--面向對象方法與C++描述
第11章 數據結構基本概念
11.1 數據結構的概念和術語
11.2 抽象數據類型
11.2.1 數據類型
11.2.2 數據抽象與抽象數據類型
11.3 算法和算法分析
11.3.1 算法
11.3.2 算法設計的要求
11.3.3 算法效率的度量
11.4 數據結構的抽象層次
習題11
第12章 線性表
12.1 線性表的定義
12.1.1 線性表的邏輯結構
12.1.2 線性表的抽象類定義
12.2 線性表的順序表示和實現
12.2.1 線性表的順序表示
12.2.2 順序表類的定義
12.2.3 順序表類的實現
12.3 線性表的鏈式表示和實現
12.3.1 線性表的鏈式表示
12.3.2 抽象鏈表類的定義
12.3.3 抽象鏈表類各成員函數
的實現
12.4 單鏈表
12.4.1 單鏈表的定義
12.4.2 單鏈表類的定義
12.4.3 單鏈表的常用成員函數
的實現
12.4.4 單鏈表舉例-- 一元多項式
加法
12.5 循環鏈表
12.5.1 循環鏈表的定義
12.5.2 循環鏈表類的定義
12.5.3 循環鏈表常用函數的實現
12.5.4 循環鏈表舉例--約瑟夫
問題
12.6 雙向鏈表
12.6.1 雙向鏈表的定義
12.6.2 雙向鏈表類的定義
12.6.3 雙向鏈表的常用成員函數
的實現
習題12
實驗訓練12
第13章 堆棧與隊列
13.1 堆棧的概念及其運算
13.2 抽象堆棧類的定義
13.3 堆棧的定義及其實現
13.3.1 順序棧的定義
13.3.2 順序棧類的定義及典型成員
函數的實現
13.3.3 多棧共享空間問題
13.3.4 鏈棧的定義
13.3.5 鏈式棧類的定義及典型成員
函數的實現
13.4 堆棧的應用舉例
13.4.1 數制轉換
13.4.2 一個趣味游戲--迷宮問題
13.5 隊列的概念及其運算
13.6 抽象隊列類的定義
13.7 隊列的定義及其實現
13.7.1 隊列的順序存儲結構
13.7.2 循環隊列的定義
13.7.3 順序循環隊列類的定義及常用
成員函數的實現
13.7.4 鏈式隊列的定義
13.7.5 鏈式隊列類的定義及常用成員
函數的實現
13.7.6 鏈式隊列的應用舉例
13.7.7 優先級隊列的定義
13.7.8 優先級隊列類的定義及常用
成員函數的實現
習題13
實驗訓練13
第14章 樹與二叉樹
14.1 樹、二叉樹和森林的基本概念
14.1.1 樹
14.1.2 二叉樹
14.1.3 樹與森林的存儲結構
14.2 二叉樹的抽象類和樹的類
14.2.1 二叉樹的抽象類
14.2.2 樹的類
14.3 二叉樹的遍歷和樹的遍歷
14.3.1 二叉樹的遍歷
14.3.2 樹的遍歷
14.4 二叉排序樹
14.5 二叉樹的計數
14.6 哈夫曼樹及其應用
14.6.1 最優二叉樹(哈夫曼樹)
14.6.2 哈夫曼編碼
習題14
實驗訓練14
第15章 圖
15.1 圖的基本概念
15.1.1 圖的定義
15.1.2 圖的術語
15.1.3 圖的基本操作
15.1.4 圖的存儲表示
15.2 圖的抽象類
15.2.1 圖的鄰接矩陣類
15.2.2 圖的鄰接表類
15.3 圖的遍歷
15.3.1 深度優先搜索DFS
15.3.2 廣度(或寬度)優先搜索
BFS
15.4 圖的連通性與最小生成樹
15.4.1 無向圖的連通分量和生成樹
15.4.2 最小生成樹
15.4.3 關節點和重連通分量
15.5 最短路徑
15.5.1 圖結點的可達性
15.5.2 從某個源點到其余各頂點
的最短路徑
15.5.3 每一對頂點之間的最短路徑
15.6 活動網絡
15.6.1 用頂點表示活動的網絡
(AOV網絡)
15.6.2 用邊表示活動的網絡
(AOE網絡)
習題15
實驗訓練15
第16章 查找與散列結構
16.1 基本概念
16.2 靜態查找表
16.2.1 順序表的查找
16.2.2 有序表的查找
16.2.3 索引順序表的查找
16.3 動態查找表
16.4 Hash表及其查找
16.4.1 Hash表
16.4.2 Hash函數的構造方法
16.4.3 處理沖突的方法
16.4.4 Hash表的查找及其分析
習題16
實驗訓練16
第17章 排序
17.1 排序的基本概念
17.2 插入排序
17.2.1 直接插入排序
17.2.2 其他插入排序
17.2.3 希爾排序
17.3 快速排序
17.4 選擇排序
17.4.1 簡單選擇排序
17.4.2 錦標賽排序
17.4.3 堆排序
17.5 歸并排序
17.5.1 歸并
17.5.2 迭代的歸并排序算法
17.6 基數排序
17.6.1 多關鍵字排序
17.6.2 鏈式基數排序
習題17
實驗訓練17
參考文獻