由於關於資料結構的概念和知識點過於繁亂,所以我今天就將其理了理,然後概括了一下本章我認為較重要的一些。
我們都知道計算機主要用於數值計算,而我們的資料結構主要研究非數值計算問題(大多為生活中遇到的問題)。
上圖就是它們的基本關係,關於其基本概念什麼的,在這裡就不多說了。
其中儲存結構又叫做物理結構,其中的順序結構通常借助c語言中的陣列型別來描述,而鏈式結構是借助c語言中的指標型別來描述的。
抽象資料型別:
抽象資料型別=資料的邏輯結構+抽象運算
定義格式:(主要使用類c語言)
adt 抽象資料型別名adt 抽象資料型別名
舉個複數例子:(類c語言)
具體的**實現在資料結構課本第十頁有詳細的講解,在這裡主要就是說一下&符號的作用,adt complex
s=assign(&c,v1,v2)
初始條件:空的複數c已存在
操作結果:構造複數c,r1,r2分別被賦以引數v1,v2的值。
destroy(&c)
初始條件:複數c已存在
操作結果:複數c已銷毀。
}adt complex
在基本操作的定義格式:
這裡的參數列:1.賦值引數:只為操作提供輸入值。基本操作名(參數列)
初始條件:(初始條件描述)
操作結果:(操作結果描述)
2.引用引數:以&開頭,除可提供輸入值外,還將返回操作結果。
比如將圖形a放大十倍,我們可以再用乙個a』來返回這個放大後的a,然而由於放大後的a仍然是乙個圖形,所以我 們還可以用a來返回放大後的,只需在其前面加乙個&即可。
本章演算法裡面主要是乙個時間和空間的複雜度。
時間複雜度:
時間複雜度是由巢狀最深層語句的頻度決定的。
例1:
其時間複雜度為t(n)=o(logn)for(i=0;i其時間複雜度為(n*(n+1)*(n+2))/6,即t(n)=o(n*n*n),這個需要記住(取最高次冪,將低次冪以及最高次冪的係數一併去掉)。
例2:for(i=1;i<=n;i++)
i=i*2;
因為:
另外對於語句執行1次;i=2
語句執行2次;i=4(2的平方)
語句執行3次;i=8(2的3次方)
語句執行m次;i=2的m次方
2的m次方<= n
m<=logn
for(i=0;i其時間複雜度為t(n)=o(n+1),之所以為n+1,是因為當i=n-1時,i++會繼續執行,到i=n,才進行判斷不滿足條件i最好最壞複雜度: 此外
for(i=0;i這個時間複雜度取決於a[i][j]的位置,有可能一次就查詢成功了(t(n)=o(1)),也有可能查詢完所有的都沒有成功(t(n)=o(n*n))
最好時間複雜度:t(n)=o(1)
最壞時間複雜度:t(n)=o(n*n)
一般總是考慮在最壞情況下的時間複雜度,以保證演算法的執行時間不會比它更長。
對於複雜的演算法可以將它分成幾個容易估算的部分,然後利用加法和乘法法則,計算演算法的時間複雜度
a.加法規則:
t(n)=t1(n)+t2(n)=o(f(n))+o(g(n))=o(max(f(n),g(n)) //取最大值
b.乘法法則;
t(n)=t1(n)*t2(n)=o(f(n))*o(g(n))=o(f(n)*g(n)) //直接相乘
時間複雜度的比較:(複雜度從小到大)
常量階o(1)《對數階o(logn)《線性階o(n)《線性對數階o(n*logn)《平方階o(n*n)《立方階o(n*n*n)空間複雜度:
例:逆序輸出陣列中的元素
1.空間複雜度s(n)=o(1),原地工作
for(i=0;i2.空間複雜度s(n)=o(n),因開闢了新的陣列,占用了空間
for(i=0;i
for(j=0;j
理解資料結構
最近在學習各種資料結構,於是就在想,為什麼我們需要資料結構呢?為什麼要設計這麼多資料結構?資料結構到底解決了我們什麼樣的問題?我們提到 資料結構 時,一般是指電腦科學中的乙個概念,但是從本質上講,資料結構應該是指對資料的一種組織方式。既然如此,我們沒必要非在電腦科學領域中討論 概念本身,把它放在其它...
資料結構 資料結構緒論
資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...
大話資料結構 資料結構緒論
資料 描述客觀事物的符號,是計算機可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。有兩個要素 資料元素 組成資料的基本單位,也就是一條條資料記錄。資料項 資料中不可分割的最小單位。例子 資料 人類 資料元素 人 資料項 眼耳口鼻 資料結構 相互之間存在一種或多種關係的資料元素的集合。...