gpt4 book ai didi

c# - 如何为自定义队列实现

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:00 26 4
gpt4 key购买 nike

我有一个通过链表实现的自定义队列类,但我不知道如何为非数组的东西实现 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();
}
}

最佳答案

建议下一个解决方案,从起始节点开始迭代:

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

关于c# - 如何为自定义队列实现 <IEnumerable>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35897817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com