最近经常用到序列的结构,就是一个动态的列表,里面的所有数据都按照顺序排列。

故写了一个通用的泛型结构,虽然效率不怎么样,但也简单适用。

代码如下:

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
}

相关文章:

  • 2021-05-31
  • 2021-05-08
  • 2022-12-23
  • 2021-11-20
  • 2021-10-14
  • 2021-07-11
  • 2021-06-26
  • 2021-06-09
猜你喜欢
  • 2021-09-19
  • 2021-12-04
  • 2021-11-04
  • 2022-12-23
  • 2021-09-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案