首页 > 学院 > 开发设计 > 正文

了解集合本质必须要知晓的概念01-链表

2019-11-17 02:59:56
字体:
来源:转载
供稿:网友

了解集合本质必须要知晓的概念01-链表

如果想对集合(系列)有本质的了解,链表是一个必须了解的概念。本篇主要包括:

● 链表的由来和定义● 创建一个单向链表● 其它链表

链表的由来和定义

在现实生活中,我们把不同的商品放在一个购物车中。而在面向对象的世界里,有时候,也需要把不同类型的数据放到一起,组成一个集合。集合中的元素并不是彼此孤立的,在C#中,如何表达集合元素间的关系呢?

借助"自引用类"可以确立集合元素间的关系。比如有这样一个自引用类:

public class Node
{
    public int Data{get;set;}
    public Node Next{get;set;}
    public Node(int dataValue)
    {}
}

Node类的最大特点是:存在一个Node类型的属性,这个属性指向Node的另一个实例,Next属性也称为"引用链"。放到集合的场景中来说就是:把多个Node实例放到一个集合中,每一个Node实例包含一个Next属性指向下一个Node实例。而该集合中的最后一个Node实例会指向null。用图表示就是:

1

链表就是自引用类对象的线性集合,即序列。

由于每个自引用对象是由引用链链接起来,所以叫链表。堆栈与队列是约束版的链表,而二叉查找数是非线性数据结构。

链表的节点或元素虽然在逻辑上是连续的、线性的,当其内存不是连续存储的;数组元素在内存中是连续的,所以我们才可以通过索引来访问数组元素。

创建一个单向链表

首先创建一个节点,是一个自引用类:

namespace LinkedListLibrary
{
    public class ListNode
    {
        //当前节点对象
        public object Data { get; PRivate set; }
        //Next属性也称为链,指向另一个ListNode对象实例,这样就把2个ListNode对象实例链接起来了
        public ListNode Next { get; set; }
        public ListNode(object dataValue): this(dataValue, null)
        {
            
        }
        public ListNode(object dataValue, ListNode nextNode)
        {
            Data = dataValue;
            Next = nextNode;
        }
    }
}

再模拟一个链表,如下:

namespace LinkedListLibrary
{
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表