Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- public class CircularQueue<T> : IEnumerable<T>
- {
- private T[] arr;
- private const int DefaultCapacity = 4;
- public int Count { get; private set; }
- public int Capasity { get; private set; }
- private int head;
- private int tail;
- public CircularQueue(int capacity = DefaultCapacity)
- {
- this.Capasity = capacity;
- this.Count = 0;
- this.arr = new T[this.Capasity];
- this.head = 0;
- this.tail = 0;
- }
- public void Enqueue(T element)
- {
- if (this.Count >= this.Capasity)
- {
- this.Resize();
- }
- this.arr[tail] = element;
- this.tail = (this.tail + 1) % this.Capasity;
- this.Count++;
- }
- private void Resize()
- {
- T[] newArray = new T[this.Capasity * 2];
- this.CopyAllElements(newArray);
- this.Capasity *= 2;
- this.arr = newArray;
- }
- private void CopyAllElements(T[] newArray)
- {
- for (int i = 0; i < this.Count; i++)
- {
- int index = (i + this.head) % this.Capasity;
- newArray[i] = this.arr[index];
- }
- this.head = 0;
- this.tail = this.Count;
- }
- public T Dequeue()
- {
- if (this.Count == 0)
- {
- throw new InvalidOperationException();
- }
- T element = this.arr[this.head];
- this.head = (this.head + 1) % this.Capasity;
- this.Count--;
- return element;
- }
- public T[] ToArray()
- {
- T[] newArr = new T[this.Count];
- this.CopyAllElements(newArr);
- return newArr;
- }
- public IEnumerator<T> GetEnumerator()
- {
- throw new Exception();
- }
- IEnumerator IEnumerable.GetEnumerator()
- {
- return this.GetEnumerator();
- }
- }
- public class Example
- {
- public static void Main()
- {
- CircularQueue<int> queue = new CircularQueue<int>();
- queue.Enqueue(1);
- queue.Enqueue(2);
- queue.Enqueue(3);
- queue.Enqueue(4);
- queue.Enqueue(5);
- queue.Enqueue(6);
- Console.WriteLine("Count = {0}", queue.Count);
- Console.WriteLine(string.Join(", ", queue.ToArray()));
- Console.WriteLine("---------------------------");
- int first = queue.Dequeue();
- Console.WriteLine("First = {0}", first);
- Console.WriteLine("Count = {0}", queue.Count);
- Console.WriteLine(string.Join(", ", queue.ToArray()));
- Console.WriteLine("---------------------------");
- queue.Enqueue(-7);
- queue.Enqueue(-8);
- queue.Enqueue(-9);
- Console.WriteLine("Count = {0}", queue.Count);
- Console.WriteLine(string.Join(", ", queue.ToArray()));
- Console.WriteLine("---------------------------");
- first = queue.Dequeue();
- Console.WriteLine("First = {0}", first);
- Console.WriteLine("Count = {0}", queue.Count);
- Console.WriteLine(string.Join(", ", queue.ToArray()));
- Console.WriteLine("---------------------------");
- queue.Enqueue(-10);
- Console.WriteLine("Count = {0}", queue.Count);
- Console.WriteLine(string.Join(", ", queue.ToArray()));
- Console.WriteLine("---------------------------");
- first = queue.Dequeue();
- Console.WriteLine("First = {0}", first);
- Console.WriteLine("Count = {0}", queue.Count);
- Console.WriteLine(string.Join(", ", queue.ToArray()));
- Console.WriteLine("---------------------------");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement