本文實例講述了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#程序設計有所幫助。
新聞熱點
疑難解答