生活随笔
收集整理的這篇文章主要介紹了
转:C#数据结构和算法学习系列十三----链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
鏈表是被稱為節點的類對象的群集。每一個節點通過一個引用鏈接到列表 內的后繼節點上。節點包括存儲數據的字段和節點引用的字段。到另外一個節點的引用被稱為是鏈接。數組和鏈表之間的一個主要區別就是數組內的元素是通過位置 (索引)進行引用的,而鏈表內的元素則是通過它們與數組其他元素的關系進行引用的。
1.面向對象鏈表的設計。鏈表的設計至少包含兩個類。這里會創建一個 Node 類,而且每次向鏈表添加節點的時候會實例化一個Node 對象。鏈表內的節點通過索引與其他節點相互連接在一起。而且把這些索引設置為使用創建在一個獨立的LinkedList 類中的方法。節點是由兩個數據成員組成的:存儲著節點數據的Element,以及存儲著指向表內下一節點引用的Link。這里會使用Object 作為Element 的數據類型,所以也就不用擔心存儲在表內的數據的類型了。Link 的數據類型是Node,這看似很奇怪,但實際上是很容易理解的。因為要把鏈接指向下一個節點,而且是用索引來作為這個鏈接,所以需要把成員Link 設置為Node 類型。如下:
public?class?Node??{???????public?Object?Element;???????public?Node?Link;???????public?Node()???????{????????????Element?=?null;????????????Link?=?null;???????}???????public?Node(Object?theElement)???????{????????????Element?=?theElement;????????????Link?=?null;???????}??}?? LinkedList 類用來創建鏈表中節點之間的鏈接。這個類包括幾種方法,有把節點添加到鏈表的方法,有從鏈表中移除節點的方法,有遍歷鏈表的方法,還有找到鏈表內節點的方法。此外,還需要一種構造器方法來實例化鏈表。此類中唯一的數據成員就是頭節點。如下:
public?class?LinkedList??{???????protected?Node?header;???????public?LinkedList()???????{????????????header?=?new?Node("?header");???????}???????private?Node?Find(Object?item)???????{????????????Node?current?=?new?Node();????????????current?=?header;????????????while?(current.?Element?!=?item)?????????????????current?=?current.Link;????????????return?current;???????}???????public?void?Insert(Object?newItem,?Object?after)???????{????????????Node?current?=?new?Node();????????????Node?newNode?=?new?Node(newItem);????????????current?=?Find(after);????????????newNode.Link?=?current.Link;????????????current.Link?=?newNode;???????}???????private?Node?FindPrevious(Object?n)???????{????????????Node?current?=?header;????????????while?(!(current.Link?==?null)?&&?(current.Link.Element?!=?n))?????????????????current?=?current.Link;????????????return?current;???????}???????public?void?Remove(Object?n)???????{????????????Node?p?=?FindPrevious(n);????????????if?(!(p.Link?==?null))?????????????????p.Link?=?p.Link.Link;???????}???????public?void?PrintList()???????{????????????Node?current?=?new?Node();????????????current?=?header;????????????while?(!(current.Link?==?null))????????????{?????????????????Console.WriteLine(current.Link.Element);?????????????????current?=?current.Link;????????????}???????}??}?? 2.通用的Node類和LinkedList類。 System.Collections.Generic 命名空間為構建鏈表提供了兩種通用的類:LinkedList 類和LinkedListNode 類。Node 類為存儲數值和鏈接提供了兩個數據字段,而LinkedList 類則用在節點前以及在節點后的插入方法實現了雙向鏈表。這個類還提供了其他方法,包括移除節點的方法,找到鏈表內首節點和尾節點的方法,當然還有其他有用 的方法。?
using?System;??using?System.Collections.Generic;??using?System.Text;??class?Program??{???????static?void?Main(string[]?args)???????{????????????LinkedListNode<string>?node?=?new????????????LinkedListNode<string>("Mike");????????????LinkedList<string>?names?=?new?LinkedList<string>();????????????names.AddFirst(node);????????????LinkedListNode<string>?node1?=?new?LinkedListNode<string>("David");????????????names.AddAfter(node,?node1);????????????LinkedListNode<string>?node2?=?new?LinkedListNode<string>("Raymond");????????????names.AddAfter(node1,?node2);????????????LinkedListNode<string>?node3?=?new?LinkedListNode<string>(null);????????????LinkedListNode<string>?aNode?=?names.First;????????????while?(aNode?!=?null)????????????{?????????????????Console.WriteLine(aNode.Value);?????????????????aNode?=?aNode.Next;????????????}????????????aNode?=?names.Find("?David");????????????if?(aNode?!=?null)?aNode?=?names.First;????????????while?(aNode?!=?null)????????????{?????????????????Console.WriteLine(aNode.Value);?????????????????aNode?=?aNode.Next;????????????}????????????Console.Read();???????}??}?
轉載于:https://www.cnblogs.com/mechase/archive/2011/11/07/2239371.html
總結
以上是生活随笔為你收集整理的转:C#数据结构和算法学习系列十三----链表的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。