Data Structures 資料結構基礎

2022-02-01 21:50:44 字數 3735 閱讀 2089

用計算機解決乙個具體問題時,一般要經過下列幾個步驟:首先要從具體問題抽象出乙個適當的數學模型,然後設計乙個解此數學模型的演算法,最後編出程式、進行測試、調整直至得到最終解答。尋求數學模型的實質是分析問題、從中提取操作的物件,並找出這些操作物件之間含有的關係,這實際上就是分析資料結構。資料結構是研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等等的學科。

資料結構

資料(data):是對客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被電腦程式處理的符號的總稱。

資料元素(data element):是資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。有時乙個資料元素有若干個資料項(data item)組成。資料項是資料的不可分割的最小單位。

資料結構(data structure): 是相互之間存在一種或多種特定關係的資料元素的集合。元素之間的關係稱為結構

四類基本結構:

集合:結構中的資料元素之間除了「同屬於乙個集合」的關係外,別無其他關係。

結性結構:結構中的資料元素之間存在乙個對乙個的關係。

樹形結構:結構中的資料元素之間存在乙個對多個的關係。

圖形結構或網狀結構:結構中的資料元素之間存在多外對多個的關係。

資料結構中元素之間的關係描述的是資料元素之間的邏輯關係,稱為資料的邏輯結構

資料結構在計算機中的映象稱為資料的物理結構,又稱儲存結構。它包括資料元素的表示和關係的表示。

資料元素之間的關係在計算機中有兩種不同的映象:順序映象和非順序映象,由此得出兩種不同的儲存結構:順序儲存結構和鏈式儲存結構

順序映象的特點是借助元素在儲存器中的相對位置來表示資料元素之間的邏輯關係。非順序映象的特點是借助指示元素儲存位址的指標(pointer)表示資料元素之間的邏輯關係。

常用的資料結構有:線性表、棧和佇列、串、陣列和廣義表、樹、圖等。

線性表

線性結構的特點是:

在資料元素的非空有限集合中,

線性表是最常用且最簡單的一種資料結構。簡言之,乙個線性表是n個資料元素的有限序列,它的長度可以根據需要增長或縮短,即對線性表的資料元素不僅可以進行訪問,還可進行插入和刪除等。

1.    線性表的順序表示

線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。

假設線性表的每個元素占用l個儲存單元,並以所佔的第乙個單元的儲存位址作為資料元素的儲存位置。則線性表的第i+1個資料元素的儲存位置和第i個資料元素的儲存位置之間滿足如下關係:(i+1)的位置= i 位置+l.  也就是說線性表的順序表示用儲存位置相臨表示了元素之間的關係,因此可以隨機訪問任一元素。缺點是:在插入或刪除時要移動大量元素。

高階程式語言中資料型別具有隨機訪問的特性,因此通常都用資料來描述資料結構中的順序儲存結構。由於線性表長度可變,且所需最大儲存空間隨問題不同而不同,c語言中可用動態分配的一維陣列描述。

2.    線性表的鏈式表示

1.    單鏈表

線性表的鏈式儲存結構特點是用一組任意的儲存單元儲存線性表的資料元素(不一定是連續儲存單元),為了表示每個資料元素與其前驅或後繼的邏輯關係,元素除要儲存本身資訊外,還要儲存乙個指示其直接前驅或後繼的關係,這兩部分資訊組成元素的儲存映象,稱為結點(node)。儲存資料元素資訊的域稱為資料域;儲存直接後繼儲存位置的域為指標域。指標域中儲存的資訊稱做指標或鏈。n個結點鏈結成乙個鍊錶,即為線性表的鏈式儲存結構。由於只有乙個指標域,又稱為線性鍊錶或單鏈表。單鏈錶用指標表示了元素之間的關係,指標為資料元素的邏輯關係的映象。

優點:在插入或刪除元素時只要改變指標即可。

缺點:只有乙個指示後繼的指標,查詢比較元素要從表頭開始,不能隨機訪問。

2.    迴圈鍊錶

