一個數據元素中包含多個數據項;
線性表是數據結構中最簡單、最基本也是最常用的一種,它是線性結構的抽象,上文提到線性結構的特點是結構中的數據元素之間關系為一對一關系。也就是說數據元素是一個接一個的排序。
線性表定義:
線性表Linear List:由n(n>=0)個相同類型的數據元素構成的有限序列。記為L=(a1,a2,...,ai-1,ai,ai+1,...,an)。可使用下式表示:
L=(D,R)
其中,D是數據元素的有限集合,R是數據元素之間關系的有限集合。
線性表基本操作包括插入操作、刪除操作、查找、清空等。
線性表的分類
按線性表的元素結構分,可將線性表分為:
1、順序表:將線性表中的結點按邏輯順序依次存放在一組地址的存儲單元中;
2、鏈表
1)單向鏈表:鏈表的鏈接方向是單向,對鏈表的訪問要通過順序讀取從頭部開始;
2)雙向鏈表:其每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。
3)循環鏈表:其最后一個結點指向頭結點,形成一個環;從循環鏈表中的任何一個結點出發都能找到任何其他結點。
順序表
順序表(Sequence List)是在計算機內在中以數組的形式保存的線性表,是指用一組地址連續的存儲單元依次存儲數據元素的線性結構。
單鏈表
單鏈表(Singly Linked List),也稱單向鏈表,鏈表中的一種,其特點鏈接方向是意向的,對鏈表的訪問要通過順序讀取。在順序鏈表中元素之間緊密相連,為了表示兩個數據元素邏輯上的相鄰關系,除了存儲數據元素本身的信息外,還要存儲與其相鄰的下一數據元素的存儲地址信息,也就是指針信息,也叫引用域。數據元素信息和指針信息組成該數據元素的存儲映像,這就是節點(Node)。
數據域也可使用data表示,指針域使用next表示。
這樣線性表就通過每個結點的指針域形成了一根“鏈條”,也就是我們所說的“鏈表”。如果結點的引用域只存儲該節點直接后繼節點的指針域,則該鏈表稱為單鏈表(Singly Linked List)。
C#數據結構與算法揭秘一:數據結構和算法簡介
C#數據結構與算法揭秘二:順序表
C#數據結構與算法揭秘三:鏈表
C#數據結構與算法揭秘四:雙向鏈表和環形鏈表
C#數據結構與算法揭秘五:棧和隊列
C#數據結構與算法揭秘六:串和數組
C#數據結構與算法揭秘七:樹形結構和圖狀結構
C#數據結構與算法揭秘八:二叉樹的存儲結構、源代碼實現、遍歷方法
C#數據結構與算法揭秘九:哈夫曼樹
C#數據結構與算法揭秘十:圖的結構
C#數據結構與算法揭秘11:圖的基本源代碼
......
集合:
集合類時為保障數據的安全存儲和訪問設計的,常見的集合類如下:
ArrayList 使用大小可按需動態增加的數組實現System.Collections.Ilist 接口。
SortedList 表示鍵/值對的集合,這些鍵/值對按鍵排序並可按照鍵和索引訪問。
Queue 表示對象的先進先出集合。
Stack 表示對象簡單的后進先出集合。
HashTable 表示鍵/值對的集合,這些鍵/值對根據鍵的哈希代碼進行組織。
集合類實現的接口如下:
Icollection 定義所有非泛型集合的大小,枚舉數和同步方法。
Icomparer 公開一種比較兩個對象的方法。
IEnumerable 公開枚舉數,該枚舉數支持雜器在非泛型集合上進行簡單迭代。
IList 表示可按照對象單獨訪問的非泛型集合。
IDictionary 表示鍵/值對的非通用集合。
IDictionaryEnumerator 枚舉非泛型字典的元素。