最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?單向鏈表的實(shí)現(xiàn)方法

 更新時間:2025年11月13日 12:08:54   作者:yue008  
本文介紹了C#中單向鏈表的基本概念、節(jié)點(diǎn)結(jié)構(gòu)以及基本操作,包括查找、插入和刪除節(jié)點(diǎn)的方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

在C#中,鏈表是一種特殊的數(shù)據(jù)結(jié)構(gòu),動態(tài)存儲一種結(jié)構(gòu)類型數(shù)據(jù)。本文主要介紹一個單向鏈表。

知識點(diǎn)

鏈表是一種數(shù)據(jù)結(jié)構(gòu),由節(jié)點(diǎn)組成,每個節(jié)點(diǎn)包含兩部分?jǐn)?shù)據(jù),第一部分是節(jié)點(diǎn)本身的數(shù)據(jù),第二部分是指向下一節(jié)點(diǎn)的指針,對于單向鏈表,鏈表中存在兩個特殊的節(jié)點(diǎn),分別為頭節(jié)點(diǎn)和尾節(jié)點(diǎn),頭節(jié)點(diǎn)本身沒有數(shù)據(jù),只存儲下一個節(jié)點(diǎn)的指針,尾節(jié)點(diǎn)只存儲數(shù)據(jù)

對于鏈表的操作,主要是節(jié)點(diǎn)的查找、插入和刪除操作
1、查找節(jié)點(diǎn)。根據(jù)節(jié)點(diǎn)的數(shù)據(jù)查找節(jié)點(diǎn),要實(shí)現(xiàn)此功能,需要遍歷鏈表中的所有節(jié)點(diǎn),可以從鏈表頭節(jié)點(diǎn)開始,利用循環(huán)的方式向下查找。
如果當(dāng)前節(jié)點(diǎn)指向的下一個節(jié)點(diǎn)不為空,則將下一個節(jié)點(diǎn)設(shè)置為當(dāng)前節(jié)點(diǎn)。
2、插入節(jié)點(diǎn)。插入節(jié)點(diǎn)分兩種情況。
a、在鏈表末尾插入節(jié)點(diǎn)。這種只需將當(dāng)前尾節(jié)點(diǎn)中指向下一個節(jié)點(diǎn)的指針指向新插入的節(jié)點(diǎn)即可。
b、在鏈表中間位置插入節(jié)點(diǎn),需要確定在哪個節(jié)點(diǎn)插入新的節(jié)點(diǎn),然后記錄當(dāng)前節(jié)點(diǎn)的下一個節(jié)點(diǎn),,并定義的一個臨時的節(jié)點(diǎn)進(jìn)行記錄,最后將當(dāng)前節(jié)點(diǎn)的下一個節(jié)點(diǎn)指向新添加的節(jié)點(diǎn),再將新添加節(jié)點(diǎn)的下一個節(jié)點(diǎn)指向臨時節(jié)點(diǎn)


3、刪除節(jié)點(diǎn)。刪除節(jié)點(diǎn)和插入節(jié)點(diǎn)情況類似。
a、刪除尾節(jié)點(diǎn),需要找到尾節(jié)點(diǎn)之前的一個節(jié)點(diǎn),將該節(jié)點(diǎn)指向的下一個節(jié)點(diǎn)設(shè)置為空,然后釋放尾節(jié)點(diǎn)資源。
b、刪除鏈表中間部分的節(jié)點(diǎn)。需要找到當(dāng)前節(jié)點(diǎn)的上一個節(jié)點(diǎn),并定義一個臨時節(jié)點(diǎn)PriorNode進(jìn)行記錄,然后再定義一個臨時節(jié)點(diǎn)TempNode記錄當(dāng)前節(jié)點(diǎn)的下一個節(jié)點(diǎn),最后將PriorNode的下一個節(jié)點(diǎn)指向TempNode,并釋放當(dāng)前節(jié)點(diǎn)。

