C#之資料結構(上)
摘要:
資料結構
一般將資料結構分為兩大類:
線性資料結構和非線性資料結構。
線性資料結構有:
線性表、棧、佇列、串、陣列和檔案;
非線性資料結構有:
散列表、樹和圖。
線性表
線性表的邏輯結構是n個數據元素的有限序列:
(a1, a2 ,a3,…an)
n為...
資料結構
一般將資料結構分為兩大類:
線性資料結構和非線性資料結構。
線性資料結構有:
線性表、棧、佇列、串、陣列和檔案;
非線性資料結構有:
散列表、樹和圖。
線性表
線性表的邏輯結構是n個數據元素的有限序列:
(a1, a2 ,a3,…an)
n為線性表的長度(n≥0),n=0的表稱為空表。
資料元素呈線性關係。必存在唯一的稱為“第一個”的資料元素;必存在唯一的稱為“最後一個”的資料元素;除第一個元素外,每個元素都有且只有一個前驅元素; 除最後一個元素外,每個元素都有且只有一個後繼元素。
所有資料元素在同一個線性表中必須是相同的資料型別。

線性表按其儲存結構可分為順序表和連結串列。用順序儲存結構儲存的線性表稱為順序表;用鏈式儲存結構儲存的線性表稱為連結串列。
將線性表中的資料元素依次存放在某個儲存區域中,所形成的表稱為順序表。一維陣列就是用順序方式儲存的線性表。

棧(Stack)也是一種特殊的線性表,是一種後進先出(LIFO)的結構。
棧是限定僅在表尾進行插入和刪除運算的線性表,表尾稱為棧頂(top),表頭稱為棧底(bottom)。
棧的物理儲存可以用順序儲存結構,也可以用鏈式儲存結構。

佇列(Queue)是限定所有的插入只能在表的一端進行,而所有的刪除都在表的另一端進行的線性表。
表中允許插入的一端稱為隊尾(Rear),允許刪除的一端稱為隊頭(Front)。
佇列的操作是按先進先出(FIFO)的原則進行的。
佇列的物理儲存可以用順序儲存結構,也可以用鏈式儲存結構。

C#中的集合類

Array
陣列為資料結構中的順序表
MyArray[0], MyArray[1], MyArray[2]…………MyArray[6]
MyArray [0] = 1
提供對陣列的相關操作
Array是抽象的基類,提供 CreateInstance 方法來建立陣列
Array obj = Array.CreateInstance(typeof(string),10);
Array obj1 = Array.CreateInstance(typeof(string),2,3,4);
陣列的侷限性:
元素個數固定,且必須在建立陣列時知道元素個數
元素型別必須相同
只能通過索引訪問陣列元素
舉幾個例子:
使用Array對兩個陣列進行合併操作:

向陣列中追加資料物件,若位置不足,請擴容後追加

使用Array判斷一個數組是否在另外一個數組中

寫一個方法傳入一個數組,要求先反轉陣列,然後對陣列進行排序,顯示每個階段的結果

ArrayList
有序的物件列表 順序結構.
ArrayList 很類似陣列.
ArrayList 類沒有固定大小;可以根據需要不斷增長.
預設大小為16個元素,當新增第17個元素時會自動擴充套件到32個.
可以顯式地指定其容量.
可以儲存不同型別的元素, 因為所有ArrayList中的元素都是物件(System.Object).
ArrayList 的方法:
Add(object) 把一個物件新增到 ArrayList 的末尾.
Insert(index,object) 在指定位置插入一個物件.
Remove(object) 移除一個物件.
RemoveAt(index) 移除一個物件.
Clear() 移除所有元素.
Sort 對ArrayList 中的元素進行排序.
例子:
實現對列表(ArrayList或者List<T>)的增刪改查功能

如何將10物件隨機存入列表中

佇列
先進先出的物件集合
特殊的順序表
佇列(Queue)
物件按照先進先出,先來先服務的原則
物件按順序儲存在預設大小為32的緩衝區中;當緩衝區空間不足時,按增長因子(2.0)建立一個新的緩衝區,並將現有物件拷貝到新緩衝區中(開銷大)
Queue的方法:
Enqueue 入隊 進隊
Dequeue 出隊 離隊
Peek 檢視隊頭
Clear 清除佇列
Contains 詢問是否包含
Count 佇列中的元素個數
如何用佇列實現約瑟夫環?
///約瑟夫環:假設有n個人坐成一圈,從某個人開始報數,數到m的人出圈,
///接著從出圈的下一個人開始重新報數,數到m的人再次出圈,如此反覆,直到所有人都出圈,請列出出圈順序。

棧:先進後出(後進先出)的物件集合 特殊的順序表
棧(Stack)
後進先出,最後插入的物件位於棧的頂端
Stack的方法:
Push 壓棧 進棧 入棧
Pop 出棧 彈棧
Peek 檢視棧頂
Clear 清空堆疊
Contains 是否包含
Count 棧內元素個數
例子:
/// 用棧實現加法式子的運算
///1+2+3+4
///+ *混合的怎麼運算?

