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