通常意義上,我們將資料結構分為邏輯結構和儲存結構。
邏輯結構
幾種邏輯結構層次圖:
儲存結構
即如何把資料元素儲存到計算機的儲存器中
是把資料元素存放在一組連續的位址空間中,其資料間的邏輯關係和儲存關係相一致。
是把資料元素存放在任意的儲存單元裡,可連續可不連續。用乙個指標存放資料元素的位址,從而查詢資料元素位置。抽象資料型別(adt)
是指一組性質相同的值得集合及定義在此集合上的一些操作的總稱。
抽象:是指取出事物具有的普遍性的本質。它要求抽出問題的特徵而忽略非本質的細節,是對具體事物的乙個概括。
例如很多程式語言的整型,浮點型,字元型這些,指的就是資料型別。
在c語言中,按取值的不同,資料型別可以分為兩類:
adt的標準格式:
adt 抽象資料名
data
資料元素之間邏輯關係的定義
operation
操作endadt
1)有窮性。即每一步必須在又窮時間內完成。
2)確定性。無二義性。
3)可行性。程式可通過基本操作運算執行有限次來實現。
4)輸入。輸入通常用形參表示,被呼叫時從主函式輸入值。
5)輸出。無輸出的演算法沒有意義。
乙個演算法可以有零個或多個輸入,也可以有乙個或多個輸出。設計演算法要盡量提高效率,這裡的演算法即是指演算法的執行時間。
那麼如何度量乙個演算法的執行時間呢?
這就引出了演算法時間複雜度的概念
演算法的時間複雜度取決於問題的規模和待處理資料的狀態。
影響演算法時間代價的最主要因素是問題規模。問題規模一般用整數n表示,對於不同的問題n的含義不同。
顯然,n越大演算法的執行時間越長.那麼現在我們來看乙個例子初步理解演算法時間複雜度的運算牢記以上n所代表的意義,對接下來計算時間複雜度有很大的幫助。
//第一種演算法
int sum=
0,n=
100;
//執行1次
for(
int i=
0;i)//執行n+1次
//第二種演算法
int sum=
0,n=
100;
//執行1 次
sum=n*
(n+1)/
2;//執行1 次
綜上我們得:
第一種演算法執行了1+(n+1)+n=2n+2次
第二種演算法執行了1+1=2次
如果我們把迴圈看做乙個整體,忽略頭尾判斷的開銷,俺麼這兩個演算法就是n和1的差距此時你可能還不太理解,為什麼可以2n+2和2變成了n和1,不要著急,看下面的例子。
int s=
0,n=
100,x=0;
for(
int i=
0;i)}
此時,演算法包含兩個for迴圈巢狀,外層執行100次,那麼內層迴圈則執行1002次則該演算法執行次數為1+n+n2+n2+n2=3n2+n+1。
由函式的漸進增長我們忽略頭和尾那麼得到該演算法的時間複雜度為n2
。同理對於三階演算法:t(n)=o(n3)
在這裡我們展現了時間複雜度的表示方法。
演算法的時間複雜度:
t(n)=o(f(n)),
其中f(n)是問題規模n的某個函式。
表示隨問題規模n的增大,演算法的執行時間增長率和f(n)的增長率相同。通俗講就是(執行次數=時間)。
注意公式中t和o都為大寫,o()成為大o記法。計算時間複雜度攻略:
int i=1;
while
(i<=n)
分析該程式可知,每次i*3之後,就距離n更近一步,設有x個3相乘後的結果大於n,則退出迴圈。
此時得到:
3x = n ——>x=log3n因此得到該演算法的時間複雜度為o(log3n)。
常用的時間複雜度所耗費的時間從小到大依次是:
o(1) < o(logn) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)輕鬆做題務必牢記以上!!!
對於演算法時間複雜度的度量分為最好時間複雜度,最壞時間複雜度以及平均時間複雜度
注:嚴蔚敏c語言版的資料結構中。只討論最壞情況下的時間複雜度,即分析在最壞情況下,演算法執行的上界。
資料結構 資料結構緒論
資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...
資料結構 緒論
程式 資料結構 演算法 資料 對客觀事物的符號表示。資料元素 資料的基本單位,由若干個資料項組成。資料項是資料不可分割的最小單位。資料物件 性質相同的資料元素的集合,使資料的乙個子集。資料元素是相互之間存在一種或多種特定關係的資料元素的集合。預定義常量型別 函式結果狀態嗎 define true 1...
資料結構緒論
資料結構是一種抽象資料的過程,這種能力是任何工具都無法代替的。學習資料結構的目的 資料結構是計算機專業的基礎,它為幾乎所有的軟體設計的基礎。同時他也培養求解複雜問題的能力。那麼,什麼是資料結構呢,這個概念是很重要的,人月神話上有一段話,說人們往往喜歡將問題分解開來處理,但是這樣一來造成了對整個問題的...