1. 链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。这组存储单元既可以是连续的,也可以是不连续的。是结点为单位构成链表,其包括数据区,和地址区;
数据区:存放当前结点的数据;
地址区:存放下一个节点的地址;
用C#描述单结点:
public class ListNode<T>
{
public T Data { set; get; } //数据区
public ListNode<T> Next { set; get; } //存放下一个节点的地址区
{
public T Data { set; get; } //数据区
public ListNode<T> Next { set; get; } //存放下一个节点的地址区
public ListNode(T item)
{
this.Data = item;
this.Next = null;
}
{
this.Data = item;
this.Next = null;
}
public ListNode()
{
this.Data = default(T);
this.Next = null;
}
}
{
this.Data = default(T);
this.Next = null;
}
}
public class ListNodeMethod<T>
{
public ListNode<T> Head { set; get; }//单链表头
ListNode<T> A = new ListNode<T>();
ListNode<T> B = new ListNode<T>();
public ListNodeMethod()
{
Head = null;
}
/// <summary>
/// 增加新元素到单链表末尾
/// </summary>
/// <param name="Item"></param>
public void Append(T Item)
{
ListNode<T> foot = new ListNode<T>(Item);
// ListNode<T> A = new ListNode<T>();
{
public ListNode<T> Head { set; get; }//单链表头
ListNode<T> A = new ListNode<T>();
ListNode<T> B = new ListNode<T>();
public ListNodeMethod()
{
Head = null;
}
/// <summary>
/// 增加新元素到单链表末尾
/// </summary>
/// <param name="Item"></param>
public void Append(T Item)
{
ListNode<T> foot = new ListNode<T>(Item);
// ListNode<T> A = new ListNode<T>();
if(Head == null) //添加头结点
{
Head = foot;
return;
}
{
Head = foot;
return;
}
A = Head;
while (A.Next != null) //单链表是”不走回头路“,所以每次增加都要从单链表的头开始找到单链表最后一个结点(最后一个结点就是Next为NULL),
//然后把最后一个结点的Next设置成需增加的结点,这时要需增加的结点变身为最后一结点,他的Next为NULL。
{
A=A.Next;
}
A.Next = foot;
}
while (A.Next != null) //单链表是”不走回头路“,所以每次增加都要从单链表的头开始找到单链表最后一个结点(最后一个结点就是Next为NULL),
//然后把最后一个结点的Next设置成需增加的结点,这时要需增加的结点变身为最后一结点,他的Next为NULL。
{
A=A.Next;
}
A.Next = foot;
}
public void Delete(int Index)
{
//删除头节点
if(Index == 1)
{
Head = Head.Next; //将下一个结点赋值给头结点啊
return;
}
{
//删除头节点
if(Index == 1)
{
Head = Head.Next; //将下一个结点赋值给头结点啊
return;
}
//删除非结点
B = Head;
int DeleteIndex = 1;
if(A.Next != null && DeleteIndex<Index) //删除结点如果不是头结点。从单链表头开始查询要删除结点的位置。
//并记录删除的前一结点值A和所要删除的结点B。因为结点B被删除了,所以结点A的Next就应该为B的Next。把结点A的Next设置为结点B的Next。
{
A = B;
B = B.Next;
DeleteIndex++;
}
if (DeleteIndex == Index)
{
A.Next = B.Next;
}
}
}