第一章數(shù)據結構與算法
1.1 算法
算法:是指解題方案的準確而完整的描述。
算法不等于程序,也不等計算機方法,程序的編制不可能優(yōu)于算法的設計。
算法的基本特征:是一組嚴謹?shù)囟x運算順序的規(guī)則,每一個規(guī)則都是有效的,是明確的,此順序將在有限的次數(shù)下終止。特征包括: (1)可行性;
(2)確定性,算法中每一步驟都必須有明確定義,不充許有模棱兩可的解釋,不允許有多義性;
(3)有窮性,算法必須能在有限的時間內做完,即能在執(zhí)行有限個步驟后終止,包括合理的執(zhí)行時間的含義;
(4)擁有足夠的情報。
算法的基本要素:一是對數(shù)據對象的運算和操作;二是算法的控制結構。
指令系統(tǒng):一個計算機系統(tǒng)能執(zhí)行的所有指令的集合。
基本運算和操作包括:算術運算、邏輯運算、關系運算、數(shù)據傳輸。
算法的控制結構:順序結構、選擇結構、循環(huán)結構。
算法基本設計方法:列舉法、歸納法、遞推、遞歸、減斗遞推技術、回溯法。
算法復雜度:算法時間復雜度和算法空間復雜度。
算法時間復雜度是指執(zhí)行算法所需要的計算工作量。
算法空間復雜度是指執(zhí)行這個算法所需要的內存空間。
1.2 數(shù)據結構的基本基本概念
數(shù)據結構研究的三個方面:
(1)數(shù)據集合中各數(shù)據元素之間所固有的邏輯關系,即數(shù)據的邏輯結構;
(2)在對數(shù)據進行處理時,各數(shù)據元素在計算機中的存儲關系,即數(shù)據的存儲結構;
(3)對各種數(shù)據結構進行的運算。
數(shù)據結構是指相互有關聯(lián)的數(shù)據元素的集合。
數(shù)據的邏輯結構包含:
(1)表示數(shù)據元素的信息;
(2)表示各數(shù)據元素之間的前后件關系。
數(shù)據的存儲結構有順序、鏈接、索引等。
線性結構條件:
(1)有且只有一個根結點;
(2)每一個結點最多有一個前件,也最多有一個后件。
非線性結構:不滿足線性結構條件的數(shù)據結構。
1.3 線性表及其順序存儲結構
線性表由一組數(shù)據元素構成,數(shù)據元素的位置只取決于自己的序號,元素之間的相對位置是線性的。
在復雜線性表中,由若干項數(shù)據元素組成的數(shù)據元素稱為記錄,而由多個記錄構成的線性表又稱為文件。
非空線性表的結構特征:
(1)且只有一個根結點a1,它無前件;
(2)有且只有一個終端結點an,它無后件;
(3)除根結點與終端結點外,其他所有結點有且只有一個前件,也有且只有一個后件。結點個數(shù)n稱為線性表的長度,當n=0時,稱為空表。
線性表的順序存儲結構具有以下兩個基本特點:
(1)線性表中所有元素的所占的存儲空間是連續(xù)的;
(2)線性表中各數(shù)據元素在存儲空間中是按邏輯順序依次存放的。
ai的存儲地址為:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)為第一個元素的地址,k代表每個元素占的字節(jié)數(shù)。
順序表的運算:插入、刪除。 (詳見14--16頁)
1.4 棧和隊列
棧是限定在一端進行插入與刪除的線性表,允許插入與刪除的一端稱為棧頂,不允許插入與刪除的另一端稱為棧底。 棧按照“先進后出”(FILO)或“后進先出”(LIFO)組織數(shù)據,棧具有記憶作用。用top表示棧頂位置,用bottom表示棧底。
棧的基本運算:(1)插入元素稱為入棧運算;(2)刪除元素稱為退棧運算; (3)讀棧頂元素是將棧頂元素賦給一個指定的變量,此時指針無變化。
隊列是指允許在一端(隊尾)進入插入,而在另一端(隊頭)進行刪除的線性表。Rear指針指向隊尾,front指針指向隊頭。
隊列是“先進行出”(FIFO)或“后進后出”(LILO)的線性表。
隊列運算包括(1)入隊運算:從隊尾插入一個元素;(2)退隊運算:從隊頭刪除一個元素。
循環(huán)隊列:s=0表示隊列空,s=1且front=rear表示隊列滿
1.1 算法
算法:是指解題方案的準確而完整的描述。
算法不等于程序,也不等計算機方法,程序的編制不可能優(yōu)于算法的設計。
算法的基本特征:是一組嚴謹?shù)囟x運算順序的規(guī)則,每一個規(guī)則都是有效的,是明確的,此順序將在有限的次數(shù)下終止。特征包括: (1)可行性;
(2)確定性,算法中每一步驟都必須有明確定義,不充許有模棱兩可的解釋,不允許有多義性;
(3)有窮性,算法必須能在有限的時間內做完,即能在執(zhí)行有限個步驟后終止,包括合理的執(zhí)行時間的含義;
(4)擁有足夠的情報。
算法的基本要素:一是對數(shù)據對象的運算和操作;二是算法的控制結構。
指令系統(tǒng):一個計算機系統(tǒng)能執(zhí)行的所有指令的集合。
基本運算和操作包括:算術運算、邏輯運算、關系運算、數(shù)據傳輸。
算法的控制結構:順序結構、選擇結構、循環(huán)結構。
算法基本設計方法:列舉法、歸納法、遞推、遞歸、減斗遞推技術、回溯法。
算法復雜度:算法時間復雜度和算法空間復雜度。
算法時間復雜度是指執(zhí)行算法所需要的計算工作量。
算法空間復雜度是指執(zhí)行這個算法所需要的內存空間。
1.2 數(shù)據結構的基本基本概念
數(shù)據結構研究的三個方面:
(1)數(shù)據集合中各數(shù)據元素之間所固有的邏輯關系,即數(shù)據的邏輯結構;
(2)在對數(shù)據進行處理時,各數(shù)據元素在計算機中的存儲關系,即數(shù)據的存儲結構;
(3)對各種數(shù)據結構進行的運算。
數(shù)據結構是指相互有關聯(lián)的數(shù)據元素的集合。
數(shù)據的邏輯結構包含:
(1)表示數(shù)據元素的信息;
(2)表示各數(shù)據元素之間的前后件關系。
數(shù)據的存儲結構有順序、鏈接、索引等。
線性結構條件:
(1)有且只有一個根結點;
(2)每一個結點最多有一個前件,也最多有一個后件。
非線性結構:不滿足線性結構條件的數(shù)據結構。
1.3 線性表及其順序存儲結構
線性表由一組數(shù)據元素構成,數(shù)據元素的位置只取決于自己的序號,元素之間的相對位置是線性的。
在復雜線性表中,由若干項數(shù)據元素組成的數(shù)據元素稱為記錄,而由多個記錄構成的線性表又稱為文件。
非空線性表的結構特征:
(1)且只有一個根結點a1,它無前件;
(2)有且只有一個終端結點an,它無后件;
(3)除根結點與終端結點外,其他所有結點有且只有一個前件,也有且只有一個后件。結點個數(shù)n稱為線性表的長度,當n=0時,稱為空表。
線性表的順序存儲結構具有以下兩個基本特點:
(1)線性表中所有元素的所占的存儲空間是連續(xù)的;
(2)線性表中各數(shù)據元素在存儲空間中是按邏輯順序依次存放的。
ai的存儲地址為:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)為第一個元素的地址,k代表每個元素占的字節(jié)數(shù)。
順序表的運算:插入、刪除。 (詳見14--16頁)
1.4 棧和隊列
棧是限定在一端進行插入與刪除的線性表,允許插入與刪除的一端稱為棧頂,不允許插入與刪除的另一端稱為棧底。 棧按照“先進后出”(FILO)或“后進先出”(LIFO)組織數(shù)據,棧具有記憶作用。用top表示棧頂位置,用bottom表示棧底。
棧的基本運算:(1)插入元素稱為入棧運算;(2)刪除元素稱為退棧運算; (3)讀棧頂元素是將棧頂元素賦給一個指定的變量,此時指針無變化。
隊列是指允許在一端(隊尾)進入插入,而在另一端(隊頭)進行刪除的線性表。Rear指針指向隊尾,front指針指向隊頭。
隊列是“先進行出”(FIFO)或“后進后出”(LILO)的線性表。
隊列運算包括(1)入隊運算:從隊尾插入一個元素;(2)退隊運算:從隊頭刪除一個元素。
循環(huán)隊列:s=0表示隊列空,s=1且front=rear表示隊列滿

