如何为自定义队列实现<ienumerable>?

时间:2016-03-09 16:56:42

标签: c#

我有一个通过链表实现的自定义队列类,但是我无法弄清楚如何为不是数组的东西实现IEnumerable。

使用Dequeue()很容易实现它,但我不想要枚举来改变我的集合。

这是我的DQueue类代码:

class DQueue<Item> : IEnumerable<Item>
    {
        private Node<Item> startNode;
        private Node<Item> lastNode;
        private int _size;

        public DQueue()
        {
            _size = 0;
        }

        public void Enqueue(Item item)
        {
            _size++;
            if (startNode == null) {
                startNode = new Node<Item>();
                startNode.data = item;
                lastNode = startNode;
            } else {
                Node<Item> temp = new Node<Item>();
                temp.data = item;
                lastNode.next = temp;
                lastNode = temp;
            }
        }

        public Item Dequeue()
        {
            Item temp = startNode.data;
            startNode = startNode.next;
            _size--;
            return temp;
        }

        public bool IsEmpty()
        {
            return startNode == null;
        }

        public int Size()
        {
            return _size;
        }


        private class Node<InnerItem>
        {
            public InnerItem data;
            public Node<InnerItem> next;

            public Node()
            {
                next = null;
            }
        }

        // IEnumerable
        public IEnumerator<Item> GetEnumerator()
        {
            Node<Item> current;

            for (int i = 0; i < _size; i++) {
                //yield return values[i];
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

1 个答案:

答案 0 :(得分:1)

建议下一个求解,从起始节点迭代:

public IEnumerator<Item> GetEnumerator()
        {
                for (Node<Item> item = startNode; item != null; item = item.next)
                {
                    yield return item.data;
                }
        }