`
nlx0201
  • 浏览: 28829 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

C#数据结构和算法学习系列十三----链表

 
阅读更多

链表是被称为节点的类对象的群集。每一个节点通过一个引用链接到列表内的后继节点上。节点包括存储数据的字段和节点引用的字段。到另外一个节点的引用被称为是链接。数组和链表之间的一个主要区别就是数组内的元素是通过位置(索引)进行引用的,而链表内的元素则是通过它们与数组其他元素的关系进行引用的。

1.面向对象链表的设计。链表的设计至少包含两个类。这里会创建一个Node 类,而且每次向链表添加节点的时候会实例化一个Node 对象。链表内的节点通过索引与其他节点相互连接在一起。而且把这些索引设置为使用创建在一个独立的LinkedList 类中的方法。节点是由两个数据成员组成的:存储着节点数据的Element,以及存储着指向表内下一节点引用的Link。这里会使用Object 作为Element 的数据类型,所以也就不用担心存储在表内的数据的类型了。Link 的数据类型是Node,这看似很奇怪,但实际上是很容易理解的。因为要把链接指向下一个节点,而且是用索引来作为这个链接,所以需要把成员Link 设置为Node 类型。如下:

public class Node
{
     public Object Element;
     public Node Link;
     public Node()
     {
          Element = null;
          Link = null;
     }
     public Node(Object theElement)
     {
          Element = theElement;
          Link = null;
     }
}

LinkedList 类用来创建链表中节点之间的链接。这个类包括几种方法,有把节点添加到链表的方法,有从链表中移除节点的方法,有遍历链表的方法,还有找到链表内节点的方法。此外,还需要一种构造器方法来实例化链表。此类中唯一的数据成员就是头节点。如下:

public class LinkedList
{
     protected Node header;
     public LinkedList()//构造方法实例化一个节点
     {
          header = new Node(" header");
     }
     private Node Find(Object item)//查找节点
     {
          Node current = new Node();
          current = header;
          while (current. Element != item)
               current = current.Link;
          return current;
     }
     public void Insert(Object newItem, Object after)//在查找的节点前面加入节点
     {
          Node current = new Node();
          Node newNode = new Node(newItem);
          current = Find(after);
          newNode.Link = current.Link;
          current.Link = newNode;
     }
     private Node FindPrevious(Object n)//查找前一个节点
     {
          Node current = header;
          while (!(current.Link == null) && (current.Link.Element != n))
               current = current.Link;
          return current;
     }
     public void Remove(Object n)//移除节点
     {
          Node p = FindPrevious(n);
          if (!(p.Link == null))
               p.Link = p.Link.Link;
     }
     public void PrintList()
     {
          Node current = new Node();
          current = header;
          while (!(current.Link == null))
          {
               Console.WriteLine(current.Link.Element);
               current = current.Link;
          }
     }
}

2.通用的Node类和LinkedList类。System.Collections.Generic 命名空间为构建链表提供了两种通用的类:LinkedList 类和LinkedListNode 类。Node 类为存储数值和链接提供了两个数据字段,而LinkedList 类则用在节点前以及在节点后的插入方法实现了双向链表。这个类还提供了其他方法,包括移除节点的方法,找到链表内首节点和尾节点的方法,当然还有其他有用的方法。

using System;
using System.Collections.Generic;
using System.Text;
class Program
{
     static void Main(string[] args)
     {
          LinkedListNode<string> node = new
          LinkedListNode<string>("Mike");
          LinkedList<string> names = new LinkedList<string>();
          names.AddFirst(node);
          LinkedListNode<string> node1 = new LinkedListNode<string>("David");
          names.AddAfter(node, node1);
          LinkedListNode<string> node2 = new LinkedListNode<string>("Raymond");
          names.AddAfter(node1, node2);
          LinkedListNode<string> node3 = new LinkedListNode<string>(null);
          LinkedListNode<string> aNode = names.First;
          while (aNode != null)
          {
               Console.WriteLine(aNode.Value);
               aNode = aNode.Next;
          }
          aNode = names.Find(" David");
          if (aNode != null) aNode = names.First;
          while (aNode != null)
          {
               Console.WriteLine(aNode.Value);
               aNode = aNode.Next;
          }
          Console.Read();
     }
}


分享到:
评论

相关推荐

    C#链表操作

    C#数据结构和算法是基本知识,只有掌握这些算法和结构,才能继续学习很深的语法结构。此链表操作设计简单的应用。

    数据结构 C#语言版 1

    1 1 1 学习数据结构的必要性 1 1 1 2 基本概念和术语 1 1 2 算法 4 1 2 1算法的特性 4 1 2 2算法的评价标准 5 1 2 3算法的时间复杂度 6 1 3 数学预备知识 7 1 3 1 集合 7 1 3 2 常用的数学术语 8 1 3 3 对数 8 1 3 4...

    《Hello 算法》数据结构与算法教程,支持 Java, C++, Python, Go, JS, TS, C#

    由浅入深:建议先从基础的数据结构开始学习,如数组和链表,然后再学习更复杂的数据结构如树和图。 多做练习:数据结构是实践性很强的学科。通过多做练习,你可以更好地理解数据结构的基本概念和原理,并提高编程...

    DataStructureAndAlgorithmsInCSharp:使用C#的常见数据结构和算法实现

    使用C#的通用数据结构和算法实现 前言 使用C#来实现数据结构和算法似乎是多余的,因为C#提供了开发人员所需的一切,使他们可以专注于应用程序层。 尽管C#不是研究和解释数据结构和算法的最佳选择,但它完全能够...

    数据结构 c#版

    1 1 1 学习数据结构的必要性 1 1 1 2 基本概念和术语 1 1 2 算法 4 1 2 1算法的特性 4 1 2 2算法的评价标准 5 1 2 3算法的时间复杂度 6 1 3 数学预备知识 7 1 3 1 集合 7 1 3 2 常用的数学术语 8 1 3 3 对数 8 1 3 4...

    30.数据结构(C#语言版)高清版

    1.1.1 学习数据结构的必要性...1 1.1.2 基本概念和术语...............1 1.2 算法...4 1.2.1算法的特性............................4 1.2.2算法的评价标准....................5 1.2.3算法的时间复杂度...............

    3.数据结构(C#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    数据结构(C#语言版)

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语......................................................................

    数据结构(C#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    数据结构(c#语言版)

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    数据结构(C#语言版).

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

    数据结构(C#语言)

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语......................................................................

    数据结构 (C#语言版)

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

    C#数据结构之堆栈(Stack)实例详解

    本文实例讲述了C#数据结构之堆栈(Stack)。分享给大家供大家参考,具体如下: 堆栈(Stack)最明显的特征就是“先进后出”,本质上讲堆栈也是一种线性结构,符合线性结构的基本特点:即每个节点有且只有一个前驱节点和...

    C#数据结构(2.0版)电子书

    1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语........................................................................

    C#数据结构

    本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...

    Java单链表源码分析-ds-algos:ds-算法

    获取有关数据结构和算法的完整免费课程。 订阅频道以获取所有免费课程 - :folded_hands: 感谢您一直以来的厚爱和支持。 我虚心地请求您帮助这个频道发展更多,为此请点赞、分享和订阅我的频道。 您的支持将激励我...

Global site tag (gtag.js) - Google Analytics