数据结构_2.单链表
单链表与顺序链表不同,顺序链表在声明时在内存中开辟一块连续的存储空间进行链表数据项的保存。所以单链表的项只需要保存其数据,根据数据所在的序号进行访问直接由链表类控制,因为屋里保存区域连续,所以能够很方便实现这些数据的访问,插入和删除。
单链表在内存中不适用连续的空间存储,所以单链表的项实际保存两个信息,一个信息为该项的数据项,另
从上面的单链表示意图可以看到,链表首项指向第二项,第二项指向第三项,最后一项不指向任何项,所以在构造单链表之前,我们需要首先构造单链表的项,这里我们就疑问了,为什么在顺序链表中不需要构造链表项?刚才已经说了,顺序链表只需要保存值本身即可,所以使用泛型类即可满足需求,下面给出单链表项的类:
/// <summary>
/// 单向连接节点类
/// </summary>
/// <typeparam name="T"></typeparam>
public class Node<T>
{
private T data; //数据域
private Node<T> next; //引用域
//构造函数
public Node(T data, Node<T> next)
{
this.data = data;
this.next = next;
}
//构造函数
public Node(T data)
{
this.data = data;
this.next = null;
}
//构造函数
public Node(Node<T> next)
{
this.next = next;
}
//构造函数
public Node()
{
this.data = default(T);
this.next = null;
}
public T Data
{
set { data = value; }
get { return data; }
}
public Node<T> Next
{
get { return next; }
set { next = value; }
}
}
链表项的类很简单,声明了两个属性分别为Data和Next,分别表示链表项的两个存储信息,声明相对应的构造函数。
下面是单链表项的代码:
class SinglyLink<T> : IListDS<T>
{
private Node<T> head;
public Node<T> Head
{
set { head = value; }
get { return head; }
}
/// <summary>
/// 求单链表长度,正确
/// </summary>
/// <returns></returns>
public int GetLength()
{
int length = 0;
Node<T> P = head;
while (P != null)
{
P = P.Next;
length++;
}
return length;
}
/// <summary>
/// 清楚单链表所有项
/// </summary>
public void Clear()
{
head = null;
}
/// <summary>
/// 判断单链表是否为空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
if (head == null)
return true;
else
return false;
}
/// <summary>
/// 判断单链表是否已满,因为单链表不存在最大长度的限制,所以单链表永远不会满
/// </summary>
/// <returns></returns>
public bool IsFull()
{
return false;
}
/// <summary>
/// 在单链表的最末尾添加新项,有以下几种情况
/// 当链表为空时,只需要将添加项赋予链表头即可
/// 当链表不为空时,需要先查找到链表的
补充:软件开发 , C# ,