最近经常用到序列的结构,就是一个动态的列表,里面的所有数据都按照顺序排列。
故写了一个通用的泛型结构,虽然效率不怎么样,但也简单适用。
代码如下:
class Program { static
void Main(string[] args) { var v = new Sequence<int>(); while (true) { int k = int.Parse(Console.ReadLine()); v.Add(k); Console.WriteLine(v); } } }
class Sequence<T> : IEnumerable<T> where T : IComparable<T> { LinkedList<T> nodes = new LinkedList<T>();
public
void Add(T value) { LinkedListNode<T> node = new LinkedListNode<T>(value); if (nodes.Count == 0) { nodes.AddFirst(node); return; } if (value.CompareTo(nodes.First.Value) < 0) { nodes.AddFirst(node); return; } if (value.CompareTo(nodes.Last.Value) > 0) { nodes.AddLast(node); return; }
LinkedListNode<T> before = null; for (before = nodes.First; before != nodes.Last; before = before.Next) { if (value.CompareTo(before.Value) >= 0 && value.CompareTo(before.Next.Value) <= 0) break; }
nodes.AddAfter(before, node); return; }
public
override string ToString() { List<string> s = new List<string>(); foreach (var item in nodes) { s.Add(item.ToString()); } return string.Join(",", s.ToArray()); }
#region IEnumerable<T> Members
public IEnumerator<T> GetEnumerator() { return nodes.GetEnumerator(); }
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return nodes.GetEnumerator(); }
#endregion }
|