在C#中我使用了Queue集合。我可以很容易地入队或出队。好的,现在我想在队列中间或队列的开头插入一些东西。我没有找到任何方法来做这样的事情。你推荐什么作为替代收藏?
答案 0 :(得分:27)
根据定义,队列只能将事物排入队列并使其出列。如果你想在中间插入,那么你需要一个完整的列表(可能是LinkedList<T>
),而不是Queue
。
我的意思是,你不要试图在超市的队列中间“插入”自己(我希望);它的工作方式与此相同。
答案 1 :(得分:15)
您要找的是LinkedList<T>
。您可以添加到开头,中间(使用AddBefore或AddAfter)或列表的结尾。
这比使用List<T>
更有优势,因为您可以使用RemoveFirst或RemoveLast让它更模仿Queue或Stack。
答案 2 :(得分:5)
虽然如果您发现自己处于无法使用队列以外的其他位置的情况下,此页面上的答案是正确的,您可以(稍加一些开销)将项目添加到队列中间。是否应该这样做是一个不同的故事。
var myQueue = new Queue<string>();
myQueue.Enqueue("item 0");
myQueue.Enqueue("item 10");
var myList = myQueue.ToList();
myList.Insert(1, "item 5");
myQueue = new Queue<string>(myList);
答案 3 :(得分:2)
您可能必须使用列表。
答案 4 :(得分:2)
队列的要点是提供FIFO(先进先出)接口抽象。如果您希望能够以非队列方式与数据结构进行交互,请不要使用队列。
答案 5 :(得分:0)
如果你想插入&#34;中&#34;在队列中,您可能正在寻找&#34;优先级队列&#34;。
不幸的是,这不是内置的.Net类,AFAIK。但至少现在你有一个概念名称来搜索。
对于一些可能有用的链接,请参阅此(已结束)Q&amp; A: Priority queue in .Net
引用那里的问题:
优先级队列是比简单排序提供更多灵活性的数据结构,因为它们允许新元素以任意间隔进入系统。将新作业插入优先级队列比在每次到达时重新排序所有内容更具成本效益。
基本优先级队列支持三种主要操作:
- 插入(Q,X)。给定带有密钥k的项x,将其插入优先级队列Q。
- 查找-最小(Q)。返回指向该项目的指针 其键值小于优先级队列中的任何其他键 Q值。
- 删除 - 最小(Q)。从密钥最小的优先级队列Q中删除该项