C#單向鏈表實(shí)現(xiàn)非升序插入方法的實(shí)例詳解
一、涉及到的知識點(diǎn)
1.非升序插入的定義
單向鏈表是一種數(shù)據(jù)結(jié)構(gòu),其中元素以線性方式連接在一起,每個元素都指向下一個元素。非升序插入意味著元素不是按升序(從小到大)插入鏈表中。相反,元素可以以任何順序插入鏈表中,這取決于應(yīng)用程序的需要。
2. 非升序插入不是隨機(jī)插入
在 C# 單向鏈表中,非升序插入并不意味著隨機(jī)插入。它意味著根據(jù)節(jié)點(diǎn)數(shù)據(jù)的大小,在鏈表中的適當(dāng)位置插入新節(jié)點(diǎn),而不是簡單地將其插入到鏈表的末尾。
當(dāng)使用非升序插入時,新節(jié)點(diǎn)會根據(jù)其數(shù)據(jù)大小與現(xiàn)有節(jié)點(diǎn)進(jìn)行比較,然后插入到鏈表中的正確位置。這意味著新節(jié)點(diǎn)的插入位置取決于其數(shù)據(jù)大小以及鏈表中現(xiàn)有節(jié)點(diǎn)的數(shù)據(jù)大小。
以下是 InsertUnAscending 方法的工作原理:
- 如果鏈表為空,新節(jié)點(diǎn)將作為鏈表的頭節(jié)點(diǎn)插入。
- 如果鏈表不為空,將使用一個臨時節(jié)點(diǎn)(temp)從頭節(jié)點(diǎn)開始遍歷鏈表。
- 在遍歷過程中,將比較新節(jié)點(diǎn)的數(shù)據(jù)與當(dāng)前節(jié)點(diǎn)(temp)的下一個節(jié)點(diǎn)的數(shù)據(jù)大小。如果當(dāng)前節(jié)點(diǎn)的下一個節(jié)點(diǎn)的數(shù)據(jù)小于新節(jié)點(diǎn)的數(shù)據(jù),將移動到下一個節(jié)點(diǎn)。
- 當(dāng)找到適當(dāng)?shù)奈恢脮r,將新節(jié)點(diǎn)插入到當(dāng)前節(jié)點(diǎn)(temp)的下一個節(jié)點(diǎn)之前,然后將新節(jié)點(diǎn)的下一個節(jié)點(diǎn)設(shè)置為當(dāng)前節(jié)點(diǎn)的下一個節(jié)點(diǎn)的下一個節(jié)點(diǎn)。
- 最后,將當(dāng)前節(jié)點(diǎn)(temp)的下一個節(jié)點(diǎn)設(shè)置為新節(jié)點(diǎn)。
這種方法確保了鏈表中的節(jié)點(diǎn)數(shù)據(jù)保持非升序排列。
3.AddLast 方法
AddLast 方法是 C# 中 LinkedList<T> 類的一個方法,用于在鏈表的末尾添加一個元素。當(dāng)想要將元素按任意順序添加到鏈表中時,可以使用此方法。
以下是 AddLast 方法的語法:
public void AddLast(T value);
其中,T 是類型參數(shù),表示鏈表中元素的類型。
二、實(shí)例
1.自定義單向鏈表及非升序插入方法
// 單向鏈表實(shí)現(xiàn):非升序插入數(shù)據(jù)的方法 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> /// 非升序插入節(jié)點(diǎn)數(shù)據(jù)的方法 /// 非升序插入意味著元素不是按升序插入鏈表中 /// 相反,元素可以以任何順序插入鏈表中 /// 具體實(shí)現(xiàn)是由程序的需求決定的 /// </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; } } // 遍歷鏈表并打印數(shù)據(jù) 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(); } } } //運(yùn)行結(jié)果: /* 11 1 2 3 4 5 */
2.用LinkedList<int>鏈表類AddLast方法實(shí)現(xiàn)非升序插入
// 用LinkedList<int>鏈表類AddLast方法實(shí)現(xiàn)非升序插入 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; } } } } //運(yùn)行結(jié)果: /* 5 3 1 4 2 */
從上面的示例中可以看到,元素不是按升序插入鏈表的。
到此這篇關(guān)于C#單向鏈表實(shí)現(xiàn)非升序插入方法的實(shí)例詳解的文章就介紹到這了,更多相關(guān)C#單向鏈表非升序插入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)在購物車系統(tǒng)中生成不重復(fù)訂單號的方法
這篇文章主要介紹了C#實(shí)現(xiàn)在購物車系統(tǒng)中生成不重復(fù)訂單號的方法,涉及C#中時間與字符串操作的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-05-05C#實(shí)現(xiàn)控制Windows系統(tǒng)關(guān)機(jī)、重啟和注銷的方法
這篇文章主要介紹了C#實(shí)現(xiàn)控制Windows系統(tǒng)關(guān)機(jī)、重啟和注銷的方法,涉及C#調(diào)用windows系統(tǒng)命令實(shí)現(xiàn)控制開機(jī)、關(guān)機(jī)等操作的技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-04-04通過C#編寫一個簡易的Windows截屏增強(qiáng)工具
在使用?Windows?系統(tǒng)的截屏快捷鍵?PrintScreen?截屏?xí)r,如果需要把截屏保存到文件,需要先粘貼到畫圖工具然后另存為文件。所以本文用C#編寫了一個簡易的Windows截屏增強(qiáng)工具,需要的可以參考一下2022-05-05unity實(shí)現(xiàn)鼠標(biāo)跟隨(ITween)
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)鼠標(biāo)跟隨,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04