C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#单向链表非升序插入

C#单向链表实现非升序插入方法的实例详解

作者:wenchm

单向链表是一种数据结构,其中元素以线性方式连接在一起,每个元素都指向下一个元素,非升序插入意味着元素不是按升序(从小到大)插入链表中,本文给大家介绍了C#单向链表实现非升序插入方法的实例,需要的朋友可以参考下

一、涉及到的知识点

1.非升序插入的定义

单向链表是一种数据结构,其中元素以线性方式连接在一起,每个元素都指向下一个元素。非升序插入意味着元素不是按升序(从小到大)插入链表中。相反,元素可以以任何顺序插入链表中,这取决于应用程序的需要。 

2. 非升序插入不是随机插入

在 C# 单向链表中,非升序插入并不意味着随机插入。它意味着根据节点数据的大小,在链表中的适当位置插入新节点,而不是简单地将其插入到链表的末尾。

当使用非升序插入时,新节点会根据其数据大小与现有节点进行比较,然后插入到链表中的正确位置。这意味着新节点的插入位置取决于其数据大小以及链表中现有节点的数据大小。

以下是 InsertUnAscending 方法的工作原理:

这种方法确保了链表中的节点数据保持非升序排列。

3.AddLast 方法

AddLast 方法是 C# 中 LinkedList<T> 类的一个方法,用于在链表的末尾添加一个元素。当想要将元素按任意顺序添加到链表中时,可以使用此方法。

以下是 AddLast 方法的语法:

public void AddLast(T value);

其中,T 是类型参数,表示链表中元素的类型。

二、实例

1.自定义单向链表及非升序插入方法

// 单向链表实现:非升序插入数据的方法
namespace _131_7
{
    public class Node
    {
        public int Data { get; set; }
        public Node? Next { get; set; }
    }
 
    public class LinkedList
    {
        private static Node? _head;
 
        public LinkedList()
        {
            _head = null;
        }
 
        /// <summary>
        /// 非升序插入节点数据的方法
        /// 非升序插入意味着元素不是按升序插入链表中
        /// 相反,元素可以以任何顺序插入链表中
        /// 具体实现是由程序的需求决定的
        /// </summary>
        public static void AddNonAscending(int data)
        {
            Node newNode = new() { Data = data };
            if (_head == null)
            {
                _head = newNode;
            }
            else
            {
                Node? temp = _head;
                while (temp.Next != null && temp.Next.Data < data)
                {
                    temp = temp.Next;
                }
                newNode.Next = temp.Next;
                temp.Next = newNode;
            }
        }
 
        // 遍历链表并打印数据
        public static void PrintList()
        {
            Node? temp = _head;
            while (temp != null)
            {
                Console.Write(temp.Data + " ");
                temp = temp.Next;
            }
            Console.WriteLine();
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
 
            // 插入元素,顺序不是升序
            LinkedList.AddNonAscending(11);
            LinkedList.AddNonAscending(5);
            LinkedList.AddNonAscending(3);
            LinkedList.AddNonAscending(4);
            LinkedList.AddNonAscending(2);
            LinkedList.AddNonAscending(1);
            // 遍历链表并打印元素
            LinkedList.PrintList();
        }
    }
}
//运行结果:
/*
11 1 2 3 4 5
 */

2.用LinkedList<int>链表类AddLast方法实现非升序插入

// 用LinkedList<int>链表类AddLast方法实现非升序插入
namespace _131_8
{
    class Program
    {
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
 
            LinkedList<int>? list = new();
            // 插入元素,顺序不是升序
            list.AddLast(5);
            list.AddLast(3);
            list.AddLast(1);
            list.AddLast(4);
            list.AddLast(2);
            // 遍历链表并打印元素
            LinkedListNode<int>? node = list.First;
            while (node != null)
            {
                Console.WriteLine(node.Value);
                node = node.Next;
            }
        }
    }
}
//运行结果:
/*
5
3
1
4
2
 */

从上面的示例中可以看到,元素不是按升序插入链表的。

到此这篇关于C#单向链表实现非升序插入方法的实例详解的文章就介绍到这了,更多相关C#单向链表非升序插入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文