namespace UnilateralismChainTable
{
    //  結(jié)點(diǎn)類
    public class ListNode
    {
        public ListNode(int NewValue)
        {
            Value = NewValue;
        }
        //前一個
        public ListNode Previous;
        // 后一個
        public ListNode Next;
        // 值
        public int Value;
    }
    // 定義結(jié)點(diǎn)之后,開始類線性表的操作編程了.在LIST 類中,采用了,Head ,Tail,  Current,三個指針,使用Append ,
    //MoveFrist,MovePrevious,MoveNext,MoveLast ,Delete,InsertAscending,InsertUnAscending ,Clear 實(shí)現(xiàn)移動,添加,
    //刪除,升序插入,降序插入,清空鏈表操作,GetCurrentValue() 方法取得當(dāng)前的值。
    public class Clist
    {
        public Clist()
        {
            //構(gòu)造函數(shù)
            //初始化
            ListCountValue = 0;
            Head = null;
            Tail = null;
        }
        // 頭指針
        private ListNode Head;
        // 尾指針  
        private ListNode Tail;
        // 當(dāng)前指針
        private ListNode Current;
        //鏈表數(shù)據(jù)的個數(shù)
        private int ListCountValue;
        //尾部添加數(shù)據(jù) 
        public void Append(int DataValue)
        {
            ListNode NewNode = new ListNode(DataValue);
            if (IsNull())
            //如果頭指針為空
            {
                Head = NewNode;
                Tail = NewNode;
            }
            else
            {
                Tail.Next = NewNode;
                NewNode.Previous = Tail;
                Tail = NewNode;
            }
            Current = NewNode;
            //鏈表數(shù)據(jù)個數(shù)加一
            ListCountValue += 1;
        }
        //刪除當(dāng)前的數(shù)據(jù)
        public void Delete()
        {
            //若為空鏈表
            if (!IsNull())
            {
                //若刪除頭
                if (IsBof())
                {
                    Head = Current.Next;
                    Current = Head;
                    ListCountValue -= 1;
                    return;
                }
                //若刪除尾
                if (IsEof())
                {
                    Tail = Current.Previous;
                    Current = Tail;
                    ListCountValue -= 1;
                    return;
                }
                //若刪除中間數(shù)據(jù)
                Current.Previous.Next = Current.Next;
                Current = Current.Previous;
                ListCountValue -= 1;
                return;
            }
        }
        // 向后移動一個數(shù)據(jù)
        public void MoveNext()
        {
            if (!IsEof()) Current = Current.Next;
        }
        // 向前移動一個數(shù)據(jù)
        public void MovePrevious()
        {
            if (!IsBof()) Current = Current.Previous;
        }
        // 移動到第一個數(shù)據(jù)  
        public void MoveFrist()
        {
            Current = Head;
        }
        // 移動到最后一個數(shù)據(jù)
        public void MoveLast()
        {
            Current = Tail;
        }
        // 判斷是否為空鏈表
        public bool IsNull()
        {
            if (ListCountValue == 0)
                return true;
            return false;
        }
        // 判斷是否為到達(dá)尾  
        public bool IsEof()
        {
            if (Current == Tail)
                return true;
            return false;
        }
        // 判斷是否為到達(dá)頭部
        public bool IsBof()
        {
            if (Current == Head)
                return true;
            return false;
        }
        public int GetCurrentValue()
        {
            return Current.Value;
        }
        // 取得鏈表的數(shù)據(jù)個數(shù)
        public int ListCount
        {
            get
            {
                return ListCountValue;
            }
        }
        // 清空鏈表
        public void Clear()
        {
            MoveFrist();
            while (!IsNull())
            {
                //若不為空鏈表,從尾部刪除  
                Delete();
            }
        }
        // 在當(dāng)前位置前插入數(shù)據(jù)
        public void Insert(int DataValue)
        {
            ListNode NewNode = new ListNode(DataValue);
            if (IsNull())
            {
                //為空表,則添加
                Append(DataValue);
                return;
            }
            if (IsBof())
            {
                //為頭部插入
                NewNode.Next = Head;
                Head.Previous = NewNode;
                Head = NewNode;
                Current = Head;
                ListCountValue += 1;
                return;
            }
            //中間插入
            NewNode.Next = Current;
            NewNode.Previous = Current.Previous;
            Current.Previous.Next = NewNode;
            Current.Previous = NewNode;
            Current = NewNode;
            ListCountValue += 1;
        }
        // 進(jìn)行升序插入  
        public void InsertAscending(int InsertValue)
        {
            //參數(shù):InsertValue 插入的數(shù)據(jù)
            //為空鏈表
            if (IsNull())
            {
                //添加
                Append(InsertValue);
                return;
            }
            //移動到頭
            MoveFrist();
            if ((InsertValue < GetCurrentValue()))
            {
                //滿足條件,則插入,退出
                Insert(InsertValue);
                return;
            }
            while (true)
            {
                if (InsertValue < GetCurrentValue())
                {
                    //滿族條件,則插入,退出
                    Insert(InsertValue);
                    break;
                }
                if (IsEof())
                {
                    //尾部添加
                    Append(InsertValue);
                    break;
                }
                //移動到下一個指針
                MoveNext();
            }
        }
        //進(jìn)行降序插入
        public void InsertUnAscending(int InsertValue)
        {
            //參數(shù):InsertValue 插入的數(shù)據(jù)                      
            //為空鏈表
            if (IsNull())
            {
                //添加
                Append(InsertValue);
                return;
            }
            //移動到頭
            MoveFrist();
            if (InsertValue > GetCurrentValue())
            {
                //滿足條件,則插入,退出
                Insert(InsertValue);
                return;
            }
            while (true)
            {
                if (InsertValue > GetCurrentValue())
                {
                    //滿族條件,則插入,退出
                    Insert(InsertValue);
                    break;
                }
                if (IsEof())
                {
                    //尾部添加
                    Append(InsertValue);
                    break;
                }
                //移動到下一個指針
                MoveNext();
            }
        }
    }
}

到此這篇關(guān)于C# 單向鏈表的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C# 單向鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

开鲁县| 连平县| 临夏县| 桑日县| 亳州市| 涡阳县| 顺义区| 抚顺县| 霞浦县| 峨山| 武邑县| 五大连池市| 顺昌县| 霍城县| 南宁市| 广州市| 孟州市| 遂昌县| 嘉祥县| 鹿邑县| 保靖县| 娱乐| 图木舒克市| 常熟市| 巴彦县| 桓台县| 子洲县| 甘谷县| 阿拉善右旗| 阿拉善盟| 沅陵县| 弥渡县| 巴中市| 西林县| 开化县| 铜梁县| 岗巴县| 新营市| 新沂市| 宜宾县| 竹北市|