C#名单:一个简单的实现
C#它配备了一个泛型列表类,在很多情况下,足以。实际应用中遇到。最好的报价C#该链表,包装成自己的阶级需求。
该名单的努力的原则,基本实现探索实施一些简单的方法。
一个、(Node.cs文件)作为一类节点列表。它被封装在内部列表类。
原因是客户在使用链表时不须要关注链表的节点类型。
<span style="font-family:Courier New;">using System;
namespace LinkListTrial0._2
{
partial class MyLinkedList<T>
{
class Node<DataType>:IComparable<DataType>,IEquatable<DataType>
where DataType:IComparable
{
DataType data;
Node<DataType> next;
public Node<DataType> Next
{
get
{
return this.next;
}
set
{
this.next = value;
}
}
public Node(DataType data)
{
this.data = data;
this.next = null;
}
// 比較接口的实现,直接比較链表节点与数据
public int CompareTo(DataType obj)
{
DataType objData = (DataType)obj;
return this.data.CompareTo(objData);
}
// 相等接口的实现,直接比較链表节点与数据
public bool Equals(DataType to_compare)
{
return this.data.Equals(to_compare);
}
// 打印数据
public override string ToString()
{
// TODO:能够加一些打印链接的创意
return this.data.ToString();
}
}
}
}</span>
二、(MyLinkedList.cs文件)实现简单链表的类。存放实现链表的主要逻辑。
主要目的是实现简单链表的添加和删除逻辑。
<span style="font-family:Courier New;">using System;
namespace LinkListTrial0._2
{
partial class MyLinkedList<T>
where T:IComparable
{
Node<T> Head;
public MyLinkedList()
{
// 在链表头部放置一个虚拟节点。简化逻辑
Node<T> dummy = new Node<T>(default(T));
this.Head =dummy;
}
public void AddAscend(T to_add)
{
Node<T> currentNode = Head;
Node<T> nextNode;
// 升序排列数据
for ( nextNode = currentNode.Next ; nextNode!=null && nextNode.CompareTo(to_add) < 0; )
{
currentNode = nextNode;
nextNode = currentNode.Next;
}
// 忽略反复数据
if (nextNode!=null && nextNode.Equals(to_add))
{
return;
}
// 插入新来的非反复数据
Node<T> toaddNode = new Node<T>(to_add);
currentNode.Next = toaddNode;
toaddNode.Next = nextNode;
}
public void Delete(T to_delete)
{
Node<T> currentNode = Head;
Node<T> nextNode;
// 检測全部数据是否与待删除的数据相等
for (nextNode=currentNode.Next;!( nextNode==null || nextNode.Equals(to_delete)); )
{
currentNode = nextNode;
nextNode = currentNode.Next;
}
// 从中间删除数据
if (nextNode != null)
{
currentNode.Next = nextNode.Next;
}
}
public void Clear()
{
// 清空全部数据
this.Head.Next = null;
}
public void PrintAll()
{
Node<T> currentNode = Head;
Node<T> nextNode;
for (nextNode=currentNode.Next; nextNode!=null; )
{
Console.WriteLine(nextNode.ToString());
currentNode = nextNode;
nextNode = currentNode.Next;
}
}
}
}</span>
三、(Program.cs文件)简单的測试程序。
<span style="font-family:Courier New;">using System;
namespace LinkListTrial0._2
{
class Program
{
static void Main(string[] args)
{
MyLinkedList<int> list = new MyLinkedList<int>();
list.Clear();
list.AddAscend(1);
list.AddAscend(6);
list.AddAscend(1);
list.AddAscend(3);
list.AddAscend(4);
list.AddAscend(2);
list.AddAscend(5);
list.AddAscend(6);
list.PrintAll();
Console.WriteLine("----------------------------------------------");
list.Delete(6);
list.Delete(7);
list.PrintAll();
Console.ReadLine();
}
}
}</span>
1、实现了简单的列表。
2、没有考虑性能的因素。
3、数据是相对固定的,应该依据使用情况灵活调整数据结构。
版权声明:本文博客原创文章,博主不同意(mailto:cqwd2010@qq.com)版权所有。

浙公网安备 33010602011771号