亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析

 更新時(shí)間:2016年04月21日 15:03:19   作者:靈犀  
這篇文章主要介紹了C#模擬鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例解析,包括隊(duì)雙向鏈表的模擬方法,例子中隊(duì)鏈表的操作也有很好的說(shuō)明,需要的朋友可以參考下

寫(xiě)在前面

模塊化編程是大多數(shù)初學(xué)者必經(jīng)之路,然后可能你走向了結(jié)構(gòu)化編程,鏈表是一種典型結(jié)構(gòu)模式,它的出現(xiàn)克服了數(shù)組必須預(yù)先知道大小的缺陷,聽(tīng)不懂?你只需要記住,鏈表結(jié)構(gòu)非常牛叉就可以了,學(xué)習(xí)這種結(jié)構(gòu)對(duì)我們的邏輯思維有很大提升。

什么是鏈表結(jié)構(gòu)呢?

鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu)。比如A->B->C,這種結(jié)構(gòu),我們可以理解為A連接著B(niǎo),B連接C,像這種結(jié)構(gòu)我們就叫做鏈表結(jié)構(gòu)。對(duì)了,火車的車廂,其實(shí)就是鏈表的結(jié)構(gòu)的最好說(shuō)明

為什么要有鏈表結(jié)構(gòu)呢?

學(xué)過(guò)計(jì)算機(jī)的都知道數(shù)組(Array),數(shù)組常用切好用,但也存在問(wèn)題。首先,數(shù)組必須需要知道空間大?。╥nt[] age = new int[100], 必須聲明長(zhǎng)度),其次,對(duì)于元素之間插入、刪除操作效率很低(如何在數(shù)組中間插入一個(gè)元素?)。

鏈表的出現(xiàn),完美的解決了這些問(wèn)題。

如何實(shí)現(xiàn)鏈表

首先我們需要聲明一種結(jié)構(gòu)

//鏈表結(jié)構(gòu): 構(gòu)造節(jié)點(diǎn) - 連接節(jié)點(diǎn)
//Template
class Node
{
  public int num;
  //指向下一個(gè)元素
  public Node next;
}

//鏈表結(jié)構(gòu): 構(gòu)造節(jié)點(diǎn) - 連接節(jié)點(diǎn)
//Template
class Node
{
  public int num;
  //指向下一個(gè)元素
  public Node next;
}


我們可以把上面的這種結(jié)構(gòu)看做是一個(gè)禮品盒,可以存放整形數(shù)值。

然后我們創(chuàng)建一個(gè)MyList先生,這位先生就使用Node去存放整形物品,而且使用了鏈表結(jié)構(gòu)哦!

class MyList
{
  public Node currentNode;
  public Node point;
  public MyList()
  {
    currentNode = new Node();
  }
  //存放物品
  public void Add(int value)
  {
    //第一次
    if(point == null)
    {
      currentNode.num = value;
      point = currentNode;
    }
    else  //2 3 4..... 次
    {
      Node temp = new Node();
      temp.num = value;
      point.next = temp;
      //更新指針
      point = temp;
    }

  }
}

class MyList
{
  public Node currentNode;
  public Node point;
  public MyList()
  {
    currentNode = new Node();
  }
  //存放物品
  public void Add(int value)
  {
    //第一次
    if(point == null)
    {
      currentNode.num = value;
      point = currentNode;
    }
    else  //2 3 4..... 次
    {
      Node temp = new Node();
      temp.num = value;
      point.next = temp;
      //更新指針
      point = temp;
    }
 
  }
}


然后,我們可以在客戶端測(cè)試一下:

public static void Main (string[] args)
{
  MyList<int> mList = new MyList<int>();
  //添加元素
  mList.Add(1);
  mList.Add(11);
  mList.Add(111);
  mList.Add(1111);
  while(mList.currentNode != null)
  {
    Console.WriteLine (mList.currentNode.num);
    mList.currentNode = mList.currentNode.next;
  }
}

