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