數據結構與算法(二)

一.鏈表

線性表的另一種常見存在形式。LinkedList.分爲單向鏈表和雙向鏈表

與順序表的區別:順序表必須佔用一塊事先分配好的存儲空間,而鏈表不需要。鏈表在邏輯上相鄰的元素在物理位置上可以不相鄰。

單向鏈表簡稱單向表,物理關係是鬆散的。

                                         數據域        指針域

   

 單向鏈表和單向循環鏈表的區別:

單向鏈表的終端結點的指針域爲空,錶鏈表的結束。

單向循環鏈表的終端節點的指針域指向頭結點。

雙向鏈表

                                        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;

棧的應用:廣泛引用與解決表達式求值。進制轉換、括號匹配、迷宮、遞歸調用等滿足“先進後出”原則的問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章