一.鏈表
線性表的另一種常見存在形式。LinkedList.分爲單向鏈表和雙向鏈表
與順序表的區別:順序表必須佔用一塊事先分配好的存儲空間,而鏈表不需要。鏈表在邏輯上相鄰的元素在物理位置上可以不相鄰。
單向鏈表簡稱單向表,物理關係是鬆散的。
數據域 指針域
a |
單向鏈表和單向循環鏈表的區別:
單向鏈表的終端結點的指針域爲空,錶鏈表的結束。
單向循環鏈表的終端節點的指針域指向頭結點。
雙向鏈表
pre data next
雙向鏈表中的每一個節點處除了存儲實際數據,還存儲了2個引用。
一個是對下一個節點的引用,一個是對上一個節點的引用。
@追加
追加操作,需要從單鏈表的頭引用開始遍歷知道結尾,然後在單鏈表的末端添加一個新的結點。
追加操作的時間複雜度:時間主要消耗在查找上。因爲存儲空間不是連續的空間,查找過程需要從頭引用開始,一個結點一個結點遍歷。
時間複雜度:O(n) n是鏈表的長度。
@插入
在表第pos個位置結點處插入一個值爲item的新節點。從頭遍歷,直到找到第pos個位置的結點。
最好情況:插入位置0。查找一次。
最壞情況:插入位置n。查找n次。
平均移動次數:n/2
時間複雜度:O(n)
@刪除
時間主要消耗在查找操作上。
最好情況:插入位置0。查找一次。
最壞情況:插入位置n。查找n次。
平均移動次數:n/2
時間複雜度:O(n)
public class Node<T>
{
private T data;//數據域
private Node<T> next;// 引用域
private Node(T value);//構造器,要求輸入值
private Node();// 構造器
private T data();// 數據域
private Node<T> Next;//引用域
}
@反轉
先取出頭結點,記錄下一個結點。
單向鏈表靠數據結點裏的引用把數據在邏輯上關聯起來。
二.特殊的線性表 隊列、棧 //差不多跟泛型的類一樣
隊列特點:先進先出 Queue
棧特點:先進後出 Stack 引用命名空間:using System.Collection.Generic;
棧的應用:廣泛引用與解決表達式求值。進制轉換、括號匹配、迷宮、遞歸調用等滿足“先進後出”原則的問題。