迴圈鍊錶特點是最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。從表中任何乙個結果出發均可以找到表中的其它結點。

3.    雙向鍊錶

在雙向鍊錶的結點中有兩個指標域,其一指向直接後繼,另一指向直接前驅。解決單鏈表只能單向比較查詢

棧和佇列

棧和佇列都是線性結構,都是線性表,但棧和佇列的基本操作是線性表的子集,是操作受限的線性表。

棧(stack)是限定僅在表尾進行插入或刪除操作的線性表。對棧來說,表尾有其特殊含義,稱為棧頂(top), 表頭端稱為棧底(bottom)。不含元素的空表稱為空棧。

棧的修改是按後進先出的原則進行的,因此棧又稱為後進先出(last in first out)的線性表。

棧的典型應用是實現遞迴子方法呼叫。別外還有括號匹配的檢驗、行編輯程式、迷宮求解等等。

佇列

佇列(queue)是一種先進先出(first in first out 縮寫fifo) 線性表,它只允許在表的一端進行插入,而在另一端刪除元素。最早進入佇列的元素最早離開,允許插入的一端叫做隊尾(rear), 允許刪除的一端則稱為隊頭(front)。佇列的乙個典型應用是作業系統中的作業排隊。

字串

陣列和廣義表

樹和二叉樹

樹型結構是一類重要的非線性資料結構。

樹(tree)是n(n>=0)個結點的有限集合。在任意一棵非空樹中:有且僅有乙個特定的稱為樹的結點;當n>1時,其餘結點可分為m(m>0)個互不相交的有限集t1,t2,…tm, 其中每個集合本身又是一查樹,並且稱為根的子樹

樹的結點包含乙個資料元素及若干指向其子樹的分支。結點擁有的子樹數稱為結點的度

度為0的結點稱為葉子或終端結點。度不為0的結點稱為非終端結點或分支結點。除根結點外,分支結點也稱為內站結點結的度是樹內各結點的度的最大值。結點的子樹稱為該結點的孩子(child)。相應地,該結點稱為孩子的雙親(parent)。同乙個雙親的孩子之間互稱兄弟(sibling)結點的祖先是從根到該結點所經分支上的所有結點。反之,以某結點為根的子樹中的任一結點都稱為該結點的子孫

結點的層次從根開始定義起,根為第一層,根的孩子為第二層。若某結點在第l層,則其子樹的根就在第l+1層。其雙親在同一層的結點互為堂兄弟。樹中結點的最大層次為結的深度(depth)或高度

如果將樹中結點的各子樹看成從左至右是有次序的(即不能互換),則稱該樹為有序樹,否則稱為無序樹。在有序樹中最左邊的子樹的根稱為第乙個孩子,最右邊的稱為最後的乙個孩子。

森林(forest)是m(m>=0)棵互不相交的樹的集合。對樹中每個結點而言,其子樹的集合即為森林。

在樹型結構中,資料元素之間有著明顯的層次關係,並且每一層上的資料元素可能和下一層中多個元素相關,但只能和上一層中乙個元素相關。

[data structures] 線性表

參考《資料結構》

Data Structures(一)順序表

線性表 在資料元素的非空有限集合中,除第乙個元素無直接前驅 最後乙個元素無直接後繼,集合中其餘每個資料元素都有唯一直接前驅唯一直接後繼。線性表有順序儲存結構和鏈式儲存結構兩種儲存方式。含有大量型別相同記錄的線性表稱為檔案或資料物件。但是乙個線性表中的資料元素必須屬於同乙個資料物件。因此線性表中相鄰元...

Data Structures 尋找第k大

對於bst,無壓力的可以,所以無需贅言,請見 1 program bst kthfind input,output 2 type point node 3 node record4 data,leftsum,rightsum longint 5 left,right point 6 end 7 va...

Data Structures 06 單鏈表面試題

獲取到單鏈表中的有效節點個數 不包括頭節點 public static intgetlength heronode head int length 0 heronode cur head.next while cur null return length 獲取到單鏈表中的有效節點個數 public ...