如果想对集合(系列)有本质的了解,链表是一个必须了解的概念。本篇主要包括:
● 链表的由来和定义● 创建一个单向链表● 其它链表
链表的由来和定义
在现实生活中,我们把不同的商品放在一个购物车中。而在面向对象的世界里,有时候,也需要把不同类型的数据放到一起,组成一个集合。集合中的元素并不是彼此孤立的,在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。用图表示就是:
链表就是自引用类对象的线性集合,即序列。
由于每个自引用对象是由引用链链接起来,所以叫链表。堆栈与队列是约束版的链表,而二叉查找数是非线性数据结构。
链表的节点或元素虽然在逻辑上是连续的、线性的,当其内存不是连续存储的;数组元素在内存中是连续的,所以我们才可以通过索引来访问数组元素。
创建一个单向链表
首先创建一个节点,是一个自引用类:
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{
新闻热点
疑难解答