建立一个单链表
- 链式储存定义:不要求在逻辑上相邻的元素在物理位置上也相邻。(即利用指针来建立元素与其前驱和后继的关系)
- 链式储存分为单链表,双链表和循环链表。(我们这里讨论单链表的情况)
单链表
每个结点只含有一个链域(指针域)的链表。即利用单链域的方式存储线性表的逻辑结构。
单链表 SLinklist< T >
其中每一个结点SNode< T >都包含一个data(数据域(< T >类型))和一个next(指针域,指向后继结点的指针)
所以想要构造单链表,就要对其中的每一个结点进行封装。其中一共包括结点内的数据和访问下一个结点的指针,以及定义这两个属性的方法。
具体代码如下:
public class SNode<T>where T :IComparable<T>//因为后面还需要对ILinklist进行访问,所以对于T加一个约束
{
public T Data { get; set; }//数据部分
public SNode<T> Next { get; set; }//指针部分
public SNode(T data)
{
Data = data;
Next = null;
}
public SNode(T data,SNode<T> next)
{
Data = data;
Next = next;
}
}
完成了对结点SNode< T >的封装,接下来需要构造一个SLinklist< T >的类型去实现之前的那个ILinklist< T >的接口。
在顺序表SeqList< T >中我们定义了一个T类型的_dataset数组,而这个单链表中只需要记录链表的长度和定义一个头结点指针就可以完成。同理,这个SLinklist< T >也需要访问T类型的接口。
具体代码如下:
然后在主函数下写一个单链表,我们来测试一下这个链表的完成性!
达到了预期的目标,输出的与预想的一致。