c# 中链表的实现

原文:https://www . geesforgeks . org/link-list-implementation-in-c-sharp/

一个 链表 是一个线性数据结构,它把元素存储在非连续的位置。链表中的元素使用指针相互链接。或者换句话说,LinkedList 由节点组成,其中每个节点都包含一个数据字段和对列表中下一个节点的引用(链接)。 在 C# 中,链表是集合的泛型类型,在系统中定义。集合.通用命名空间。它是一个双链表,因此,每个节点向前指向下一个节点,向后指向上一个节点。它是一个动态的集合,根据你的程序的需要而增长。它还提供了快速插入和移除元素。

要点:

  • LinkedList 类实现了I collectionT1、IEnumerableT3、ireadonlyccollectionT5、 ICollectionIEnumerableIDeserializationCallbackISerializable 接口。**
  • 它还支持枚举器。
  • 您可以删除节点并将其重新插入到同一个列表或另一个列表中,这样就不会在堆上分配额外的对象。
  • 链接列表对象中的每个节点都属于链接列表节点类型。
  • 它不支持链接、拆分、循环或其他可能使列表处于不一致状态的功能。
  • 如果链接列表为空,则第一个和最后一个属性包含空值。
  • 链接列表的容量是链接列表可以容纳的元素数量。
  • 在链接列表中,允许存储相同类型的重复元素。

如何创建链接列表?

链接列表类有 3 个构造函数,用于创建如下链接列表:

  • LinkedList(): 这个构造函数用来创建一个空的 LinkedList 类的实例。
  • LinkedList(IEnumerable): 此构造函数用于创建 LinkedList 类的实例,该实例包含从指定的 IEnumerable 复制的元素,并且具有足够的容量来容纳复制的元素数量。
  • LinkedList(SerializationInfo,StreamingContext): 此构造函数用于创建 linked list 类的实例,该实例可通过指定的 SerializationInfo 和 StreamingContext 进行序列化。

让我们看看如何使用 LinkedList() 构造函数创建一个 LinkedList:

第一步:包含系统。集合。通用命名空间在您的程序中借助使用关键字:

using System.Collections.Generic;

步骤 2: 使用如下所示的 LinkedList 类创建一个 LinkedList:

链表linklist _ name =新链表();

步骤 3: LinkedList 提供了 4 种不同的方法来添加节点,这些方法是:

  • AddAfter: 此方法用于在 LinkedList 中的现有节点后添加新的节点或值。
  • AddBefore: 此方法用于在 LinkedList 中的现有节点之前添加新的节点或值。
  • 添加第一个 : 这个方法用于在链表的开始处添加一个新的节点或值。
  • 添加最后一个 : 这个方法用于在链表的末尾添加一个新的节点或值。

第 4 步:使用 foreach 循环或 for 循环访问 LinkedList 的元素。如下例所示。

示例:

// 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);
        }
    }
}

Output:

Best students of XYZ university:
Zoya
Shilpa
Rohit
Rohan
Juhi
Zoya

如何从链接列表中删除元素?

在链接列表中,允许从链接列表中删除元素。LinkedList 类提供了 5 种不同的方法来移除元素,这些方法是:

  • Clear() : 此方法用于从链表中移除所有节点。
  • 移除(链接列表节点) : 此方法用于从链接列表中移除指定的节点。
  • 移除(T) : 此方法用于从链接列表中移除指定值的第一次出现。
  • RemoveFirst() : 此方法用于删除链表开头的节点。
  • RemoveLast() : 此方法用于删除链表末尾的节点。

示例:

// 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);
    }
}

Output:

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

如何检查链接列表中元素的可用性?

在链表中,可以使用 Contains(T) 方法检查给定值是否存在。此方法用于确定链接列表中是否有值。

示例:

// 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...!!");
        }
    }
}

Output:

Element Found...!!