单链表:用任意的存储单元存储线性表的数据元素;
优点:插入删除效率高
缺点:查询效率低,需要遍历链表
1.接口类:
/// <summary>
/// 该类为链表接口定义类,顺序链表和单链表都使用该接口
/// </summary>
/// <typeparam name="T"></typeparam>
interface IListDS<T>
{
/// <summary>
/// 获取链表长度
/// </summary>
/// <returns></returns>
int GetLength();
/// <summary>
/// 清空链表
/// </summary>
void Clear();
/// <summary>
/// 判断链表是否为空
/// </summary>
/// <returns></returns>
bool IsEmpty();
/// <summary>
/// 向链表中添加元素
/// </summary>
/// <param name="item"></param>
void Add(T item);
/// <summary>
/// 根据索引向链表中插入元素
/// </summary>
/// <param name="item"></param>
/// <param name="index"></param>
void Insert(T item, int index);
/// <summary>
/// 根据索引删除链表中的元素
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
T Delete(int index);
/// <summary>
///根据索引获取元素值
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
T GetEle(int index);
/// <summary>
/// 更具元素值,获取元素在链表中的位置
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
int Locate(T value);
/// <summary>
/// 格局索引获取元素值
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
T this[int index] {
get; }
}
2.节点类:
class Node<T>
{
private T data; //定义一个变量data,用来存储数据
private Node<T> next; //定义一个变量next,用来指向下一个节点元素
public Node()
{
data = default;
next = null;
}
public Node(T value)
{
data = value;
next = null;
}
public Node(Node<T> next)
{