一、算法和數據結構
算法及其基本特征:
算法是對解題方法的准確而完整的描述。
算法的四個基本特征:可行性,確定性,有窮性,擁有足夠的情報。
算法的復雜度:
算法的時間復雜度是指執行算法所需的計算工作量,而計算工作量一般通過基本運算次數來衡量
算法的空間復雜度是指執行算法所需要的內存空間
數據結構:
數據結構是指有關聯的數據元素的集合。數據元素一般有共同的特征,例如早餐,午餐,晚餐構成一日三餐名的集合。而結構指的是數據元素之間的關系,繼續引用前面的例子,早餐是午餐的前件,晚餐是午餐的后件,這就是這三個元素的關系。
數據結構的表示:
B = (D,R),B表示數據結構,D表示數據元素的集合,R是D中元素間關系的集合。此外數據結構還能用圖形來表示,用箭頭來表示元素間的關系。
線性結構和非線性結構:
線性結構指有且只有一個根節點(指起始元素),每個節點最多只有一個前件也最多只有一個后件的非空數據結構
不滿足線性結構條件的就是非線性結構
線性表:
數據結構中,線性結構習慣性稱為線性表。線性表若沒有元素,則稱為空表。若有元素,可表示為(a1,a2,a3,a4……)
線性表的兩種儲存結構:
順序儲存:將線性表中的元素一個接一個的儲存在相鄰的存儲區域中,按順序儲存的線性表也稱為順序表。這種表有兩個特征:表中元素所占存儲空間是連續的;表中元素在存儲空間中是按邏輯順序存放的
鏈接儲存:鏈表
棧和隊列:
棧是一種特殊的線性表,它所有的插入和刪除都在表的同一端進行,允許插入與修改的一端為棧頂,另一端為棧底。當棧中沒有元素時,稱為空棧。
棧的修改原則是后進先出或先進后出。棧的基本運算包括:入棧、退棧、讀棧頂元素。
隊列是指允許在一端進行插入另一端進行刪除的線性表,允許刪除的那一端稱為隊頭,允許插入那一端稱為隊尾。
隊列的修改原則是先進先出或后進后出。隊列可用順序存儲的線性表來表示,用排頭指針front指示退隊運算的隊頭位置,用隊尾指針rear指示入隊運算的隊尾位置。隊列的順序存儲結構一般采用循環隊列的形式,也就是將隊列存儲的最后一個位置繞到第一個位置,形成邏輯上的環狀空間。當front=rear時,隊列要么為滿要么為空(選擇題可能會考),實際使用時會用標志s來指示,s=1時為滿,s=0時為空。
線性鏈表:
線性鏈表指線性表的鏈式存儲結構。指向鏈表中第一個節點的指針稱為鏈表的頭指針(HEAD),最后一個元素沒有后件,所以最后一個節點的指針域為空,用null或0表示。
線性鏈表的存儲單元是任意的。
在某些應用中,對線性鏈表中的每個節點設置兩個指針,一個指針存放前件地址,稱為左指針,一個指針存放后件地址,稱為右指針。這樣的線性鏈表稱為雙向鏈表。
棧和隊列也可以用鏈式存儲結構表示,只做了解。
順序表和鏈表的比較:
順序表:優點:可以隨機存取表中任意節點
無須為表示節點間的邏輯關系額外增加存儲空間
缺點:插入和刪除的運算效率很低
存儲空間不利於擴充和動態分配
鏈表: 優點:進行插入和刪除運算時,只需要改變指針即可,不需要移動元素
存儲空間易於擴充和動態分配
缺點:需要額外的空間(指針域)表示數據元素之間的邏輯關系
存儲密度較低
循環鏈表:
將單鏈表的第一個節點前增加一個表頭節點。隊頭指針指向表頭節點,最后一個節點的指針域由null改為指向表頭節點,形成環狀鏈。
循環鏈表中由於有表頭指針存在,所以在表中沒有元素時也至少要有一個節點存在
樹:
樹是一種簡單的非線性結構。圖形就類似於族譜。
根節點:每個樹只有一個沒有前件的節點,稱為根節點
父節點:在樹形結構中,每個節點最多只有一個前件,該前件稱為父節點
子節點:每個節點可以有多個后件,稱為該節點的子節點
葉子節點:沒有后件的節點稱為葉子節點
度:一個節點擁有的后件個數稱為度
深度:樹的根節點為第一層,總層數就是樹的深度
子樹:以某節點的子節點為根構成的樹稱為該節點的子樹
在樹中,樹的節點等於樹中所有節點的度之和再加一(選擇題中可能會用這個特性求某種節點的個數)
二叉樹:
二叉樹和樹形結構略有不同,特點如下:
二叉樹可以為空,空的二叉樹沒有節點,非空二叉樹有且只有一個根節點。
每個節點最多有兩棵子樹,即二叉樹中不存在度大於2的節點。
二叉樹的子樹有左右之分,不能任意顛倒
二叉樹的性質:
在二叉樹的第k層上,最多有2的k-1次方個節點
深度為m的二叉樹中,最多有2的m次方-1個節點
對任何二叉樹,度為0的節點總是比度為2的節點多一個(選擇題可能會用該特性求總節點個數)
具有n個節點的二叉樹,其深度至少為log2n + 1,log2n取整數部分
具有n個節點的完全二叉樹的深度為log2n + 1
滿二叉樹和完全二叉樹:
滿二叉樹是指除最后一層外,每一層的所有節點都有兩個子節點的二叉樹。
完全二叉樹是指除最后一層外,每一層上的節點數均達到最大值,在最后一層只缺少右邊的若干節點的二叉樹。
二叉樹的存儲結構:
二叉樹通常采用鏈式存儲結構,存儲二叉樹中元素的存儲節點由數據域和指針域兩部分構成。
二叉樹的遍歷:
前序遍歷:首先訪問根節點,然后遍歷左子樹,最后遍歷右子樹,遍歷子樹時依舊按照此順序
中序遍歷:首先遍歷左子樹,然后訪問根節點,最后遍歷右子樹,遍歷子樹時依舊按照此順序
后序遍歷:首先遍歷左子樹,然后遍歷右子樹,最后訪問根節點,遍歷子樹時依舊按照此順序
查找技術:
順序查找:從線性表的第一個元素開始,逐個將線性表中的元素與被查元素進行比較。最好情況查找一次,最差查找n次,平均查找n/2次。當線性表為無序表或采用鏈式結構的有序表只能使用順序查找。
二分法查找:通過和中間值比較確定值在前半段還是后半段,然后再不斷比較直到找出值。只有采用順序存儲結構的有序表才能使用二分法查找。
排序技術:
交換類排序法:
冒泡排序:兩兩比較和交換,直到所有數據元素有序為止。最壞情況下需要排n(n-1)/2次
快速排序:取一個隨機元素並通過與之比較大小將線性表分為兩個子表,對子表不斷進行該步驟直到分割的子表長度為1為止。最壞情況下要進行n(n-1)/2次比較,但實際上該方法效率比冒泡排序效率高。
插入類排序法:
簡單插入排序:將n個元素分為兩組,一組一個元素,為有序表,另一組n-1個元素,為無序表,通過將無序表中的元素與有序表中的元素進行比較再插入合適的位置來進行排序,當無序表為空,排序完成。最壞情況下需要n(n-1)/2次比較。
希爾排序:先取一個整數d<n,把所有元素分為d個組,所有距離為d的倍數的元素為一組,組成一個子序列。對每個子序列進行簡單插入排序。然后取d1<d重復上述步驟,直到所有記錄在一組中為止。最壞情況下比較的次數為n的r次方,1<r<2。
選擇類排序法:
簡單選擇排序:從n個元素中選出最小的元素與第一個元素交換位置,在剩下的n-1個元素中選出最小的元素與第二個元素交換,重復該操作直到所有元素有序為止。最壞情況下要比較n(n-1)/2次。
堆排序:將元素排列成一顆完全二叉樹,當所有節點按照大小順序排列時稱為堆。所有節點的值大於或等於左右節點的值,稱為大根堆,所有節點的值小於或等於左右節點的值,稱為小根堆。最壞情況需要nlog2n次比較。
二、程序設計基礎
程序設計風格:
程序的質量受到程序設計的方法,技術,和風格等因素的影響。“清晰第一,效率第二”是當今主導的程序設計風格。
形成良好的程序設計風格需要的因素:
源程序文檔化
數據說明風格
語句的結構
輸入和輸出
結構化程序設計:
結構化程序設計方法的重要原則:自頂向下,逐步求精,模塊化和限制使用goto語句
結構化程序設計的基本結構:順序結構,選擇結構,循環結構。共同特征是:只有一個入口和一個出口
結構化程序設計的優點:程序易於理解,使用和維護;提高了編程工作的效率,降低了軟件開發成本。
面向對象的程序設計:
優點:與人類思維方式一致
穩定性好
可重用性好
容易開發大型項目
可維護性好
基本概念:
對象:由數據(屬性)和方法(操作)兩部分組成。特點:標識唯一性,分類性,多態性,封裝性,模塊獨立性好
類和實例:類是具有共同屬性,共同方法的對象的集合,是關於對象的抽象描述,一個具體對象則是其對應類的一個實例
消息:對象間的通信
繼承:類和類之間可以繼承,子類可以繼承父類的全部描述(數據和操作)
多態性:子類對象可以像父類對象那樣使用,同樣的消息既可以發送給父類對象也可以發送給子類對象
三、軟件工程基礎
軟件工程的基本概念:
軟件定義:計算機軟件是由程序,數據及相關文檔構成的完整集合,它與計算機硬件一起組成計算機系統
軟件特點:軟件是一種邏輯實體,具有抽象性
軟件沒有明顯的制作過程
軟件在使用期間不存在磨損老化問題
對硬件和環境具有依賴性
軟件復雜度高,成本昂貴
軟件開發涉及諸多的社會因素
軟件的分類:
計算機軟件按功能分為應用軟件,系統軟件,支撐軟件(工具軟件)
軟件工程:
三要素:方法,工具,過程
原則:抽象,信息隱蔽,模塊化,局部化,確定性,一致性,完備性和可驗證性。
軟件過程:
軟件過程是把輸入轉化為輸出。
軟件生命周期:
軟件定義期,軟件開發期,運行維護期。
各階段主要任務:
問題定義:確定要解決的問題是什么
可行性研究:解決該問題是否存在一個可行的解決方法,制定完成開發任務的實施計划
需求分析:對待開發軟件提出的需求進行分析並給出詳細定義。編寫軟件規格說明書及初步的用戶手冊,提交評審
軟件設計:通常又分為概要設計和詳細設計兩個階段,給出軟件的結構、模塊的划分、功能的分配以及處理流程。
軟件實現:在軟件設計的基礎上編寫程序。
軟件測試:在設計測試用例的基礎上,檢驗軟件的各個組成部分。編寫測試分析報告
運行維護:將已交付的軟件投入運行,同時不斷地維護,進行必要而且可行的擴充和刪改
需求分析及其方法:
需求分析:
需求分析的任務是發現需求,求精,建模和定義需求的過程。
需求分析可分為四個方面:需求獲取,需求分析,編寫需求規格說明書和需求評審
需求分析方法可分為結構化分析方法和面向對象分析方法
數據化分析方法是使用數據流圖,數據字典,結構化英語,判定表和判定樹等工具來為結構化規格說明的目標文檔。
數據流圖注意事項:
每個元素都必須命名
對加工處理建立唯一,層次性的編號,且每個加工處理通常要求既有輸入,又有輸出
數據存儲間不應有數據流
輸入輸出和讀寫相對應(一致性)
子圖不大於父圖中的處理個數,所有子圖的輸入輸出數據流和父圖中相對應處理的輸入輸出數據流必須一致
軟件設計及其方法:
軟件設計的基本概念:
軟件設計是確定系統的物理模型
從工程管理的角度來看可以分為兩步:概要設計和詳細設計
從技術觀點來看可分為軟件結構設計,數據設計,接口設計,過程設計
模塊的獨立程度由內聚性和耦合性衡量,耦合衡量不同模塊彼此間互相依賴的緊密程度,內聚衡量一個模塊內部各個元素彼此結合的緊密程度,模塊的內聚性越高,耦合性越低,好的軟件要做到高內聚低耦合。
概要設計:
概要設計又稱總體設計,基本任務如下:設計軟件系統結構,數據結構及數據庫設計,編寫概要設計文檔(包括概要設計說明書,數據庫設計說明書和集成測試計划)
結構圖:
上級模塊是控制其他模塊的模塊
從屬模塊是被另一個模塊調用的模塊
原子模塊是沒有從屬節點的模塊,相當於樹中的葉子節點
深度表示控制的層數
寬度是最大模塊數的層的控制跨度
扇入是調用一個給定模塊的模塊個數
扇出是由一個模塊直接調用的其他模塊個數
詳細設計:
詳細設計的任務是為軟件結構圖中的每一個模塊確定實現算法和局部數據結構,用工具表示算法和數據結構的細節
軟件測試:
軟件測試就是在軟件投入運行之前,盡可能多的發現軟件中的錯誤,是保證軟件質量和可靠性的關鍵步驟
軟件測試准則:
所有測試都追溯到用戶需求
在測試之前制定測試計划,並嚴格執行
充分注意測試中的群集現象
避免由程序的編寫者測試自己的程序
不可能進行窮舉測試
妥善保存測試計划,測試用例,出錯統計和最終分析報告,為維護提供方便
軟件測試的方法:
根據軟件是否需要被執行,可以分為靜態測試和動態測試。如果按照功能划分,可以分為黑盒測試和白盒測試
靜態測試不實際運行軟件,主要通過人工進行分析
動態測試是通過運行軟件來檢測正確性
白盒測試是測試者對軟件十分了解然后測試軟件功能
黑盒測試是測試者對軟件完全不了解,然后進行測試
軟件測試的實施:
單元測試:單元測試是對模塊進行測試,可以采用動態測試和靜態測試,動態測試以白盒測試為主,黑盒測試為輔
集成測試:集成測試是對模塊組成的程序進行測試,目的是發現與接口有關的錯誤,通常使用黑盒測試
確認測試:確認測試的功能是檢查軟件的功能,性能及其他特征是否與用戶的需求一致,通常采用黑盒測試
系統測試:系統測試是對軟件系統的整體測試,在實際環境下進行一系列集成測試和確認測試
程序的調試:
基本概念:調試是在測試發現錯誤之后排除錯誤的過程,有兩個步驟:根據錯誤的跡象確定程序中錯誤的確切性質,原因和位置;對程序進行修改,排除這個錯誤
調試方法:靜態測試和動態測試
四、數據庫設計基礎
數據庫系統的基本概念:
數據:是描述事物的符號記錄
數據庫:是指長期儲存在計算機內的,有組織的,可共享的數據集合
數據庫管理系統:是管理數據庫的系統軟件,有三種數據語言:數據定義語言,數據操縱語言(查詢或增刪改),數據控制語言(故障恢復,並發控制)
數據庫的基本特點:
數據的集成性、數據的高共享和低冗余,數據獨立性,數據統一管理和控制(選擇題會把數據庫和文件管理系統作比較,這些基本特點文件系統都沒有)
數據庫系統的內部結構體系:
數據庫系統在其內部分為三級模式,概念模式,內模式和外模式
數據模型的基本概念:
數據模型是對數據特征的抽象,他的三要素是數據結構,數據操作及數據約束
數據模型的類別:
概念模型,數據模型,物理模型
E-R模型:
基本概念:
實體:指客觀存在並且可以相互區別的事物
屬性:描述實體的特性稱為屬性
聯系:實體之間的對應關系稱為聯系(一對一,一對多,多對多)
關系模型:
關系模型常用術語:
關系:一個二維表就是一個關系
屬性:二維表中的一列稱為屬性,二維表中的屬性個數稱為屬性元數
值域:每個屬性的取值范圍
元組:二維表中的一行稱為元組
候選碼:二維表中能唯一標識元組的最小屬性集
主鍵或主碼:有多個候選碼則選擇一個作為主鍵
外鍵或外碼:表m中的某屬性集是表n的候選鍵,則稱該屬性集為表m的外鍵或外碼
關系模型中有3類完整性約束:
實體完整性約束,參照完整性約束和用戶定義的完整性約束
關系代數:
關系代數就是關系和關系之間的運算
差運算:關系R和關系S經過差運算后得到屬於R但不屬於S的元組,記為R-S
交運算:得出R和S共同擁有的元組,記為R∩S
並運算:由屬於R或屬於S的元組構成,記為R∪S
笛卡爾積運算:n元關系R有p個元組,m元關系S有q個元組,得出一個m+n元關系,元組個數為p*q的元組。記為R*S
投影運算:從關系模型中指定若干個屬性組成新的元組,稱為投影。記為πA(R)
選擇運算:從關系中找出滿足給定條件的元組的操作稱為選擇
除運算:笛卡爾積的逆運算
連接運算:對兩個關系進行連接,根據條件來進行等值連接,大於連接,小於連接
數據庫設計:
基本思想:過程迭代和逐步求精
方法:面向數據的方法和面向過程的方法
范式:
滿足最低要求的叫做第一范式,在第一范式基礎上進一步滿足一定要求的叫做第二范式,以此類推
對於關系模式,若其中的每一個屬性都已不能再分為簡單項,則它屬於第一范式,若在此基礎上,存在每一個非主屬性完全依賴於某個候選鍵,則它屬於第二范式
感謝閱讀,希望考試的大家都能取得好成績!
。