本書以數(shù)據(jù)結構及算法、數(shù)據(jù)庫技術、軟件工程技術等為主要內(nèi)容,介紹計算機軟件基礎技術。全書共分12章,其中第2-6章介紹線性表、棧和隊列、樹與二叉樹、圖、查找和排序等數(shù)據(jù)結構及算法相關知識,第7章介紹執(zhí)行過程、存儲、文件和設備等程序運行相關資源管理,第8章介紹數(shù)據(jù)庫系統(tǒng)的組成、關系模型和關系數(shù)據(jù)庫結構化查詢語言SQL等數(shù)據(jù)庫基礎技術,第9-12章介紹系統(tǒng)分析、系統(tǒng)設計等軟件工程技術相關知識。本書可作為高等院校機器人、機械工程、自動化等非計算機專業(yè)本科生、研究生的教材或教學參考書,也可以作為職業(yè)培訓教材。
學生在學習專業(yè)知識的過程中,有很多環(huán)節(jié)需要用到計算機軟件相關技術:
(1) 學生在專業(yè)課學習過程中,需要借助計算機軟件技術進行相關知識的學習。
(2) 在畢業(yè)設計和論文研究期間,需要采用計算機軟件技術編寫相關算法及開發(fā)應用系統(tǒng)。
(3) 畢業(yè)從事相關工作需要具有一定的軟件技術基礎。
在上述各個環(huán)節(jié)中,根據(jù)實際教學和科研工作、軟件從業(yè)人員調(diào)研的結果來看,學生需要掌握的相關技術基礎有:
(1) 信息邏輯處理技術。
(2) 軟件開發(fā)工具語言技術。
(3) 數(shù)據(jù)庫相關技術。
(4) 計算機網(wǎng)絡技術。
(5) 軟件工程技術。
(6) 軟件相關技術。
上述相關技術中,信息處理基本算法、數(shù)據(jù)庫技術、軟件工程技術是計算機軟件技術的基礎,對學生學習相關專業(yè)知識、提高軟件技術能力至關重要。
在多年本科生、碩士生教學和科研工作中,經(jīng)常遇到這樣一些問題: 學生無法很好地將所學的專業(yè)知識通過軟件技術實現(xiàn),開發(fā)出能滿足實際需要的應用系統(tǒng)。其主要原因是計算機軟件技術基礎薄弱,尤其是非計算機專業(yè)的學生。因此在學習計算機軟件技術的時候,迫切需要有一套適應面較廣的、以非計算機專業(yè)人員為基礎的實用性教材,以滿足以下多種層次的要求。
(1) 以通俗易懂的語言講解相關技術原理。
(2) 翔實的示例代碼及運行結果解析,使學生通過運行代碼,閱讀解析,逐步了解和掌握相關算法。
(3) 以實際應用為教學目標,避免出現(xiàn)學生學習時無從下手、不會自己動手編寫代碼的現(xiàn)象,使學生具備獨立開發(fā)代碼的能力。
(4) 具有適應面廣、基礎性強的特點,能滿足多種層次、多種類型的計算機專業(yè)本科學生的需要,特別是滿足計算機應用型人才培養(yǎng)的需要。
為此,我們編寫了適合非計算機專業(yè)的學生學習計算機軟件技術的教材,幫助學生掌握相關計算機軟件技術,為后續(xù)專業(yè)課的學習和就業(yè)提供有力支持。
本書以數(shù)據(jù)結構及算法、數(shù)據(jù)庫技術、軟件工程技術等為主要內(nèi)容,面向機器人工程、智能制造工程等非計算機專業(yè)學生介紹計算機軟件基礎技術。本書共分12章,其中第2~6章介紹數(shù)據(jù)結構及算法,第7章介紹程序運行相關資源管理,第8章介紹數(shù)據(jù)庫基礎技術,第9~12章介紹軟件工程技術相關知識,具體如下:
第1章概括性地介紹了信息處理、計算機技術和算法的基本概念,使學生對計算機軟件技術有一個整體了解,為后續(xù)深入學習具體知識打基礎。
第2章介紹了遞歸方法。遞歸方法是一種常用的計算方法,也是后續(xù)相關數(shù)據(jù)結構學習的基礎。
第3章介紹了數(shù)據(jù)結構、線性表、棧和隊列的基本概念和操作方法,是本書的基礎部分。
第4章介紹了樹與二叉樹,包括二叉樹的遍歷和二叉排序樹等的存儲結構和操作算法。
第5章介紹了圖的定義、存儲、遍歷和短路徑等操作。相關知識在機器人行走路徑優(yōu)化等方面經(jīng)常用到。
第6章介紹了查找與排序。查找與排序是常見的數(shù)據(jù)處理需求,這里重點介紹了常用的排序算法。
第7章介紹了程序運行過程、存儲、文件和設備等軟件運行資源管理,其中程序運行資源包括程序運行過程涉及的進程、線程的狀態(tài)與調(diào)度、同步等知識,是進一步學習并行計算、大規(guī)模并發(fā)解決方案的基礎。
第8章介紹了數(shù)據(jù)庫技術,包括數(shù)據(jù)庫系統(tǒng)的組成、關系模型和結構化查詢語言(SQL),其中關系模型和SQL是本章的學習重點。
第9章介紹了軟件需求管理相關知識,這是軟件系統(tǒng)項目中的一個極其重要的工作環(huán)節(jié),是系統(tǒng)分析和系統(tǒng)設計及實現(xiàn)的基礎。
第10章介紹了系統(tǒng)分析中的結構化分析方法和面向?qū)ο蠓治龇椒ㄏ嚓P知識,其中結構化分析方法應用非常普遍,是本章的學習重點。
第11章介紹了信息系統(tǒng)中的功能模塊設計、編碼設計、數(shù)據(jù)庫設計等系統(tǒng)設計知識,其中數(shù)據(jù)庫設計是本章的學習重點。
第12章介紹了軟件系統(tǒng)實施相關知識,包括信息系統(tǒng)的開發(fā)方式、信息系統(tǒng)的項目管理、系統(tǒng)開發(fā)方法、程序設計和軟件測試等軟件項目實施階段的內(nèi)容。
本書從基本算法設計方法入手,系統(tǒng)、全面地介紹表、樹、圖、查找、排序等基本數(shù)據(jù)結構及算法,給出了C 語言程序示例,讀者可以結合程序的跟蹤調(diào)試,考察過程結果,進而理解和掌握相關算法。書中的代碼均通過多個專業(yè)學生試用,根據(jù)學生對相關知識的理解程度調(diào)整了語言文字和示例。
本書各章都配有練習題,其中,部分可選作上機練習題。大多數(shù)習題都緊扣正文中的教學內(nèi)容。
本書使用對象是非計算機科學與技術相關專業(yè)的本科生、碩士生以及相關技術人員。為了便于自學,在編寫過程中,力求語言簡練、通俗易懂、由淺入深,著力挑選簡單明了、實用性強的示例以闡明基本概念和基本算法。
感謝王歡、劉徐暢、吳光譜、王小童、李悅、張寧波、賈文哲、李苓苓、王世洲、林坤、陳明杰、張海嘯、李晶、田彥榮、張鎧、沙桂東等對本書代碼驗證、文字錄入和圖表繪制等相關工作給予的支持。
雖經(jīng)作者再三努力,書中難免有疏漏之處,懇請讀者指正,更請同行不吝賜教,提出寶貴意見與建議,不斷對本書進行完善。
作者2021年4月于北京
第1章概論
1.1數(shù)據(jù)、信息與數(shù)據(jù)處理
1.1.1數(shù)據(jù)的概念
1.1.2信息的概念
1.1.3數(shù)據(jù)處理
1.2計算機系統(tǒng)
1.2.1硬件系統(tǒng)
1.2.2軟件系統(tǒng)
1.2.3計算機硬件與軟件的關系
1.3計算機數(shù)據(jù)管理技術發(fā)展過程
1.3.1人工管理階段
1.3.2文件系統(tǒng)階段
1.3.3數(shù)據(jù)庫系統(tǒng)階段
1.3.4分布式數(shù)據(jù)庫系統(tǒng)階段
1.3.5信息系統(tǒng)發(fā)展歷程
1.4計算機軟件開發(fā)技術發(fā)展過程
1.4.1高級語言階段
1.4.2結構程序設計階段
1.4.3自動程序設計階段
1.4.4面向?qū)ο蟪绦蛟O計
1.5算法
1.5.1算法的基本概念
1.5.2算法設計的基本方法
1.5.3算法復雜度
1.6小結
1.7習題
第2章遞歸
2.1遞歸定義
2.2遞歸應用
2.2.1階乘
2.2.2累加
2.2.3排列
2.3小結
2.4習題
第3章表結構
3.1數(shù)據(jù)結構
3.1.1數(shù)據(jù)
3.1.2數(shù)據(jù)類型
3.1.3數(shù)據(jù)結構的定義
3.1.4數(shù)據(jù)結構的分類
3.2線性表
3.2.1線性表的定義和運算
3.2.2順序存儲的線性表
3.3棧
3.3.1棧的定義及基本運算
3.3.2順序棧及其主要運算的實現(xiàn)
3.3.3棧與遞歸的應用
3.4隊列
3.4.1隊列的定義及其運算
3.4.2隊列的順序存儲結構和基本運算的實現(xiàn)
3.5小結
3.6習題
第4章樹與二叉樹
4.1樹的基本概念和術語
4.1.1樹的定義
4.1.2樹的基本術語
4.1.3樹的表示
4.1.4樹的邏輯結構特點
4.2二叉樹
4.2.1二叉樹的定義
4.2.2二叉樹的性質(zhì)
4.2.3二叉樹的存儲結構
4.3二叉樹的遍歷
4.3.1二叉樹遍歷的遞歸算法
4.3.2鏈表二叉樹的建立
4.3.3二叉樹遍歷的非遞歸算法
4.3.4線索二叉樹
4.3.5線索二叉樹的描述
4.3.6二叉樹的線索化
4.3.7在線索二叉樹中檢索結點
4.3.8遍歷線索二叉樹
4.4二叉排序樹
4.4.1二叉排序樹的定義
4.4.2二叉排序樹的結點結構
4.4.3二叉排序樹的插入
4.4.4二叉排序樹的生成
4.4.5二叉排序樹的查找
4.4.6二叉排序樹的刪除
4.5小結
4.6習題
第5章圖
5.1圖的定義及常用術語
5.1.1頂點和邊
5.1.2有向圖和無向圖
5.1.3頂點鄰接
5.1.4度
5.1.5子圖
5.1.6路徑與連通
5.1.7權和網(wǎng)
5.2圖的存儲
5.2.1鄰接矩陣表示法
5.2.2鄰接鏈表表示法
5.3圖的遍歷
5.3.1深度優(yōu)先搜索法
5.3.2廣度優(yōu)先搜索法
5.4短路徑
5.4.1單源短路徑的概念
5.4.2單源短路徑的計算方法
5.5拓撲排序基礎
5.5.1拓撲排序的概念
5.5.2拓撲排序的條件
5.5.3拓撲排序的算法
5.6小結
5.7習題
第6章查找與排序
6.1查找
6.1.1順序查找
6.1.2二分查找
6.2排序
6.2.1排序的基本概念
6.2.2插入排序
6.2.3選擇排序
6.2.4交換排序
6.2.5希爾排序
6.3小結
6.4習題
第7章運行資源管理
7.1程序運行管理
7.1.1程序運行方式
7.1.2進程和線程
7.1.3線程的狀態(tài)與調(diào)度
7.1.4基本同步機制
7.1.5死鎖
7.2存儲管理
7.2.1存儲管理概述
7.2.2重定位技術
7.2.3存儲管理方法
7.2.4覆蓋和交換技術
7.2.5頁式管理和段式管理
7.2.6虛擬存儲技術
7.3文件系統(tǒng)
7.3.1文件系統(tǒng)的基本概念
7.3.2文件的組織和存取
7.3.3文件目錄
7.3.4外存儲空間管理
7.3.5文件的共享
7.4設備管理
7.4.1設備管理概述
7.4.2數(shù)據(jù)傳送控制方式
7.4.3設備的分配
7.4.4設備無關性和緩沖技術
7.4.5設備驅(qū)動程序
7.5小結
7.6習題
第8章數(shù)據(jù)庫技術
8.1數(shù)據(jù)庫概述
8.2數(shù)據(jù)庫系統(tǒng)的組成
8.2.1數(shù)據(jù)庫
8.2.2數(shù)據(jù)庫管理系統(tǒng)
8.2.3數(shù)據(jù)庫應用
8.2.4數(shù)據(jù)庫系統(tǒng)的分類
8.3關系數(shù)據(jù)模型
8.3.1關系模型
8.3.2關系運算
8.4SQL
8.4.1SQL概述
8.4.2查詢
8.4.3SQL數(shù)據(jù)定義
8.4.4SQL數(shù)據(jù)操作
8.4.5SQL數(shù)據(jù)控制
8.5小結
8.6習題
第9章系統(tǒng)需求管理
9.1軟件系統(tǒng)的生命周期
9.2系統(tǒng)調(diào)查與系統(tǒng)規(guī)劃
9.2.1系統(tǒng)調(diào)查
9.2.2系統(tǒng)規(guī)劃的方法
9.3軟件需求
9.3.1軟件需求的層次
9.3.2需求說明的特征
9.3.3需求獲取
9.3.4需求驗證
9.3.5需求管理
9.4小結
9.5習題
第10章系統(tǒng)分析
10.1結構化分析方法
10.1.1結構化分析方法概述
10.1.2業(yè)務流程圖
10.1.3數(shù)據(jù)流程圖
10.1.4數(shù)據(jù)字典
10.1.5處理邏輯的表達方法
10.1.6功能需求分析
10.1.7新系統(tǒng)邏輯模型
10.2面向?qū)ο蠓椒ㄅcUML
10.2.1面向?qū)ο蠓椒ê喗?/p>
10.2.2統(tǒng)一建模語言
10.3系統(tǒng)分析報告
10.4小結
10.5習題
第11章系統(tǒng)設計
11.1系統(tǒng)功能模塊設計
11.1.1功能模塊設計概述
11.1.2功能模塊設計工具
11.2編碼設計
11.3數(shù)據(jù)庫設計
11.3.1數(shù)據(jù)庫設計的要求及步驟
11.3.2數(shù)據(jù)存儲結構規(guī)范化
11.3.3ER圖
11.3.4概念結構設計
11.3.5邏輯結構設計
11.3.6數(shù)據(jù)庫物理設計
11.4用戶界面設計
11.4.1用戶界面設計的一般原則
11.4.2用戶界面設計過程
11.5系統(tǒng)設計報告
11.6小結
11.7習題
第12章系統(tǒng)實施
12.1信息系統(tǒng)的開發(fā)方式
12.2管理信息系統(tǒng)的項目管理
12.2.1項目角色與分工
12.2.2軟件質(zhì)量管理
12.3系統(tǒng)開發(fā)方法
12.4程序設計
12.4.1程序設計的性能要求
12.4.2程序設計的原則
12.4.3模塊獨立性
12.5軟件測試
12.5.1軟件問題類型
12.5.2軟件測試類型
12.5.3軟件測試的原則
12.5.4軟件測試的方法
12.5.5測試用例的設計
12.5.6程序調(diào)試的步驟與內(nèi)容
12.5.7系統(tǒng)操作說明書與技術報告
12.6系統(tǒng)安裝
12.6.1數(shù)據(jù)的整理與錄入
12.6.2系統(tǒng)切換
12.7系統(tǒng)維護與評價
12.7.1系統(tǒng)維護
12.7.2系統(tǒng)評價
12.8小結
12.9習題
參考文獻