自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

創(chuàng)建一個簡單的線性鏈表

開發(fā) 后端
本文介紹了一個線性鏈表,簡單地介紹了一下其創(chuàng)建方法。

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

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

1、Node 類,包含數(shù)據(jù)以及下一個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.   }  

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

鏈接表本身是由很多的Node構成,這些Note,如上面所說,必須包含數(shù)據(jù)(整型 和 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.     }  

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

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

如果當前Node的next字段不是null,說明當前node不是鏈表中的最后一個node。因為next字段的類型也是node,所以我們調用next字段的Append方法(注:遞歸調用),再一次傳遞Node參數(shù),這樣繼續(xù)下去,直到找到最后一個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 類不需要構造函數(shù)(使用編譯器創(chuàng)建的默認構造函數(shù)),但是我們需要創(chuàng)建一個公共方法,Add(),這個方法把 data存儲到線性鏈表中。這個方法首先檢查headNode是不是null,如果是,它將使用data創(chuàng)建結點,并將這個結點作為headNode,如果不是null,它將創(chuàng)建一個新的包含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.     }  

為了提供一點集合的感覺,我們?yōu)榫€性鏈表創(chuàng)建一個索引器。

  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.     }  

這樣,一個線性鏈表就創(chuàng)建好了。

【編輯推薦】

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

2011-04-08 10:29:04

AccessMIS管理系統(tǒng)

2015-03-24 19:48:24

2011-03-15 19:45:27

Windows Azu

2011-03-24 09:34:41

SPRING

2023-02-27 09:31:00

streamlitst.sidebar菜單

2018-11-22 14:09:45

iOS架構組件開發(fā)

2023-02-07 10:40:30

gRPC系統(tǒng)Mac

2009-07-14 16:02:42

JDBC例子

2020-11-09 06:38:00

ninja構建方式構建系統(tǒng)

2021-10-28 22:46:13

Python機器人數(shù)據(jù)

2011-09-08 13:41:53

Widget

2016-09-21 12:54:10

CAAS系統(tǒng)鏡像

2022-10-31 08:27:53

Database數(shù)據(jù)數(shù)據(jù)庫

2011-04-12 14:58:23

加密解密類

2019-11-07 14:00:36

MySQL數(shù)據(jù)庫SQL

2021-11-04 10:29:01

CSS前端

2016-11-08 18:53:08

編譯器

2017-08-17 16:37:59

MySQL數(shù)據(jù)遷移

2013-04-25 09:55:21

進程線程

2018-09-18 10:11:21

前端vue.jsjavascript
點贊
收藏

51CTO技術棧公眾號