資料結構緒論

2022-01-29 09:17:11 字數 3911 閱讀 7646

著名的計算機科學家圖靈將獲得者n.wirth(沃思)教授給出了乙個著名的公式:程式 = 演算法 + 資料結構。可見演算法和資料結構在程式中的重要地位。

資料:資料是描述客觀事物的數字,字元,以及能輸入機器且能被處理的各種符號集合;資料是資訊的載體,是對資訊的一種符號表示,內被計算機識別,儲存和加工處理。

資料元素:資料元素是資料的基本單位,是資料集合的個體。(資料元素又可稱為元素,結點頂點,記錄等)乙個資料元素由若干個資料項組成,資料項是有獨立含義的最小單位。

資料物件:資料物件是性質相同的資料元素的集合,是資料的乙個子集。

綜上,資料概念可以歸納如下:

資料特點:

可被計算機接收,加工(能被處理)。

資料構成:

資料元素:組成資料的基本單位(資料集和的個體)

資料物件:性質相同的資料元素的集合(資料集合的子集)

資料結構:資料機構是相互間存在一種或多種特定關係的資料元素集合,主要研究程式設計中計算機所操作的物件以及他們之間的關係和運算。

可以將資料結構概括為三個方面:資料的邏輯結構,資料的儲存結構,資料的運算集合(基本操作)

資料的邏輯結構是指資料元素之間邏輯關係的描述,分為四種基本結構:

集合結構:結構中的資料元素之間除了同屬於乙個集合的關係外,外任何其他關係

線性結構:結構中的資料元素之間存在一對一的線性關係

樹狀結構:結構中的資料元素之間存在一對多的層次關係

網狀結構(圖狀結構):結構中的資料元素存在多對多的任意關係

因為集合中關係只有屬於和不屬於這兩種的簡單關係,所以邏輯結構可概括如下:

線性結構:線性表,棧,隊,字串,陣列,廣義表

非線性結構:樹,圖

又稱為物理結構,是邏輯結構在計算機中的儲存映像,是資料結構在計算機中的表示;是邏輯結構在計算機中的實現,包括資料元素的表示和關係的表示。

邏輯結構與儲存結構的關係為:

儲存結構是邏輯關係的映像與元素本身的映像。

邏輯結構是資料結構的抽象,儲存結構是資料結構的實現,兩者總和起來建立了資料元素之間的結構關係。

儲存結構的基本組織方式有順序儲存結構和非順序儲存結構(鏈式儲存結構)

順序儲存結構把邏輯上相鄰的元素儲存在物理位置相鄰的儲存單元中。他通常借助於陣列來實現。

鏈式儲存結構對邏輯上相鄰的元素不要求其物理位置相鄰,元素間的邏輯關係通過附設的指標欄位來表示。

按某種邏輯關係組織起來的一批資料,按一定的映像方式把它們存放在計算機的儲存器中,並在這些資料上定義乙個運算的集合。也就是說資料的運算是定義在資料結構上的操作,如建立,插入,刪除,查詢等。每種資料結構都有一種運算的集合。

1.有限性(有窮性):乙個演算法必須在有限的時間,步驟內結束。

2.確定性:演算法的每一步必須有確定含義,無二義性。

3.可行性:原則上精確進行,造作可通過已實現的基本運算執行有限次而完成。

4.輸入:乙個演算法具有0個或多個輸入。

5.輸出:乙個演算法具有乙個或多個輸出。

在設計演算法時,要考慮以下幾個因素:

正確性:演算法的執行結果應當滿足預先規定的功能和效能要求

可讀性:乙個演算法應當思路清晰,層次分明,簡單明瞭,易讀易懂

健壯性(可讀性):乙個演算法應有對非法輸入的抵抗能力。當輸入不合法資料時應能做適當處理,避免不良後果

高效性:好的演算法能有效的使用儲存空間並且具有較高的時間效率

演算法可以用不同方法來描述,常用描述演算法的語言是類語言。類語言也就是偽**,介於高階語言和自然語言之間。它比較接近高階語言,忽略了高階語言中一些嚴格的語法規則和語法細節。

在進行演算法描述,應注意以下要點:

1.加上必要的注釋

2.避免函式返回值隱含說明

c語言規定函式,引數,外部變數不加型別說明時則隱含為int型別。

3.預定義常量和型別

程式中常用到的常量(如true, false等)應用巨集定義。

