看不懂
不知道哪里有为我们这些非专业的人写文章,关于C#算法和数据结构的
谢谢各位大侠

解决方案 »

  1.   

    把原理搞清楚就不难了。
    定义一个LinkedList,保存头节点。
    提供如下方法:MoveFirst GetNext HasNext GetLength AddNode DelNode ClearAll
    定义一个Node:
    class Node { public Node NextNode { get; set; } public object Data { get; set; } }
      

  2.   

    节点类:
    public class Node<T>
    {
    private T data; //数据域
    private Node<T> next; //引用域
    //构造器
    public Node(T val, Node<T> p)
    {
    data = val;
    next = p;
    }
    //构造器
    public Node(Node<T> p)
    {
    next = p;
    }
    //构造器
    public Node(T val)
    {
    data = val;
    next = null;
    }
    //构造器
    public Node()
    {
    data = default(T);
    next = null;
    }
    //数据域属性
    public T Data
    {
    get
    {
    return data;
    }
    set
    {
    data = value;
    }
    }
    //引用域属性
    public Node<T> Next
    {
    get
    {
    return next;
    }
    set
    {
    next = value;
    }
    }
    }
    单链表类:
    public class LinkList<T> : IListDS<T> {
    private Node<T> head; //单链表的头引用
    //头引用属性
    public Node<T> Head
    {
    get
    {
    return head;
    }
    set
    {
    head = value;
    }
    }
    //构造器
    public LinkList()
    {
    head = null;
    }
    //求单链表的长度
    public int GetLength()
    {
    Node<T> p = head;
    int len = 0;
    while (p != null)
    {
    ++len;
    p = p.Next;
    }
    return len;
    }
    //清空单链表
    public void Clear()
    {
    head = null;
    }
    //判断单链表是否为空
    public bool IsEmpty()
    {
    if (head == null)
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    //在单链表的末尾添加新元素
    public void Append(T item)
    {
    Node<T> q = new Node<T>(item);
    Node<T> p = new Node<T>();
    if (head == null)
    {
    head = q;
    return;
    }
    p = head;
    while (p.Next != null)
    {
    p = p.Next;
    }
    p.Next = q;
    }
    //在单链表的第i个结点的位置前插入一个值为item的结点
    public void Insert(T item, int i)
    {
    if (IsEmpty() || i < 1)
    {
    Console.WriteLine("List is empty or Position is error!");
    return;
    }
    if (i == 1)
    {
    Node<T> q = new Node<T>(item);
    q.Next = head;
    head = q;
    return;
    }
    Node<T> p = head;
    Node<T> r = new Node<T>();
    int j = 1;
    while (p.Next != null&& j < i)
    {
    r = p;
    p = p.Next;
    ++j;
    }
    if (j == i)
    {
    Node<T> q = new Node<T>(item);
    q.Next = p;
    r.Next = q;
    }
    }
    //在单链表的第i个结点的位置后插入一个值为item的结点
    public void InsertPost(T item, int i)
    {
    if (IsEmpty() || i < 1)
    {
    Console.WriteLine("List is empty or Position is error!");
    return;
    }
    if (i == 1)
    {
    Node<T> q = new Node<T>(item);
    q.Next = head.Next;
    head.Next = q;
    return;
    }
    Node<T> p = head;
    int j = 1;
    while (p != null&& j < i)
    {
    p = p.Next;
    ++j;
    }
    if (j == i)
    {
    Node<T> q = new Node<T>(item);
    q.Next = p.Next;
    p.Next = q;
    }
    }
    //删除单链表的第i个结点
    public T Delete(int i)
    {
    if (IsEmpty()|| i < 0)
    {
    Console.WriteLine("Link is empty or Position is error!");
    return default(T);
    }
    Node<T> q = new Node<T>();
    if (i == 1)
    {
    q = head;
    head = head.Next;
    return q.Data;
    }
    Node<T> p = head;
    int j = 1;
    while (p.Next != null&& j < i)
    {
    ++j;
    q = p;
    p = p.Next;
    }
    if (j == i)
    {
    q.Next = p.Next;
    return p.Data;
    }
    else
    {
    Console.WriteLine("The ith node is not exist!");
    return default(T);
    }
    }
    //获得单链表的第i个数据元素
    public T GetElem(int i)
    {
    if (IsEmpty())
    {
    Console.WriteLine("List is empty!");
    return default(T);
    }
    Node<T> p = new Node<T>();
    p = head;
    int j = 1;
    while (p.Next != null&& j < i)
    {
    ++j;
    p = p.Next;
    }
    if (j == i)
    {
    return p.Data;
    }
    else
    {
    Console.WriteLine("The ith node is not exist!");
    return default(T);
    }
    }
    //在单链表中查找值为value的结点
    public int Locate(T value)
    {
    if(IsEmpty())
    {
    Console.WriteLine("List is Empty!");
    return -1;
    }
    Node<T> p = new Node<T>();
    p = head;
    int i = 1;
    while (!p.Data.Equals(value)&& p.Next != null)
    {
    P = p.Next;
    ++i;
    }
    return i;
    }
    }以上代码摘自 数据结构(C#语言版)