日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)建一個(gè)簡(jiǎn)單的線性鏈表

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

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出海陽(yáng)免費(fèi)做網(wǎng)站回饋大家。

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

1、Node 類,包含數(shù)據(jù)以及下一個(gè)Node的引用。

2、LinkedList 類,包含鏈表中的第一個(gè)Node,以及關(guān)于鏈表的任何附加信息。

3、測(cè)試程序,用于測(cè)試 LinkedList 類。

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

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

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

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

注意構(gòu)造函數(shù)將私有的數(shù)據(jù)成員設(shè)置成傳遞進(jìn)來(lái)的對(duì)象,并且將 next 字段設(shè)置成null。

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

如果當(dāng)前Node的next字段不是null,說(shuō)明當(dāng)前node不是鏈表中的最后一個(gè)node。因?yàn)閚ext字段的類型也是node,所以我們調(diào)用next字段的Append方法(注:遞歸調(diào)用),再一次傳遞Node參數(shù),這樣繼續(xù)下去,直到找到最后一個(gè)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 中的值,并且調(diào)用下一個(gè) Node 的 ToString()方法(譯注:再一次遞歸調(diào)用)。

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

這樣,當(dāng)你調(diào)用第一個(gè)Node的ToString()方法時(shí),將打印出所有鏈表上Node的值。

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

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

LinkedList 類不需要構(gòu)造函數(shù)(使用編譯器創(chuàng)建的默認(rèn)構(gòu)造函數(shù)),但是我們需要?jiǎng)?chuàng)建一個(gè)公共方法,Add(),這個(gè)方法把 data存儲(chǔ)到線性鏈表中。這個(gè)方法首先檢查headNode是不是null,如果是,它將使用data創(chuàng)建結(jié)點(diǎn),并將這個(gè)結(jié)點(diǎn)作為headNode,如果不是null,它將創(chuàng)建一個(gè)新的包含data的結(jié)點(diǎn),并調(diào)用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.     }  

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

 
 
 
  1. public object this[ int 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()方法再一次被覆蓋,用以調(diào)用headNode的ToString()方法。

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

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

【編輯推薦】

  1. C# winForm自定義鼠標(biāo)樣式的兩種方法
  2. C#自定義消息框的設(shè)置圖解
  3. 掌握C#自定義泛型類:從初始化說(shuō)起
  4. C#存儲(chǔ)過(guò)程的循序漸進(jìn)
  5. 存儲(chǔ)過(guò)程的優(yōu)勢(shì)及其調(diào)用方法介紹

當(dāng)前文章:創(chuàng)建一個(gè)簡(jiǎn)單的線性鏈表
網(wǎng)站鏈接:http://www.5511xx.com/article/cdcdshp.html