public static void Main (string[] args)
{
  MyList<int> mList = new MyList<int>();
  //添加元素
  mList.Add(1);
  mList.Add(11);
  mList.Add(111);
  mList.Add(1111);
  while(mList.currentNode != null)
  {
    Console.WriteLine (mList.currentNode.num);
    mList.currentNode = mList.currentNode.next;
  }
}


我們自己定義的一個(gè)整形集合就這樣ok了。它有兩個(gè)優(yōu)點(diǎn):可以存放任意多個(gè)元素!方便元素的插入和刪除。

雙向鏈表的定義和簡(jiǎn)單操作:

雙向鏈表其實(shí)是單鏈表的改進(jìn)。當(dāng)我們對(duì)單鏈表進(jìn)行操作時(shí),有時(shí)你要對(duì)某個(gè)結(jié)點(diǎn)的直接前驅(qū)進(jìn)行操作時(shí),又必須從表頭開(kāi)始查找。這是由單鏈表結(jié)點(diǎn)的結(jié)構(gòu)所限制的。因?yàn)閱捂湵砻總€(gè)結(jié)點(diǎn)只有一個(gè)存儲(chǔ)直接后繼結(jié)點(diǎn)地址的鏈域,那么能不能定義一個(gè)既有存儲(chǔ)直接后繼結(jié)點(diǎn)地址的鏈域,又有存儲(chǔ)直接前驅(qū)結(jié)點(diǎn)地址的鏈域的這樣一個(gè)雙鏈域結(jié)點(diǎn)結(jié)構(gòu)呢?這就是雙向鏈表。在雙向鏈表中,結(jié)點(diǎn)除含有數(shù)據(jù)域外,還有兩個(gè)鏈域,一個(gè)存儲(chǔ)直接后繼結(jié)點(diǎn)地址,一般稱之為右鏈域;一個(gè)存儲(chǔ)直接前驅(qū)結(jié)點(diǎn)地址,一般稱之為左鏈域。

namespace DounlyLinkedlist
{
  //定義雙向鏈表的結(jié)點(diǎn)
  public class Node
  {
    public Object Element;
    public Node FLink;
    public Node BLink;

    public Node()
    {
      Element = null;
      FLink = null;
      BLink = null;
    }

    public Node(Object element)
    {
      Element = element;
      FLink = null;
      BLink = null;
    }

  }

  //鏈表操作的類
  public class LinkedList
  {
    
    public Node Header;

    public LinkedList()
    {
      Header = new Node("Header");
      Header.FLink = null;
      Header.BLink = null; 
    }

    //查找結(jié)點(diǎn)
    private Node Find(Object item)
    {
      Node Current = new Node();
      Current = Header;
      while (Current.Element != item)
      {
        Current = Current.FLink;
      }
      return Current;
    }

    //插入結(jié)點(diǎn)
    public void InsertNode(Object item,Object postionItem)
    {
      Node Current = new Node();
      Node NewItem = new Node(item);
      Current = Find(postionItem);
      if (Current != null)
      {
        NewItem.FLink = Current.FLink;
        NewItem.BLink = Current;
        Current.FLink = NewItem;
      }
    }

    //刪除結(jié)點(diǎn)
    public void Remove(Object item)
    {
      Node P = Find(item);
      if (P.FLink != null)
      {
        P.BLink.FLink = P.FLink;
        P.FLink.BLink = P.BLink;
        P.BLink = null;
        P.FLink = null;
      }
      
    }


    //查找雙向鏈表最后一個(gè)結(jié)點(diǎn)元素
    private Node FindLast()
    {
      Node Current = new Node();
      Current = Header;
      while (!(Current.FLink == null))
      {
        Current = Current.FLink;
      }
      return Current;
    }


