日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

转:C#数据结构和算法学习系列十三----链表

發布時間:2024/6/5 C# 110 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转: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#数据结构和算法学习系列十三----链表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。