1.邏輯結構與物理結構
按照視點的不同,我們把資料結構分為邏輯結構和物理結構。
邏輯結構:
邏輯結構是指資料物件中資料元素之間的相互關係。邏輯結構分為以下四種:
集合結構:
集合結構中的資料元素除了同屬於乙個集合外,它們之間沒有其他關係。各個資料元素是「平等的」,它們的共同屬性是「同屬於乙個集合」。
線性結構:
線性結構中的資料元素之間是一對一的關係。
樹形結構:
樹形結構中的資料元素存在一種一對多的層次關係。
圖形結構:
圖形結構的資料元素是多對多的關係。
我們在用示意圖來表示資料的邏輯結構時,要注意兩點:
物理結構:
物理結構是指資料的邏輯結構在計算機中的儲存形式。
資料的儲存結構應正確反映資料元素之間的邏輯關係,這才是最為關鍵的,任何儲存資料元素之間的邏輯關係,是實現物理結構的重點和難點。
資料元素的儲存結構形式有兩種:
順序儲存結構:
順序儲存結構是把資料元素存放在位址連續的儲存單元裡,其資料間的邏輯關係和物理關係是一致的。
鏈式儲存結構:
鏈式儲存結構是把資料元素存放在任意的儲存單元裡,這組儲存單元可以是連續的,也可以是不連續的。資料元素的儲存關係並不能反映其邏輯關係,因此需要用乙個指標存放資料元素的位址,這樣通過位址就可以找到相關聯資料元素的位置。
顯然,鏈式儲存就靈活多了,資料存在**不重要,只要有乙個指標存放了相應的位址就能找到它了。
2.抽象資料型別
資料型別:
資料型別是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱。
在c語言中,按照取值的不同,資料型別可以分為兩類:
3.演算法的特性
演算法具有五個基本特性:輸入、輸出、有窮性、確定性和可行性。
有窮性:指演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。
確定性:演算法的每一步驟都具有確定的含義,不會出現二義性。演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果。演算法的每個步驟被精確定義而無歧義。
可行性:演算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。
4.線性表
線性表(list):零個或多個資料元素的有限序列。
如果用數學語言來進行定義,可如下:
若將線性表記為(a1,a2,…,ai-1,ai,ai+1,…,an),則表中ai-1領先於ai,ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。當i=1,2,…,n-1時,ai有且僅有乙個直接後繼,當i=2,3,…,n時,ai有且僅有乙個直接前驅。
線性表的順序儲存結構的優缺點:
優點:
缺點:
單鏈表結構與順序儲存結構優缺點:
儲存分配方式:
時間效能能:
查詢:
插入和刪除:
空間效能:
靜態鍊錶優缺點:
優點:在插入和刪除操作時,只需要修改游標,不需要移動元素,從而改進了在順序儲存結構中的插入和刪除操作需要移動大量元素的缺點。
缺點:
棧的鏈式儲存結構:
棧的鏈式儲存結構檢查為鏈棧。
把棧頂放在單鏈表的頭部,通常對於鏈棧來說,是不需要頭結點的。
對比一下順序棧與鏈棧,它們在時間複雜度上是一樣的,均為o(1)。對於空間效能,順序棧需要事先確定乙個固定的長度,可能會存在記憶體空間浪費的問題,但它的優勢是訪問時定位很方便,而鏈棧則需要每個元素都有指標域,這同時也增加了一些記憶體開銷,但對於棧的長度無限制。所以,它們的區別和線性表中討論的一樣,如果棧的使用過程中元素變化不可預料,有時很小,有時非常大,那麼最好是用鏈棧,反之,如果它的變化在可控範圍內,建議使用順序棧會更好一些。
6.佇列
佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
佇列是一種先進先出(first in first out)的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。
迴圈佇列定義:
解決假溢位的辦法就是後面滿了,就再從頭開始,也就是頭尾相接的迴圈。我們把佇列的這種頭尾相接的順序儲存結構稱為迴圈佇列。
7.樹樹(tree)是n(n》0)個結點的有限集。n=0時稱為空樹。在任意一課非空樹中:
結點分類:
樹的結點包含乙個資料結構及若干指向其子樹的分支。結點擁有的子樹數稱為結點的度(degree),度為0的結點稱為葉節點(leaf)或終端結點;度不為0的結點稱為非終端結點或分支結點。除根結點之外,分支結點也稱為內部結點。樹的度是樹內各結點的度的最大值。
結點的層次(level)從根開始定義起,根為第一層,根的孩子為第二層。若某結點在第l層,則其子樹的根就在第l+1層。樹中結點的最大層次稱為樹的深度(depth)或高度。
如果將樹中結點的各子樹看成從左至右是有次序的,不能互換的,則稱該樹為有序樹,否則稱為無序樹。
充分利用順序儲存和鏈式儲存結構的特點,完全可以實現對樹的儲存結構的表示。雙親表示法、孩子表示法、孩子兄弟表示法。
二叉樹:
二叉樹(binary tree)是n(n》0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由乙個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。
滿二叉樹的特點:
《大話資料結構》
函式的漸進增長 我們現在來判斷一下,兩個演算法a和b哪個更好。假設兩個演算法的輸入規模都是n,演算法a要做2n 3次操作,你可以理解為先有乙個n次的迴圈,執行完成後,再有乙個n次迴圈,最後有三次賦值或運算,共2n 3次操作。演算法b要做3n 1次操作,你覺得它們誰更快呢 準確來說,答案是不一定的 當...
《大話資料結構》
常見的時間複雜度 常見的時間複雜度如下圖所示 常用的時間複雜度所耗費的時間從小到大依次是 o 1 o logn o n o nlogn o n o n 三次方 o 2 n次方 o n!o n n次方 我們前面已經談到了 o 1 常數階 o logn 對數階 o n 線性階 o n 平方階等,至於o ...
《大話資料結構》
線性表 線性表,從某種就能感覺到,是具有像線一樣的性質的表。在廣場上,有很多人分散在各處,當中有些是小朋友,可也有很多大人,甚至還有不少寵物,這些小朋友的資料對整個廣場人群來說,不能算是線性表的結果。但像剛才提到的那樣,乙個班級的小朋友,乙個跟著乙個排著隊,有乙個打頭,有乙個收尾,當中的小朋友,每乙...