亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C# 數據結構--單鏈表

2019-11-17 02:31:58
字體:
來源:轉載
供稿:網友

C# 數據結構--單鏈表

什么是單鏈表

  這兩天看到很多有關單鏈表的面試題,對單鏈表都不知道是啥的我。經過學習和整理來分享一下啥是單鏈表和單鏈表的一些基本使用方法。最后看些網上有關單鏈表的面試題代碼實例。

啥是單鏈表?

  單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。這組存儲單元既可以是連續的,也可以是不連續的。

  鏈表中的數據是以結點來表示的,每個結點的構成:元素(數據元素的映象) +指針(指示后繼元素存儲位置),元素就是存儲數據的存儲單元,指針就是連接每個結點的地址數據。

  鏈表的結點結構:

┌───┬───┐ │data│next│ └───┴───┘  data域--存放結點值的數據域[元素]  next域--存放結點的直接后繼的地址(位置)的指針域(鏈域)[指針]  用張圖來說明一下上面的定義:在VS中看到單鏈表的結構如下圖:

實例代碼

單鍵表結點類-泛型
public class Node<T>{    public T Data { set; get; }          //數據域,當前結點數據    public Node<T> Next { set; get; }    //位置域,下一個結點地址    public Node(T item)    {        this.Data = item;        this.Next = null;    }    public Node()    {        this.Data = default(T);        this.Next = null;    }}

public class LinkList<T>{    public Node<T> Head { set; get; } //單鏈表頭    //構造    public LinkList()    {        Head=null;    }    /// <summary>    /// 增加新元素到單鏈表末尾    /// </summary>    public void Append(T item)    {        Node<T> foot = new Node<T>(item);        Node<T> A = new Node<T>();        if (Head == null)        {            Head = foot;            return;        }        A = Head;        while (A.Next != null)        {            A = A.Next;        }        A.Next = foot;    }}

1.如果增加的是頭結點。直接把數據域(Data)給Head,Next為空。因為只有一個頭結點,沒有對應的下結點。

2.單鏈表是”不走回頭路“,所以每次增加都要從單鏈表的頭開始找到單鏈表最后一個結點(最后一個結點就是Next為NULL),然后把最后一個結點的Next設置成需增加的結點,這時要需增加的結點變身為最后一結點,他的Next為NULL。

public class LinkList<T>{    public Node<T> Head { set; get; } //單鏈表頭    //構造    public LinkList()    {        Head=null;    }    public void Delete(int i)    {        Node<T> A = new Node<T>();        if (i == 1)   //刪除頭        {            A = Head;            Head = Head.Next;            return;        }        Node<T> B = new Node<T>();        B = Head;        int j = 1;        while (B.Next != null && j < i)        {            A = B;            B = B.Next;            j++;        }        if (j == i)        {            A.Next = B.Next;        }    }}

1.如果刪除的是頭結點,那現在的頭結點就應該是頭結點的下一結點。

2.刪除結點如果不是頭結點。從單鏈表頭開始查詢要刪除結點的位置。并記錄刪除的前一結點值A和所要刪除的結點B。因為結點B被刪除了,所以結點A的Next就應該為B的Next。把結點A的Next設置為結點B的Next。

單鏈表類

public class LinkList<T>{    public Node<T> Head { set; get; } //單鏈表頭    //構造    public LinkList()    {        Clear();    }    /// <summary>    /// 求單鏈表的長度    /// </summary>    /// <returns></returns>    public int GetLength()    {        Node<T> p = Head;        int length = 0;        while (p != null)        {            p = p.Next;            length++;        }        return length;    }    /// <summary>    /// 判斷單鍵表是否為空    /// </summary>    /// <returns></returns>    public bool IsEmpty()    {        if (Head == null)            return true;        else            return false;    }    /// <summary>    /// 清空單鏈表    /// </summary>    public void Clear()    {        Head = null;    }    /// <summary>    /// 獲得當前位置單鏈表中結點的值    /// </summary>    /// <param name="i">結點位置</param>    /// <returns></returns>    public T GetNodeValue(int i)    {        if (IsEmpty() || i<1 || i>GetLength())        {            Console.WriteLine("單鏈表為空或結點位置有誤!");            return default(T);        }        Node<T> A = new Node<T>();        A = Head;        int j = 1;        while (A.Next!=null && j<i)        {            A = A.Next;            j++;        }        return A.Data;    }    /// <summary>    /// 增加新元素到單鏈表末尾    /// </summary>    public void Append(T item)    {        Node<T> foot = new Node<T>(item);        Node<T> A = new Node<T>();        if (Head == null)        {            Head = foot;            return;        }        A = Head;        while (A.Next != null)        {            A = A.Next;        }        A.Next = foot;    }    /// <summary>    /// 增加單鏈表插入的位置    /// </summary>    /// <param name="item">結點內容</param>    /// <param name="n">結點插入的位置</param>    public void Insert(T item, int n)    {        if (IsEmpty() || n < 1 || n > GetLength())        {            Console.WriteLine("單鏈表為空或結點位置有誤!");            return;        }        if (n == 1)  //增加到頭部        {            Node<T> H = new Node<T>(item);            H.Next = Head;            Head = H;            return;        }        Node<T> A = new Node<T>();        Node<T> B = new Node<T>();        B = Head;        int j = 1;        while (B.Next != null && j < n)        {            A = B;            B = B.Next;            j++;        }        if (j==n)        {            Node<T> C = new Node<T>(item);            A.Next = C;            C.Next = B;        }    }    /// <summary>    /// 刪除單鏈表結點    /// </summary>    /// <param name="i">刪除結點位置</param>    /// <returns></returns>    public void Delete(int i)    {        if (IsEmpty() || i < 1 || i > GetLength())        {            Console.WriteLine("單鏈表為空或結點位置有誤!");            return;        }        Node<T> A = new Node<T>();        if (i == 1)   //刪除頭        {            A = Head;            Head = Head.Next;            return;        }        Node<T> B = new Node<T>();        B = Head;        int j = 1;        while (B.Next != null && j < i)        {            A = B;            B = B.Next;            j++;        }        if (j == i)        {            A.Next = B.Next;        }    }    /// <summary>    /// 顯示單鏈表    /// </summary>    public void Dispaly()    {        Node<T> A = new Node<T>();        A = Head;        while (A != null)        {            Console.WriteLine(A.Data);            A = A.Next;        }    }    #region 面試題    /// <summary>    /// 單鏈表反轉    /// </summary>    public void Reverse()     {        if (GetLength()==1 || Head==null)        {            return;        }        Node<T> NewNode = null;        Node<T> CurrentNode = Head;        Node<T> TempNode = new Node<T>();        while (CurrentNode!=null)        {            TempNode = CurrentNode.Next;            CurrentNode.Next = NewNode;            NewNode = CurrentNode;            CurrentNode = TempNode;        }        Head = NewNode;        Dispaly();    }    /// <summary>    /// 獲得單鏈表中間值    /// 思路:使用兩個指針,第一個每次走一步,第二個每次走兩步:    /// </summary>    public void GetMiddleValue()    {        Node<T> A = Head;        Node<T> B = Head;        while (B!=null && B.Next!=null)        {            A = A.Next;            B = B.Next.Next;        }        if (B != null) //奇數        {            Console.WriteLine("奇數:中間值為:{0}", A.Data);        }        else    //偶數        {            Console.WriteLine("偶數:中間值為:{0}和{1}", A.Data, A.Next.Data);        }    }    #endregion}
View Code

調用實例

static void Main(string[] args){    LinkList<string> link = new LinkList<string>();    link.Append("A");    link.Append("B");    link.Append("C");    link.Append("D");    link.Append("E");    link.Insert("Head", 1);    Console.WriteLine("單鏈表內容:");    link.Dispaly();    link.Delete(5);    Console.Write
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品国产精品大乳美女| 色综合色综合网色综合| 欧美色图在线视频| 日韩高清电影好看的电视剧电影| x99av成人免费| 国产精品丝袜久久久久久高清| 日韩免费观看视频| 亚洲精品久久久久久久久久久久久| 国产精品av在线播放| 欧美激情亚洲激情| 2019精品视频| 亚洲成人av在线| 久久久久久亚洲精品中文字幕| 97在线免费观看| 国产亚洲精品久久久久久777| 日韩av片免费在线观看| 国产综合视频在线观看| 国产69精品99久久久久久宅男| 精品国内亚洲在观看18黄| 欧美在线影院在线视频| 国产精品久久久久9999| 欧美日韩国产综合新一区| 中文字幕亚洲欧美日韩2019| 国产精品视频一区二区高潮| 欧美一区亚洲一区| 国产丝袜精品第一页| 精品中文字幕在线2019| 伊人一区二区三区久久精品| 久久久中文字幕| 精品国产一区二区三区久久久狼| 成人美女免费网站视频| 亚洲国产成人精品久久久国产成人一区| 91精品国产自产在线老师啪| 日韩免费av片在线观看| 国产一区二区三区18| 欧美激情视频一区二区三区不卡| 日韩欧美中文字幕在线播放| 中文字幕亚洲二区| 久久影院资源网| 欧美怡红院视频一区二区三区| 成人网中文字幕| 欧美性极品xxxx娇小| 久久精品在线播放| 欧美肥臀大乳一区二区免费视频| 欧美成人精品在线视频| 精品久久久久久国产| 91久久久久久久久久久久久| 国产精品国产三级国产专播精品人| 亚洲精品福利在线| 日韩av片电影专区| 国产精品美女网站| 久久免费视频网站| 国产成+人+综合+亚洲欧洲| 亚洲欧美中文日韩在线v日本| 欧美电影在线免费观看网站| 奇米四色中文综合久久| 成人欧美一区二区三区黑人孕妇| 欧美亚洲国产视频小说| 欧美日本亚洲视频| 国产亚洲免费的视频看| 欧美中文字幕视频| 久久精品影视伊人网| 97精品免费视频| 亚洲成人激情在线| 久久6免费高清热精品| 色偷偷亚洲男人天堂| 国产精品亚洲网站| 亚洲高清不卡av| 亚洲韩国日本中文字幕| 欧美日韩精品在线播放| 亚洲精品日韩丝袜精品| 亚洲美女在线观看| 亚洲美女视频网站| 色综合天天狠天天透天天伊人| 亚洲xxxx在线| 4438全国成人免费| 久国内精品在线| 久久不射电影网| 91在线高清免费观看| 亚洲成人av在线| 欧美极品第一页| 亚洲欧洲日产国产网站| 国产精品国语对白| 国产精品久久久久久久久粉嫩av| 国产丝袜视频一区| 亚洲国产精品国自产拍av秋霞| 久热在线中文字幕色999舞| 精品国产精品自拍| 国产精品美女久久| 日韩中文在线中文网三级| 亚洲第一国产精品| 日韩视频在线免费| 福利精品视频在线| 国模极品一区二区三区| 国产精品大陆在线观看| 亚洲免费电影在线观看| 97福利一区二区| 韩国v欧美v日本v亚洲| 亚洲第一天堂无码专区| 午夜精品久久久久久久久久久久久| 国产一区玩具在线观看| 久久久午夜视频| 成人日韩在线电影| 国产免费一区二区三区在线能观看| 亚洲风情亚aⅴ在线发布| 伊人久久免费视频| 久久精品电影网站| 成人黄在线观看| 国产精品成人观看视频国产奇米| 午夜免费在线观看精品视频| 国模精品视频一区二区三区| 亚洲视频日韩精品| 成人黄色片网站| 精品一区精品二区| 色yeye香蕉凹凸一区二区av| 国产精品欧美风情| 国产精品久久久久秋霞鲁丝| 欧美视频不卡中文| 久久91亚洲精品中文字幕奶水| 亚洲bt欧美bt日本bt| 日韩中文字幕视频| 日韩欧美国产高清91| 91视频国产一区| 久久综合久中文字幕青草| 欧美日韩国产页| 黄色成人在线播放| 国产精品福利久久久| 亚洲 日韩 国产第一| 国产精品男女猛烈高潮激情| www.日本久久久久com.| 国产精品久久婷婷六月丁香| 成人黄色av网| 91精品国产99久久久久久| 91精品久久久久久| 久久久久久久久久久网站| 欧美精品精品精品精品免费| 欧美成人精品在线| 成人精品久久久| 日韩在线国产精品| 欧美一级视频一区二区| 亚州欧美日韩中文视频| 国产精品亚洲精品| 国产美女被下药99| 国自产精品手机在线观看视频| 这里只有精品丝袜| 亚洲国产精品一区二区三区| 亚洲第一精品电影| 亚洲精品美女久久久久| 91国内揄拍国内精品对白| 久久视频在线观看免费| 国产精品入口夜色视频大尺度| 97久久精品人搡人人玩| 中文字幕亚洲字幕| 欧美国产在线电影| 国产精品入口尤物| 在线视频中文亚洲| 国产精品久久久久久婷婷天堂| 成人xxxxx| 68精品国产免费久久久久久婷婷| 中文字幕视频在线免费欧美日韩综合在线看| 久久久精品免费| 国产精品激情自拍| 精品视频在线播放色网色视频| 亚洲精品91美女久久久久久久|