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

 更新时间:2024年03月01日 11:42:47   作者:wenchm  
单向链表是一种数据结构,其中元素以线性方式连接在一起,每个元素都指向下一个元素,非升序插入意味着元素不是按升序(从小到大)插入链表中,本文给大家介绍了C#单向链表实现非升序插入方法的实例,需要的朋友可以参考下

一、涉及到的知识点

1.非升序插入的定义

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

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

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

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

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

  • 如果链表为空,新节点将作为链表的头节点插入。
  • 如果链表不为空,将使用一个临时节点(temp)从头节点开始遍历链表。
  • 在遍历过程中,将比较新节点的数据与当前节点(temp)的下一个节点的数据大小。如果当前节点的下一个节点的数据小于新节点的数据,将移动到下一个节点。
  • 当找到适当的位置时,将新节点插入到当前节点(temp)的下一个节点之前,然后将新节点的下一个节点设置为当前节点的下一个节点的下一个节点。
  • 最后,将当前节点(temp)的下一个节点设置为新节点。

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

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#单向链表非升序插入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#使用有道ip地址查询接口方法实例详解

    C#使用有道ip地址查询接口方法实例详解

    这篇文章主要介绍了C#使用有道ip地址查询接口方法,实例分析了有道IP地址查询接口的使用方法与数据返回格式,需要的朋友可以参考下
    2015-05-05
  • C#实现在购物车系统中生成不重复订单号的方法

    C#实现在购物车系统中生成不重复订单号的方法

    这篇文章主要介绍了C#实现在购物车系统中生成不重复订单号的方法,涉及C#中时间与字符串操作的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • C#实现控制Windows系统关机、重启和注销的方法

    C#实现控制Windows系统关机、重启和注销的方法

    这篇文章主要介绍了C#实现控制Windows系统关机、重启和注销的方法,涉及C#调用windows系统命令实现控制开机、关机等操作的技巧,非常简单实用,需要的朋友可以参考下
    2015-04-04
  • 输出的文本实现对齐的方法(超简单)

    输出的文本实现对齐的方法(超简单)

    下面小编就为大家分享一篇c#输出的文本实现对齐的方法,特别简单!希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 一个进程间通讯同步的C#框架引荐

    一个进程间通讯同步的C#框架引荐

    这篇文章主要介绍了一个进程间通讯同步的C#框架,代码具有相当的稳定性和可维护性,随着.NET的开源也会被注入更多活力,推荐!需要的朋友可以参考下
    2015-07-07
  • 通过C#编写一个简易的Windows截屏增强工具

    通过C#编写一个简易的Windows截屏增强工具

    在使用 Windows 系统的截屏快捷键 PrintScreen 截屏时,如果需要把截屏保存到文件,需要先粘贴到画图工具然后另存为文件。所以本文用C#编写了一个简易的Windows截屏增强工具,需要的可以参考一下
    2022-05-05
  • unity实现鼠标跟随(ITween)

    unity实现鼠标跟随(ITween)

    这篇文章主要为大家详细介绍了unity实现鼠标跟随,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C#获取视频某一帧的缩略图的方法

    C#获取视频某一帧的缩略图的方法

    这篇文章主要介绍了C#获取视频某一帧的缩略图的方法,涉及执行CMD命令及针对视频文件操作的技巧,具有一定的实用价值,需要的朋友可以参考下
    2014-11-11
  • C# WinForm程序完全退出的问题解决

    C# WinForm程序完全退出的问题解决

    C# WinForm程序完全退出的问题解决,需要的朋友可以参考一下
    2013-05-05
  • 如何使用C#在PDF文件添加图片印章

    如何使用C#在PDF文件添加图片印章

    文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性。C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述如何以编程的方式在PDF文件中添加图片印章
    2017-01-01

最新评论