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

2021年4月7日18:12:12 发表评论 1,045 次浏览

链表是一个线性数据结构, 用于将元素存储在非连续位置。链接列表中的元素使用指针相互链接。换句话说, 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;

第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#链表原理及其具体实现代码的全部内容。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: