File d’attente spéciale avec une taille définie

J’ai besoin d’une collection limitée en taille. Ce doit être semblable à un tampon circulaire. Je pense que le moyen le plus rapide de le décrire serait de donner un exemple. Supposons que j’ai une instance de cette queue “spéciale”, de taille 4.

C’est la queue au départ: 6 3 9 2

Si j’y insère quelque chose, il doit l’append au début, supprimer le dernier élément et renvoyer sa valeur. Ainsi, si j’ajoute 3, il devient:

3 6 3 9 et retourne 2

J’espère avoir été clair … Une implémentation générale est suffisante, mais une implémentation en C # serait la meilleure 🙂

public class MyQueue { private Queue queue; public MyQueue(int capacity) { Capacity = capacity; queue = new Queue(capacity); } public int Capacity { get; private set; } public int Count { get { return queue.Count; } } public T Enqueue(T item) { queue.Enqueue(item); if (queue.Count > Capacity) { return queue.Dequeue(); } else { //if you want this to do something else, such as return the `peek` value //modify as desired. return default(T); } } public T Peek() { return queue.Peek(); } } 
 public class FixedQueue : IEnumerable { private LinkedList _list; public int Capacity { get; private set; } public FixedQueue(int capacity) { this.Capacity = capacity; _list = new LinkedList(); } public T Enqueue(T item) { _list.AddLast(item); if (_list.Count > Capacity) return Dequeue(); return default(T); } public T Dequeue() { if (_list.Count == 0) throw new InvalidOperationException("Empty Queue"); var item = _list.First.Value; _list.RemoveFirst(); return item; } public T Peek() { if (_list.Count == 0) throw new InvalidOperationException("Empty Queue"); return _list.First.Value; } public void Clear() { _list.Clear(); } public IEnumerator GetEnumerator() { return _list.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return _list.GetEnumerator(); } }