C#双向链表LinkedList排序实现方法
作者:北风其凉 时间:2021-08-19 14:06:16
本文实例讲述了C#双向链表LinkedList排序实现方法。分享给大家供大家参考。具体如下:
1.函数
打印链表函数PrintLinkedList 和 排序函数SortLinkedList
注:下面代码中的链表每项都是double类型,如果换做其他的类型或结构,则需要适当修改
/// <summary>
/// 打印链表各结点信息
/// </summary>
/// <param name="ll"></param>
private static void PrintLinkedList(LinkedList<double> ll, string title = "")
{
//打印标题
Console.WriteLine(string.Format("-- {0} --",
string.IsNullOrWhiteSpace(title) ? "打印链表" : title));
//逐个结点打印链表
LinkedListNode<double> lln = ll.First;
int counter = 0;
while (lln != null)
{
Console.WriteLine(string.Format("第 {0} 个结点值为 {1}",
counter++, lln.Value.ToString("#0.0")));
lln = lln.Next;
}
}
/// <summary>
/// 返回一个排序后的链表
/// </summary>
/// <param name="linkedlist">待排序链表</param>
/// <param name="isAsc">true:升序/false:降序</param>
/// <returns></returns>
private static LinkedList<double> SortLinkedList(
LinkedList<double> linkedlist, bool isAsc = true)
{
LinkedList<double> result = new LinkedList<double>();
foreach (double nodevalue in linkedlist)
{
LinkedListNode<double> lln = result.First;
while (true)
{
if (isAsc) //升序排列时情况
{
if (lln == null)
{
result.AddLast(nodevalue);
break;
}
else if (nodevalue <= lln.Value)
{
result.AddBefore(lln, nodevalue);
break;
}
else
{
lln = lln.Next;
}
}
else //降序排列时情况
{
if (lln == null)
{
result.AddLast(nodevalue);
break;
}
else if (nodevalue >= lln.Value)
{
result.AddBefore(lln, nodevalue);
break;
}
else
{
lln = lln.Next;
}
}
}
}
return result;
}
2.Main函数调用
static void Main(string[] args)
{
//测试用数组
double[] array = new double[]
{
3.5, 2.5, 6.2, 8.0, 1.3,
4.6, 5.5, 2.7, 8.4, 9.7
};
//生成链表ll
LinkedList<double> ll = new LinkedList<double>();
for (int i = 1; i < array.Length; i++)
{
ll.AddLast(array[i]);
}
//打印链表ll
PrintLinkedList(ll, "原链表");
//对链表ll进行排序(升序)
ll = SortLinkedList(ll);
//打印排序后的链表ll
PrintLinkedList(ll, "链表(升序)");
//对链表ll进行排序(降序)
ll = SortLinkedList(ll, false);
//打印排序后的链表ll
PrintLinkedList(ll, "链表(降序)");
Console.ReadLine();
}
3.运行结果:
希望本文所述对大家的C#程序设计有所帮助。
标签:C#,双向链表,排序
0
投稿
猜你喜欢
详解Android 通过Socket 和服务器通讯(附demo)
2023-05-03 01:08:22
java实现学生信息管理系统
2023-11-11 08:22:35
Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例
2021-07-19 04:41:18
基于Class.forName()用法及说明
2021-06-20 19:09:30
C#中实现可变参数实例
2022-03-27 15:48:07
Java实现十进制与二进制互转的示例详解
2022-04-02 07:40:56
java 文件下载支持中文名称的实例
2023-03-16 09:02:16
Java实现数据库连接池的方法
2023-11-28 08:57:30
SpringBoot整合Mybatis简单实现增删改查
2023-07-05 15:33:44
全面解析JTA 深度历险
2022-04-17 10:58:43
Android Selector和Shape的使用方法
2022-08-05 23:48:38
Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作
2022-04-05 20:07:11
Java提取2个集合中的相同和不同元素代码示例
2023-11-28 05:48:41
java Apache poi 对word doc文件进行读写操作
2023-09-23 02:13:15
Android开发之多媒体文件获取工具类实例【音频,视频,图片等】
2022-03-05 22:44:24
关于@ApiImplicitParams、ApiImplicitParam的使用说明
2023-11-09 10:49:34
java如何使用自己的maven本地仓库详解
2022-08-01 12:13:44
基于Rxjava实现轮询定时器
2021-12-27 07:22:10
Android开发中编写蓝牙相关功能的核心代码讲解
2021-07-26 00:24:53
java中synchronized(同步代码块和同步方法)详解及区别
2021-09-03 08:44:05