基本概念之資料結構

2022-03-12 00:46:29 字數 3477 閱讀 9467

什麼是資料結構

目前沒有官方的定義。

思考:解決問題方法的效率,跟什麼有關呢?

① 解決問題方法的效率,跟資料的組織方式有關

例1:如何在書架上擺放書籍?

首先這個問題是不科學的,沒有告訴書架的是什麼樣子的。

解決方法:

操作2:怎麼找到某本指定的書?

方法2:按照書名的拼音字母順序排放

方法3:把書架劃分成幾塊區域,每塊區域指定擺放某種類別的圖書,在每種類別內,按照書名的拼音字母順序排放

操作2:怎麼找到某本指定的書?

問題來了:空間如何分配?類別應該分多細?

② 解決問題方法的效率,跟空間的利用效率有關。

例2:寫程式實現乙個函式printn,使得傳入乙個正整數為n的引數後,能順序列印從1到n的全部正整數。

兩種不同的實現方式:

迴圈實現的函式:                       

void printn(int

n)

}

1

遞迴實現的函式:

2void printn(int

n)7 }

如何比較這兩個函式的執行效率呢?不妨將n=100,1000,10000,100000,......

測試程式:

#includevoid printn(int

n);int

main()

當n=100時:(經測試,n=10,100,1000,兩個函式的顯示都是正常的)

當n=100000時,顯示出問題:

迴圈實現的函式執行正常,但是遞迴實現的函式無法執行。

遞迴函式雖然簡單、容易理解,但是對空間的佔用率大,一般電腦不會選擇執行遞迴的程式,當它將所有能利用的空間占用後,就直接爆掉,所以在n等於100000時,沒有任何輸出。

③ 解決問題方法的效率,跟演算法的巧妙程度有關

例3:寫程式計算給定多項式在給定點x處的值。f(x)=a0+a1x+...+an-1xn-1+anxn

最傻最直接的演算法:對標準多項式的乙個直接翻譯

1

double f(int n,double a,doublex)7

return

p;8 }

這種寫法比較low,專業處理方式:利用結合律,將函式的形式改成:f(x)=a0+x(a1+x(...(an-1+x(an))))

處理這個問題的標準程式:

1

double f(int n,double a,doublex)7

return

p;8 }

憑什麼說第二個函式比第乙個函式要好呢?——當然是因為第二個函式的執行效率高啦!

c語言裡面提供了clock()這個函式用於測試。

clock():捕捉從程式開始執行到clock()被呼叫所耗費的時間。這個時間單位是clock tick,即「時鐘打點」。

配套的常數clk_tck:機器時鐘每秒所走的時鐘打點數。【不同的機器可能不一樣】

常用的測試模板

#include#include

//需要引入這個標頭檔案clock_t start,stop;

/* clock_t是clock()函式返回的變數型別 */

double

duration;

/* 記錄被測函式執行時間,以秒為單位 */

intmain()

下面我們寫程式計算多項式

在給定點x=1.1處的值f(1.1)

測試程式:

1 #include2 #include3 #include4

clock_t start,stop;

5double

duration;

6#define maxn 10 //

多項式最大項數,即多項式階數+1

7double f1(int n,double a,double

x);8

double f2(int n,double a,double

x);9

intmain()

3132

33double f1(int n,double a,double

x)39

return

p;40

} 41

double f2(int n,double a,double

x)47

return

p;48 }

結果:

原因:兩個函式的執行速度太快,都不滿足乙個tick,clock函式根本捕捉不到兩個函式的區別

解決方案:讓被測函式重複執行充分多次,使得測出的總的時鐘打點間隔充分長,最後計算被測函式平均每次執行的時間即可!

1

......

2#define maxk 1e7 //

被測函式最大重複次數

3......

4int

main()

16 ......

結果:第乙個比第二個函式慢了接近乙個數量級

所以到底什麼是資料結構?

描述資料結構:抽象資料型別(adt)

抽象:描述資料型別的方法不依賴與具體實現

只描述資料物件集和相關操作集「是什麼」,並不涉及「如何做到」的問題。

例4:「矩陣」的抽象資料型別定義

型別名稱:矩陣(matrix)

資料物件集:乙個m×n的矩陣am×n=(aij)(i=1,...,m;j=1,...,n)由m×n個三元組構成,其中a是矩陣元素的值,i是元素所在的行號,j是元素所在的列號。

操作集:對於任意矩陣a、b、c資料matrix,以及整數i,j,m,n

第乙個抽象點:element

type:這樣資料在進行各種處理時可以不必考慮資料的具體型別,可用乙個通用的返回型別

第二個抽象點:定義的matrix,可以不用關心資料的儲存結構是二維陣列還是一維陣列還是十字鍊錶

第三個抽象點:進行矩陣加法時,不關心按行加還是按列加,具體用什麼語言實現也不用考慮

資料結構一之基本概念

一 列舉法解決問題 q a b c 1000,且a 2 b 2 c 2 a,b,c為自然數 如何求出所有abc可能的組合?a a 0,b 0,c 0 1000,利用三層巢狀。具體程式如下 import time start time time.time for a in range 1000 for...

資料結構總結 之 基本概念

資料 data 資料元素 data element 資料項 data item 資料物件 data object 資料結構 data structure 資料的邏輯結構 logical structure 分類 線性結構 線性表 非線性結構 樹 圖 或網路 資料的儲存結構 物理結構 physical...

資料結構基本概念

是指相互之間具有 存在 一定聯絡 關係 的資料元素的集合。元素之間的相互聯絡 關係 稱為邏輯結構。資料元素之間的邏輯結構。元素之間的邏輯結構有四種基本型別 集合 結構中的資料元素除了 同屬於乙個集合 外,沒有其它關係。線性結構 結構中的資料元素之間存在一對一的關係。樹型結構 結構中的資料元素之間存在...