Existe-t-il en C# un conteneur générique déjà défini qui peut être utilisé comme pile et comme file d'attente en même temps ? Je veux juste pouvoir ajouter des éléments soit à la fin, soit à l'avant de la file d'attente.
merci
Existe-t-il en C# un conteneur générique déjà défini qui peut être utilisé comme pile et comme file d'attente en même temps ? Je veux juste pouvoir ajouter des éléments soit à la fin, soit à l'avant de la file d'attente.
merci
Vérifiez le LinkedList classe.
LinkedList<int> list = new LinkedList<int>();
list.AddFirst(1);
list.AddLast(2);
list.AddFirst(0);
Voici mon implémentation d'un deque immuable :
Remarquez que c'est un immuable double-ended-queue. Normalement, vous pensez probablement qu'une file d'attente est quelque chose que vous mutez :
queue.Enqueue(10);
Une file d'attente immuable reste toujours la même ; lorsque vous ajoutez un nouvel élément, elle vous redonne une file d'attente entièrement nouvelle, que vous pouvez donc utiliser comme :
queue = queue.Enqueue(10);
si vous ne vous souciez plus de l'ancienne valeur.
Ce que vous voulez, c'est un liste liée - il y en a un dans le BCL - qui a AddFirst y AddLast méthodes
Voici une classe pour aider les gens à mettre cela en œuvre facilement :
public class StackQueue<T>
{
private LinkedList<T> linkedList = new LinkedList<T>();
public void Push(T obj)
{
this.linkedList.AddFirst(obj);
}
public void Enqueue(T obj)
{
this.linkedList.AddFirst(obj);
}
public T Pop()
{
var obj = this.linkedList.First.Value;
this.linkedList.RemoveFirst();
return obj;
}
public T Dequeue()
{
var obj = this.linkedList.Last.Value;
this.linkedList.RemoveLast();
return obj;
}
public T PeekStack()
{
return this.linkedList.First.Value;
}
public T PeekQueue()
{
return this.linkedList.Last.Value;
}
public int Count
{
get
{
return this.linkedList.Count;
}
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.