成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

創建一個簡單的線性鏈表

開發 后端
本文介紹了一個線性鏈表,簡單地介紹了一下其創建方法。

對于閱讀本文的那些從未創建過線性鏈表的人。你可以將線性鏈表想像成有一條鏈子栓在一起的盒子(稱作一個結點),每個盒子里包含著一些數據 和 鏈接到這個鏈子上的下一個盒子的引用(當然,除了最后一個盒子,這個盒子對于下一個盒子的引用被設置成NULL)。

為了創建我們的簡單線性鏈表,我們需要下面三個類:

1、Node 類,包含數據以及下一個Node的引用。

2、LinkedList 類,包含鏈表中的第一個Node,以及關于鏈表的任何附加信息。

3、測試程序,用于測試 LinkedList 類。

為了查看鏈接表如何運作,我們添加Objects的兩種類型到鏈表中:整型 和 Employee類型。你可以將Employee類型想象成一個包含關于公司中某一個員工所有信息的類。出于演示的目的,Employee類非常的簡單。

  1. public class Employee{  
  2.   private string name;  
  3.   public Employee (string name){  
  4.     this.name = name;  
  5.   }  
  6.  
  7.   public override string ToString(){  
  8.    return this.name;  
  9.   }  

這個類僅包含一個表示員工名字的字符串類型,一個設置員工名字的構造函數,一個返回Employee名字的ToString()方法。

鏈接表本身是由很多的Node構成,這些Note,如上面所說,必須包含數據(整型 和 Employee)和鏈表中下一個Node的引用。

  1. public class Node{  
  2.     Object data;  
  3.     Node next;  
  4.  
  5.     public Node(Object data){  
  6.        this.data = data;  
  7.        this.next = null;  
  8.     }  
  9.  
  10.     public Object Data{   
  11.        get { return this.data; }  
  12.        set { data = value; }  
  13.     }  
  14.  
  15.     public Node Next{  
  16.         get { return this.next; }  
  17.        set { this.next = value; }  
  18.     }  

注意構造函數將私有的數據成員設置成傳遞進來的對象,并且將 next 字段設置成null。

這個類還包括一個方法,Append,這個方法接受一個Node類型的參數,我們將把傳遞進來的Node添加到列表中的最后位置。這過程是這樣的:首先檢測當前Node的next字段,看它是不是null。如果是,那么當前Node就是最后一個Node,我們將當前Node的next屬性指向傳遞進來的新結點,這樣,我們就把新Node插入到了鏈表的尾部。

如果當前Node的next字段不是null,說明當前node不是鏈表中的最后一個node。因為next字段的類型也是node,所以我們調用next字段的Append方法(注:遞歸調用),再一次傳遞Node參數,這樣繼續下去,直到找到最后一個Node為止。

  1. public void Append(Node newNode){  
  2.     if ( this.next == null ){  
  3.        this.next = newNode;  
  4.     }else{  
  5.        next.Append(newNode);  
  6.     }  

Node 類中的 ToString() 方法也被覆蓋了,用于輸出 data 中的值,并且調用下一個 Node 的 ToString()方法(譯注:再一次遞歸調用)。

  1. public override string ToString(){  
  2.     string output = data.ToString();  
  3.  
  4.     if ( next != null ){  
  5.        output += ", " + next.ToString();  
  6.     }  
  7.  
  8.     return output;  

這樣,當你調用第一個Node的ToString()方法時,將打印出所有鏈表上Node的值。

LinkedList 類本身只包含對一個Node的引用,這個Node稱作 HeadNode,是鏈表中的第一個Node,初始化為null。

  1. public class LinkedList{  
  2.     Node headNode = null;  

LinkedList 類不需要構造函數(使用編譯器創建的默認構造函數),但是我們需要創建一個公共方法,Add(),這個方法把 data存儲到線性鏈表中。這個方法首先檢查headNode是不是null,如果是,它將使用data創建結點,并將這個結點作為headNode,如果不是null,它將創建一個新的包含data的結點,并調用headNode的Append方法,如下面的代碼所示:

  1. public void Add(Object data){  
  2.     if ( headNode == null ){  
  3.        headNode = new Node(data);  
  4.     }else{  
  5.        headNode.Append(new Node(data));  
  6.     }  

為了提供一點集合的感覺,我們為線性鏈表創建一個索引器。

  1. public object thisint index ]{  
  2.     get{  
  3.        int ctr = 0;  
  4.        Node node = headNode;  
  5.        while ( node != null  && ctr <  = index ){  
  6.            if ( ctr == index ){  
  7.               return node.Data;  
  8.            }else{  
  9.               node = node.Next;  
  10.            }  
  11.            ctr++;  
  12.         }  
  13.     return null;  
  14.     }  

最后,ToString()方法再一次被覆蓋,用以調用headNode的ToString()方法。

  1. public override string ToString(){  
  2.     if ( this.headNode != null ){  
  3.        return this.headNode.ToString();  
  4.     }else{  
  5.        return string.Empty;  
  6.     }  

這樣,一個線性鏈表就創建好了。

【編輯推薦】

  1. C# winForm自定義鼠標樣式的兩種方法
  2. C#自定義消息框的設置圖解
  3. 掌握C#自定義泛型類:從初始化說起
  4. C#存儲過程的循序漸進
  5. 存儲過程的優勢及其調用方法介紹
責任編輯:book05 來源: csdn
相關推薦

2011-04-08 10:29:04

AccessMIS管理系統

2011-03-15 19:45:27

Windows Azu

2015-03-24 19:48:24

2011-03-24 09:34:41

SPRING

2023-02-27 09:31:00

streamlitst.sidebar菜單

2018-11-22 14:09:45

iOS架構組件開發

2023-02-07 10:40:30

gRPC系統Mac

2009-07-14 16:02:42

JDBC例子

2020-11-09 06:38:00

ninja構建方式構建系統

2011-09-08 13:41:53

Widget

2011-04-12 14:58:23

加密解密類

2019-11-07 14:00:36

MySQL數據庫SQL

2016-09-21 12:54:10

CAAS系統鏡像

2016-11-08 18:53:08

編譯器

2022-10-31 08:27:53

Database數據數據庫

2017-08-17 16:37:59

MySQL數據遷移

2013-04-25 09:55:21

進程線程

2021-11-04 10:29:01

CSS前端

2021-10-28 22:46:13

Python機器人數據

2020-03-26 17:00:53

HashMapputJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩av免费在线电影 | 手机在线一区二区三区 | 亚洲精品欧美一区二区三区 | 在线观看h视频 | 亚洲欧美日韩久久久 | 国产情侣啪啪 | wwwsihu| 日韩在线免费视频 | 性色在线 | 久久久久九九九女人毛片 | 国产综合久久久久久鬼色 | 亚洲国产区| 久久久久中文字幕 | 午夜视频在线视频 | 日韩av免费看 | 免费观看www | 欧美亚洲国产日韩 | 久久一 | 精品成人在线视频 | 日本成人在线免费视频 | 欧美video | 国产伦精品一区二区三区照片91 | 韩日在线视频 | 欧美亚洲国语精品一区二区 | 99国内精品久久久久久久 | 亚洲精品成人av | 特级黄一级播放 | 国产一区二区美女 | 欧美男人天堂 | 蜜桃视频在线观看免费视频网站www | 国产精品久久久久久久久久免费看 | 日韩精品在线播放 | 自拍第一页 | 久久久激情视频 | 亚洲性综合网 | 久久久成人网 | 亚洲国产精品视频 | 成人免费看黄网站在线观看 | 午夜色播| 欧美性吧 | 亚洲国产视频一区二区 |