4.使用有意義的函式名和變數名

5.避免可能出現的二義性表達

6.規範多分支轉向

switch語句中的case語句和default語句後應使用break語句,使之規範跳出switch語句。

7.簡化輸出輸出表述

8.注意不同退出語句之間的區別

return:用於函式結束

break:用於結束迴圈或跳出switch語句

continue:用於結束本輪迴圈,進入下一輪迴圈

exit:控制退出程式

演算法的效能評價通常從演算法的時間複雜度和空間複雜度兩方面評價。

演算法的時間複雜度是該演算法的時間度量,記作:  t(n) = o(f(n)) 。它表示隨問題規模n的增大,演算法的執行時間的增長率和f(n)的增長率相同,也稱作演算法的漸進時間複雜度(以o表示),簡稱時間複雜度。(通常將演算法的時間複雜度和漸進時間複雜度不予區分)

注意: t(n) = o(f(n)) 中的f(n)一般是演算法中頻度最大的語句頻度(該語句在乙個演算法中重複執行的次數)。

在計算演算法的時間複雜度時,還要考慮一種情況,就是程式所給的引數不確定,每種情況的演算法的時間複雜度也不一致,因此就要考慮它的最好情況和最壞情況,即耗時最長和耗時最短。大家都知道短板效應,乙個桶能裝多大水取決於它最短的板子,我們**時間複雜度也是一樣的。在沒有特別說明的情況下,討論的時間複雜度均是最壞情況下的時間複雜度。最壞情況下的時間複雜度稱為最壞時間複雜度。

還有乙個是平均時間複雜度,平時用到的不多。平均時間複雜度是指所有可能的輸入例項均已等概率出現的情況下,演算法的期望執行時間。

我們常用的演算法時間複雜度有以下7種:n01

0112

1224

8424

816641638

2464

512256416

64256

5096

65536532

1601024

32768

2147483648

演算法的空間複雜度s(n)定義為該演算法所耗費的儲存空間的數量級,它是問題規模n的函式,記作: s(n) = o(f(n)) 。若演算法的執行時間所需要的輔助空間相對於輸入資料量而言是乙個常數,則稱這個演算法為原地工作,輔助空間為o(1).

目的:為了是程式具有合理的結構,保證程式的正確性而規定的一套程式設計的方法。

構成單元:三種基本控制結構,即順序結構,選擇結構,重複結構。利用三種結構,通過組合的方法產生需要的程式控制結構。

方法:結構化程式的設計概念是e.w.dijkstra在2023年體術,他強調從程式結構和風格上來研究程式設計問題。同常稱為自頂向下法或逐步求精法。

的設計思想;

一是"自頂向下,逐步求精"

二是"獨立功能,乙個入口,乙個出口"的模組化結構;

三是"僅用三種基本控制結構"的設計元素。

根據結構化程式設計思想,將乙個大人物分解成若干個功能獨立的子任務,故程式可有乙個主函式和若干個子函式構成。那麼乙個完整的,可執行的c程式檔案一般結構如下:

[包含的標頭檔案語句#include]

[巨集定義語句#define]

[自定義型別語句typedef]

[所有子函式的原型說明語句]

[所有子函式的定義]

[主函式main]

舉個例子:

//

標頭檔案

#include //

巨集定義

#define m 10

//自定義型別

typedef int

intnum;

//子函式原型宣告

int toadd(int i, int

j);//

子函式定義

int toadd(int i, int

j)//

主函式

intmain()

thats all  xd

資料結構 資料結構緒論

資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...

資料結構 緒論

程式 資料結構 演算法 資料 對客觀事物的符號表示。資料元素 資料的基本單位,由若干個資料項組成。資料項是資料不可分割的最小單位。資料物件 性質相同的資料元素的集合,使資料的乙個子集。資料元素是相互之間存在一種或多種特定關係的資料元素的集合。預定義常量型別 函式結果狀態嗎 define true 1...

資料結構緒論

資料結構是一種抽象資料的過程,這種能力是任何工具都無法代替的。學習資料結構的目的 資料結構是計算機專業的基礎,它為幾乎所有的軟體設計的基礎。同時他也培養求解複雜問題的能力。那麼,什麼是資料結構呢,這個概念是很重要的,人月神話上有一段話,說人們往往喜歡將問題分解開來處理,但是這樣一來造成了對整個問題的...