    //逆向打印雙向鏈表
    public void PrintReverse()
    {
      Node Current = new Node();
      Current = FindLast();
      while (!(Current.BLink == null))
      {
        Console.WriteLine(Current.Element);
        Current = Current.BLink;
      }
    }

    //打印雙向鏈表
    public void Print()
    {
      Node Current = new Node();
      Current = Header;
      while (!(Current.FLink == null))
      {
        Console.WriteLine(Current.FLink.Element);
        Current = Current.FLink;
      }
    }
  }
}

鏈表應(yīng)用場(chǎng)景

應(yīng)用場(chǎng)景:集合(動(dòng)態(tài)數(shù)組)、貪吃蛇、地圖的循環(huán)生成、老虎機(jī)效果等等,鏈表可以幫助我們完成很多事情。

相關(guān)文章

  • C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫(kù)及密碼的方法

    C#動(dòng)態(tài)創(chuàng)建Access數(shù)據(jù)庫(kù)及密碼的方法

    同為微軟的產(chǎn)品,本文將討論的是C#如何創(chuàng)建Access數(shù)據(jù)庫(kù),同時(shí)創(chuàng)建數(shù)據(jù)庫(kù)密碼與相關(guān)操作,希望對(duì)大家有所幫助。
    2015-09-09
  • C#中Dictionary泛型集合7種常見(jiàn)的用法

    C#中Dictionary泛型集合7種常見(jiàn)的用法

    本文主要介紹了Dictionary集合的7種最基礎(chǔ)的用法,包括創(chuàng)建、添加、查找、遍歷、刪除等方法,程序都是由簡(jiǎn)入繁,希望能通過(guò)閱讀簡(jiǎn)單的示例,給大家一些啟發(fā)。
    2016-03-03
  • C#操作XML文件步驟

    C#操作XML文件步驟

    在本篇文章里小編給大家分享了關(guān)于C#操作XML文件步驟教學(xué)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2019-01-01
  • C#結(jié)束Excel進(jìn)程的步驟教學(xué)

    C#結(jié)束Excel進(jìn)程的步驟教學(xué)

    在本篇文章里小編給大家分享了關(guān)于C#結(jié)束Excel進(jìn)程的步驟教學(xué)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-01-01
  • C#引用類型作為方法的參數(shù)分析

    C#引用類型作為方法的參數(shù)分析

    這篇文章主要介紹了C#引用類型作為方法的參數(shù)分析,以實(shí)例的形式較為詳細(xì)的分析了參數(shù)的傳值問(wèn)題,需要的朋友可以參考下
    2014-11-11
  • C#約瑟夫問(wèn)題解決方法

    C#約瑟夫問(wèn)題解決方法

    這篇文章主要介紹了C#約瑟夫問(wèn)題解決方法,較為詳細(xì)的分析了約瑟夫問(wèn)題及C#解決技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#實(shí)現(xiàn)簡(jiǎn)單串口通信的示例詳解

    C#實(shí)現(xiàn)簡(jiǎn)單串口通信的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)串口通信的相關(guān)知識(shí),文中示例代碼介紹的非常詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴們可以跟隨小編一起了解一下
    2023-10-10
  • 不安裝excel使用c#創(chuàng)建excel文件

    不安裝excel使用c#創(chuàng)建excel文件

    這篇文章主要介紹了使用c#創(chuàng)建excel的示例,剛時(shí)給出了不安裝excel也可創(chuàng)建excel的方法,需要的朋友可以參考下
    2014-02-02
  • C#幾種排序算法

    C#幾種排序算法

    C#幾種排序算法...
    2007-03-03
  • C#中把字符串String轉(zhuǎn)換為整型Int的小例子

    C#中把字符串String轉(zhuǎn)換為整型Int的小例子

    這篇文章主要介紹了C#中把字符串String轉(zhuǎn)換為整型Int的小例子,本文使用TryParse方法實(shí)現(xiàn)轉(zhuǎn)換,需要的朋友可以參考下
    2014-08-08

最新評(píng)論