using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// 单链表--数组
/// </summary>
namespace SingleList
{
class Program
{
static void Main(string[] args)
{
ArrayData<int> t = new ArrayData<int>();
t.Add(0);
t.Add(1);
t.Add(2);
t.Add(3);
t.Search(2);
t.Remove(2);
}
}
public class DataInt<T>
{
public T Data;//当前节点的数据
public DataInt<T> Next;//下个节点
public DataInt(T data)
{
Data = data;
Next = null;
}
public DataInt()
{
Data = default(T);
Next = null;
}
}
public class ArrayData<T>
{
public DataInt<T> Head { set; get; }//头
public DataInt<T> Tail { set; get; }//尾
private int count = 0;//数据的长度
public int Count
{
set
{
count = value;
}
get
{
return count;
}
}
public void Add(T item)
{
DataInt<T> t = new DataInt<T>(item);
if (t == null)
{
return;
}
if (Head == null)
{
Head = t;
Tail = t;
}
else
{
Tail.Next = t;
Tail = t;
}
count++;
}
/// <summary>
/// 搜索
/// </summary>
public DataInt<T> Search(T item)
{
DataInt<T> t = new DataInt<T>(item);
DataInt<T> head = new DataInt<T>();
head = Head;
if (t == null)
{
return default(DataInt<T>);
}
while (head != null)
{
if (head.Data.Equals(t.Data))
{
t.Next = head.Next;
return t;
}
head = head.Next;
}
return default(DataInt<T>);
}
/// <summary>
/// 获得当前数据的前一条的数据
/// </summary>
public DataInt<T> SearchFirst(T item)
{
DataInt<T> t = new DataInt<T>(item);
DataInt<T> head = new DataInt<T>();
DataInt<T> result = new DataInt<T>();
head = Head;
if (t == null)
{
return default(DataInt<T>);
}
while (head != null)
{
if (!head.Data.Equals(t.Data))
{
result = head;
head = head.Next;
}
else
{
return result;
}
}
return default(DataInt<T>);
}
public void Remove(T item)
{
DataInt<T> t = new DataInt<T>(item);
if (t == null)
{
return;
}
//找到符合数据的前边的那条数据
DataInt<T> result = SearchFirst(item);
if (result == null)
{
return;
}
else
{
result.Next = result.Next.Next;
if (result.Next == null)
{
Tail = result;
}
}
count--;
}
}
}