C#中的链表实现代码示例和原理解释

  • 如何创建一个LinkedList?
  • 如何从LinkedList中删除元素?
  • 如何检查LinkedList中元素的可用性?
目录链表是一个线性数据结构, 用于将元素存储在非连续位置。链接列表中的元素使用指针相互链接。换句话说, LinkedList由节点组成, 其中每个节点包含一个数据字段和到列表中下一个节点的引用(链接)。本文我们讨论C#链表实现代码和C#链表原理解释
在C#中,LinkedList是集合的泛型类型,它在System.Collections.Generic命名空间中定义。它是一个双向链表,因此,每个节点都指向下一个节点,并指向前一个节点。它是一个动态的集合,根据程序的需要而不断增长。它还提供快速插入和删除元素。
C#中的链表实现代码示例和原理解释

文章图片
C#链表实现重要事项:
  • LinkedList类实现ICollection < T> , IEnumerable < T> , IReadOnlyCollection < T> , ICollection, IEnumerable, IDeserializationCallback和可序列化接口。
  • 它还支持枚举器。
  • 你可以删除节点并将它们重新插入同一列表或另一个列表中, 这将导致在堆上没有分配其他对象。
  • LinkedList < T> 对象中的每个节点的类型为LinkedListNode < T> 。
  • 它不支持链接, 拆分, 循环或其他可能会使列表处于不一致状态的功能。
  • 如果LinkedList为空, 则First和Last属性包含null。
  • LinkedList的容量是LinkedList可以容纳的元素数。
  • 在LinkedList中, 允许存储重复的但类型相同的元素。
下面详细讨论C#链表原理及其具体实现代码:
如何创建一个LinkedList? LinkedList类具有3个用于创建LinkedList的构造函数, 如下所示:
  • LinkedList():此构造函数用于创建为空的LinkedList类的实例。
  • LinkedList(IEnumerable):此构造函数用于创建LinkedList类的实例, 该实例包含从指定的IEnumerable复制的元素, 并具有足够的容量来容纳复制的元素数量。
  • LinkedList(SerializationInfo, StreamingContext):此构造函数用于创建LinkedList类的实例, 该实例可使用指定的SerializationInfo和StreamingContext进行序列化。
让我们看看如何使用创建链接列表LinkedList()构造函数:
第1步:包括System.Collections.Generic在程序的帮助下命名空间使用关键词:
using System.Collections.Generic;

【C#中的链表实现代码示例和原理解释】第2步:使用LinkedList类创建一个LinkedList, 如下所示:
LinkedList < Type_of_linkedlist> linkedlist_name = new LinkedList < Type_of_linkedlist> ();
第三步:LinkedList提供了4种不同的方法来添加节点, 这些方法是:
  • AddAfter:此方法用于在LinkedList中的现有节点之后添加新节点或值。
  • AddBefore:此方法用于在LinkedList中的现有节点之前添加新节点或值。
  • AddFirst:此方法用于在LinkedList的开头添加新节点或值。
  • AddLast:此方法用于在LinkedList的末尾添加新节点或值。
步骤4:可通过使用foreach循环或使用for循环来访问LinkedList的元素。如下例所示。
C#链表实现代码例子:
//C# program to illustrate how //to create a LinkedList using System; using System.Collections.Generic; class GFG {//Main Method static public void Main() {//Creating a linkedlist //Using LinkedList class LinkedList< String> my_list = new LinkedList< String> (); //Adding elements in the LinkedList //Using AddLast() method my_list.AddLast( "Zoya" ); my_list.AddLast( "Shilpa" ); my_list.AddLast( "Rohit" ); my_list.AddLast( "Rohan" ); my_list.AddLast( "Juhi" ); my_list.AddLast( "Zoya" ); Console.WriteLine( "Best students of XYZ university:" ); //Accessing the elements of //LinkedList Using foreach loop foreach ( string str in my_list) { Console.WriteLine(str); } } }

