第三章单链表(带有头结点的尾插法实现)_链表


第三章单链表(带有头结点的尾插法实现)_链表_02


第三章单链表(带有头结点的尾插法实现)_数据_03


第三章单链表(带有头结点的尾插法实现)_链表_04


第三章单链表(带有头结点的尾插法实现)_i++_05


第三章单链表(带有头结点的尾插法实现)_链表_06

/// <summary>
/// 节点类
/// </summary>
/// <typeparam name="T"></typeparam>

第三章单链表(带有头结点的尾插法实现)_i++_07

class Node<T>
{
private T date; //数据域
private Node<T> next;//指针域

public T Date { get => date; set => date = value; }
internal Node<T> Next { get => next; set => next = value; }

public Node()
{
Next = null;
Date = default(T);
}

public Node(T date,Node<T> next)
{
this.Date = date;
this.Next = next;
}

public Node(T date)
{
Next = null;
this.Date = date;
}
public Node(Node<T> next)
{
this.Date = default(T);
this.Next = next;
}
}
/// <summary>
/// 链表类
/// </summary>
class LinkList<T>
{
private Node<T> head; //头指针
private int count; //链表元素个数

public LinkList()
{
head=new Node<T>();//指向头结点
count = 0;
}


//尾插法创建链表
public LinkList(params T[] list):this()
{
Node<T> last = head;
for (int i = 0; i < list.Length; i++)
{
Node<T> newNode = new Node<T>(list[i]);
last.Next = newNode;
last = last.Next;
}
count = list.Length;
}



//遍历单链表的元素
public void Traverse()
{
Node<T> temp = head;
for (int i = 0; i < count; i++)
{
temp = temp.Next;
Console.Write(temp.Date+" ");
}

Console.WriteLine();
}

第三章单链表(带有头结点的尾插法实现)_链表_08

//判断是否为空
public bool IsEmepty()
{
return head.Next == null;
}


//获取链表长度
public int GetLength()
{
return count;
}

第三章单链表(带有头结点的尾插法实现)_链表_09


第三章单链表(带有头结点的尾插法实现)_数据_10

//获取元素索引位置
public int Index(T elem)
{
Node<T> temp = head;
for (int i = 0; i < count; i++)
{
temp = temp.Next;
if (temp.Date.Equals(elem))
{
return i;
}

}

Console.WriteLine("elem:{0}不在链表中", elem);
return -1;
}

第三章单链表(带有头结点的尾插法实现)_数据_11


第三章单链表(带有头结点的尾插法实现)_链表_12

//通过索引器获取元素
public T this[int index]
{
get
{
if (index>=count||index<0)
{
throw new IndexOutOfRangeException();
}
Node<T> temp = head;
for (int i = 0; i <=index; i++)
{
temp = temp.Next;
}

return temp.Date;
}
}

第三章单链表(带有头结点的尾插法实现)_i++_13

//插入元素
public void Insert(int index,T elem)
{
Node<T> temp = head;
Node<T> newNode=new Node<T>(elem,null);
if (index >= count || index < 0)
{
throw new IndexOutOfRangeException();
}

//当为空链表的时候
if (temp.Next == null)
{
temp.Next = newNode;
count++;

}

else
{
for (int i = 0; i < index; i++)
{
temp = temp.Next;
}
newNode.Next = temp.Next;
temp.Next = newNode;
count++;
}
}

第三章单链表(带有头结点的尾插法实现)_i++_14

//删除元素
public void Delete(int index)
{
Node<T> temp = head;
if (head.Next == null)
{
Console.WriteLine("空表无法删除");
}
if (index >= count || index < 0)
{
throw new IndexOutOfRangeException();
}

for (int i = 0; i < index; i++)
{
temp = temp.Next;
}

temp.Next = temp.Next.Next;
count--;
}
}
LinkList<int> sum=new LinkList<int>(1,2,5,8,5,888,555);
sum.Traverse();
Console.WriteLine(sum.IsEmepty());
Console.WriteLine(sum.GetLength());
Console.WriteLine(sum.Index(8));
Console.WriteLine(sum[6]);
//sum.Insert(2, 120);
//sum.Traverse();
sum.Delete(100);
sum.Traverse();
Console.ReadKey();