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)版权所有。

上一篇:[go语言学习指南]


下一篇:RTP Payload Format for Opus Speech and Audio Codec