输出如下:
Best students of XYZ university: Zoya Shilpa Rohit Rohan Juhi Zoya

如何从LinkedList中删除元素? 在LinkedList中, 允许从LinkedList中删除元素。 LinkedList < T> 类提供5种不同的方法来删除元素, 这些方法是:
  • Clear():此方法用于从LinkedList中删除所有节点。
  • Remove(LinkedListNode):此方法用于从LinkedList中删除指定的节点。
  • Remove(T):此方法用于从LinkedList中删除第一次出现的指定值。
  • RemoveFirst():此方法用于删除LinkedList开头的节点。
  • RemoveLast():此方法用于删除LinkedList末尾的节点。
C#链表实现代码例子:
//C# program to illustrate how to //remove elements from LinkedList using System; using System.Collections.Generic; class GFG {//Main Method static public void Main() {//Creating a linkedlist //Using LinkedList class LinkedList< String> my_list = new LinkedList< String> (); //Adding elements in the LinkedList //Using AddLast() method my_list.AddLast( "Zoya" ); my_list.AddLast( "Shilpa" ); my_list.AddLast( "Rohit" ); my_list.AddLast( "Rohan" ); my_list.AddLast( "Juhi" ); my_list.AddLast( "Zoya" ); //Inital number of elements Console.WriteLine( "Best students of XYZ " + "university initially:" ); //Accessing the elements of //Linkedlist Using foreach loop foreach ( string str in my_list) { Console.WriteLine(str); }//After using Remove(LinkedListNode) //method Console.WriteLine( "Best students of XYZ" + " university in 2000:" ); my_list.Remove(my_list.First); foreach ( string str in my_list) { Console.WriteLine(str); }//After using Remove(T) method Console.WriteLine( "Best students of XYZ" + " university in 2001:" ); my_list.Remove( "Rohit" ); foreach ( string str in my_list) { Console.WriteLine(str); }//After using RemoveFirst() method Console.WriteLine( "Best students of XYZ" + " university in 2002:" ); my_list.RemoveFirst(); foreach ( string str in my_list) { Console.WriteLine(str); }//After using RemoveLast() method Console.WriteLine( "Best students of XYZ" + " university in 2003:" ); my_list.RemoveLast(); foreach ( string str in my_list) { Console.WriteLine(str); }//After using Clear() method my_list.Clear(); Console.WriteLine( "Number of students: {0}" , my_list.Count); } }

输出如下:
Best students of XYZ university initially: Zoya Shilpa Rohit Rohan Juhi Zoya Best students of XYZ university in 2000: Shilpa Rohit Rohan Juhi Zoya Best students of XYZ university in 2001: Shilpa Rohan Juhi Zoya Best students of XYZ university in 2002: Rohan Juhi Zoya Best students of XYZ university in 2003: Rohan Juhi Number of students: 0

如何检查LinkedList中元素的可用性? 在LinkedList中, 你可以使用来检查给定值是否存在含(T)方法。此方法用于确定值是否在LinkedList中。
C#的链表实现代码例子如下:
//C# program to illustrate how //to check whether the given //element is present or not //in the LinkedList using System; using System.Collections.Generic; class GFG {//Main Method static public void Main() {//Creating a linkedlist //Using LinkedList class LinkedList< String> my_list = new LinkedList< String> (); //Adding elements in the Linkedlist //Using AddLast() method my_list.AddLast( "Zoya" ); my_list.AddLast( "Shilpa" ); my_list.AddLast( "Rohit" ); my_list.AddLast( "Rohan" ); my_list.AddLast( "Juhi" ); //Check if the given element //is available or not if (my_list.Contains( "Shilpa" ) == true ) { Console.WriteLine( "Element Found...!!" ); } else { Console.WriteLine( "Element Not found...!!" ); } } }

输出如下:
Element Found...!!

以上就是C#链表原理及其具体实现代码的全部内容。

    推荐阅读