很久之前學的資料結構,現在開始重新學習,盡量每乙個行**都會給解釋,加加油!
一、基本概念:
資料(data)是對客觀事物的符號表示,指所有能輸入到計算機中的並被電腦程式處理的符號的總稱。例如,乙個利用資料分析方法解代數方程的程式,其處理物件是整數和實數;乙個編譯程式或文字處理程式,其處理物件就是字串,也就是所謂的資料。
資料元素(data element)是資料的基本單位,在計算機中程式中通常作為乙個整體進行考慮和處理。有時,乙個資料元素可由若干個 資料項組成。例如:一本書的書目資訊為乙個資料元素,而書目資訊中的每一項(如書名,作者名等)為乙個資料項。資料項是資料的不可分割的最小單位。
資料物件(data object)是性質相同的資料元素的集合
資料結構(data structure)是相互之間存在一種或多種特定關係的資料元素的集合。 資料結構在計算機中的表示(又稱映像)稱為資料的物理結構,又稱儲存結構。它包括資料元素的表示和關係的表示。在計算機中,用乙個由若干位組合起來形成的乙個位串表示乙個資料元素(如用乙個字長的位串表示乙個整數,用八位二進位制數表示乙個字串等),通常稱這個位串位元素(element)或結點(node)。當資料元素由若干資料項組成時,位串中對應於各個資料項的子位串稱為資料域。因此,元素或結點可看成時資料元素在計算機中的映像。
資料型別(data type) 用以刻畫(程式)操作物件的特性。在用高階程式語言編寫的程式中,每個變數、常量或表示式所有可能取值的範圍,以及在這些值上允許進行的操作,因此資料型別是乙個值的集合或定義在這個值集上的一組操作的總稱。
按 「值「的不同特性,高階程式語言中的資料型別可分為兩類:一類是非結構的原子型別。原子型別的值是不可分解的(例如,c語言中的基本型別,整形,實型,字元型)另一類是結構型別,結構型別的值是由若干成分按某種結構組成的,因此是可以分解的,並且它的成分可以是非結構的,也可以是結構的。(例如陣列的值是由若干分量組成,每個分量可以是整數,也可以是陣列等)在某種意義上,資料結構可以看成是」一組具有相同結構的值「,則結構型別可以看成由一種資料結構和定義在其上的一組操作組成。
抽象資料型別(abstruct data type):是指乙個數學模型以及定義在該模型上的一組操作,抽象資料型別的定義僅取決於它的一組邏輯特性,而於其在計算機內部如何表示和實現無關,即不論其內部結構如何變化,只要它的數學特性不變,都不影響其外部的使用。乙個含抽象資料型別的團建模組通常應包含定義、表示和實現三個部分。
抽象資料型別的定義由乙個值域和定義在該值域上的一組操作組成。若按其值的不同特性,可細分為下列三種型別:
(1)原子型別 (atomic data type)屬原子型別的變數的值是不可分解的,
(2)固定聚合型別(fixed-aggregate data type)屬該型別的變數,其值由確定數目的成分按某種結構組成。
(3)可變聚合型別(variable-aggregate data type)構成可變聚合型別「值」的成分的數目不確定
資料元素之間的關係在計算機中又兩種不同的表示方式: 順序映像和非順序映像,並由此得到兩種不同的儲存結構:順序儲存結構和鏈式儲存結構件。
(1)順序映像:
特點時借助元素在儲存器中的相對位置來表示資料元素之間的邏輯關係。
(2)非順序映像
特點時借助值是元素儲存位址的指標(pointer)表示資料元素之間的邏輯關係
結構(structure):在任何問題中,資料元素都不是孤立存在的,而是在它們之間存在這某種關係,這種資料元素之間關係的不同特性,通常有下列四類基本結構:
(1)集合:結構中的資料元素之間處理「同屬於乙個集合」的關係外,別無其他的關係
(2)線性結構:結構中的資料元素之間存在乙個對乙個的關係
(3)樹形結構:結構中的資料元素之間存在乙個對多個的關係
(4)圖狀結構或網狀結構:結構中的資料元素之間存在多個對多個的關係
二、抽象資料型別的表示與實現
抽象資料型別可通過固有資料型別來表示和實現,即利用處理器中存在的資料型別來說明新的結構,用已經實現的操作來組合新的操作。
(1)預定義常量和型別:
//函式結果狀態**
#define true 1
#define false 0
#define ok 1
#defing error 0
#define infeasible -1
#define overflow -2
(2)資料結構的表示(儲存結構)用型別定義(typedef)描述。資料元素型別約定為elemtype,由使用者在使用該資料 型別是自行定義。
(3)基本操作的演算法都用一下形式和函式描述:
函式型別 函式名 (函式引數表) //函式名
(4)迴圈語句:
for語句 for (賦初值表示式序列;條件;修改表示式序列)語句;
while語句 while(條件)語句;
do-while語句 dowhile(條件);
(5)結束語句
函式結束語句 return 表示式;
return;
case結束語句 break;
異常結束語句 exit(異常**)
三、抽象資料型別triplet的表示和實現
// -------採用動態分配的順序儲存結構
status inittriplet(triplet &t, elemtype ,elemtype v2,elemtype v3)//inittriplet
status destroytriplet(triplet &t)//銷毀三元組t
status get(triplet t,int i,elemtype &e)//get
status put(triplet &t, int i, elemtrip e)//賦值
//put
status isascending(triplet t)//判斷是否是按公升序排列的
status isdescending(triplet t)//判斷是否是按降序排列的
status max(triplet t, elemtype &e)
//max
status min(triplet t, elemtype &e)
//min
四、演算法和演算法分析
演算法(algorithm)是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每條指令表示乙個或多個操作。演算法具有的五個特性:
(1)有窮性 乙個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
(2)確定性 演算法中每一條指令必須有確切的含義,讀者理解時不會產生二義性。並且,在任何條件下,演算法只有惟一的一條執行路徑,即對於相同的輸入只能得出相同的輸出。
(3)可行性 乙個演算法是能行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
(4)輸入 乙個演算法有零個或多個的輸入,這些輸入取自於某個特定的物件的集合。
(5)輸出 乙個演算法有乙個或多個的輸出,這些輸出是同輸入有著某些特定關係的量。
演算法設計的要求:
(1)正確性 演算法應當滿足具體問題的需求,通常乙個大型問題的需求,要以特定的規格說明方式給出,而乙個實習問題或練習題,往往就不那麼嚴格,就目前多數是用自然語言描述需求,它至少應當包括對於輸入、輸出和加工處理等的明確的無歧義的描述。設計或選擇的演算法應當能正確的反映這種需求;否則,演算法的正確與否的衡量準則就不存在了。
」正確」一詞的含義在通常的用法中有很大差別,大體可分為以下四個層次:
a:程式不含語法錯誤
b:程式對於幾組輸入資料能夠得出滿足規格說明要求的結果
c:程式對於精心選擇的典型、苛刻而帶有刁難性幾組輸入資料能夠得出滿足規格說明要求的結果
d:程式對於一切合法的輸入資料都產生滿足規格說明要求的結果。
(2)可讀性(readability)演算法主要是為了人的閱讀與交流,其次才是機器執行。可讀性好有助於人對演算法的理解
(3)健壯性(robustness)當輸入資料非法時,演算法也能適當地做出反應或進行處理,而不會產生莫名其妙的輸出結果。並且,處理出錯的方法應是返回乙個表示錯誤或錯誤性質的值,而不是列印錯誤資訊或異常,並中止程式,以便在更高的抽象層次上進行處理
(4)效率與低儲存量需求 通俗的說,效率指的是演算法執行的時間。對於同乙個問題如果有多個演算法可以解決,執行時間短的演算法效率高。儲存量需求指演算法執行過程中所需要的最大儲存空間。效率與低儲存量需求這兩者都與問題的規模有關。
[這是我看了資料結構書,之後自己總結的,也抄了很多書上的東西,若有不足或者錯誤之處,虛心接納]
資料結構 第一章 資料結構的基本概念
基本概念和術語 資料結構三要素 邏輯結構 非線性結構 儲存結構 運算 演算法與演算法評價 1.演算法對特定問題求解步驟的一種描述,它是指令的有限序列,其中的每條指令表示乙個或多個操作。演算法五大性質 2.程式程式是某種程式語言對演算法的具體實現。3.演算法的評價 好 演算法的定義 時間複雜度 語句頻...
第一章 資料的基本概念
注 區分測量的層次和資料的型別是十分重要的,因為對不同型別的資料將採用不同的統計方法來處理和分析。比如對於定類資料,通常計算出各類的頻數和頻率,計算其眾數和異眾比率,進行列聯表分析和卡方檢驗 對於定序資料,可以計算其中位數和四分衛數,計算等級相關係數等非引數分析 對於定距和定比資料還可以用更多的統計...
第一章 程式設計基本概念
1 計算機是一種具有內部儲存能力,由程式自動控制的電子裝置。2 當給出命令之後,計算機按指令順序自動進行操作,把這種可以連續執行的一條指令的集合稱為 程式 3 計算機只能接受和處理由0和1的 構成的二進位制指令或資料。把由高階語言編寫的程式稱為 源程式 把有二進位制 表示的程式稱為 目標程式 c源程...