Advertisement
Boris-Stavrev92

Untitled

Apr 21st, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.66 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. public class CircularQueue<T> : IEnumerable<T>
  6. {
  7.     private T[] arr;
  8.  
  9.     private const int DefaultCapacity = 4;
  10.     public int Count { get; private set; }
  11.     public int Capasity { get; private set; }
  12.  
  13.     private int head;
  14.     private int tail;
  15.  
  16.     public CircularQueue(int capacity = DefaultCapacity)
  17.     {
  18.         this.Capasity = capacity;
  19.         this.Count = 0;
  20.         this.arr = new T[this.Capasity];
  21.         this.head = 0;
  22.         this.tail = 0;
  23.     }
  24.  
  25.     public void Enqueue(T element)
  26.     {
  27.         if (this.Count >= this.Capasity)
  28.         {
  29.             this.Resize();
  30.         }
  31.  
  32.         this.arr[tail] = element;
  33.         this.tail = (this.tail + 1) % this.Capasity;
  34.        
  35.         this.Count++;
  36.     }
  37.  
  38.     private void Resize()
  39.     {
  40.         T[] newArray = new T[this.Capasity * 2];
  41.         this.CopyAllElements(newArray);
  42.         this.Capasity *= 2;
  43.         this.arr = newArray;            
  44.     }
  45.  
  46.     private void CopyAllElements(T[] newArray)
  47.     {
  48.         for (int i = 0; i < this.Count; i++)
  49.         {
  50.             int index = (i + this.head) % this.Capasity;
  51.          
  52.             newArray[i] = this.arr[index];
  53.         }
  54.  
  55.  
  56.         this.head = 0;
  57.         this.tail = this.Count;
  58.     }
  59.  
  60.    
  61.     public T Dequeue()
  62.     {
  63.         if (this.Count == 0)
  64.         {
  65.             throw new InvalidOperationException();
  66.         }
  67.  
  68.         T element = this.arr[this.head];
  69.         this.head = (this.head + 1) % this.Capasity;
  70.  
  71.         this.Count--;
  72.         return element;
  73.     }
  74.  
  75.     public T[] ToArray()
  76.     {
  77.         T[] newArr = new T[this.Count];
  78.  
  79.         this.CopyAllElements(newArr);
  80.         return newArr;
  81.     }
  82.  
  83.     public IEnumerator<T> GetEnumerator()
  84.     {
  85.         throw new Exception();
  86.     }
  87.  
  88.     IEnumerator IEnumerable.GetEnumerator()
  89.     {
  90.         return this.GetEnumerator();
  91.     }
  92. }
  93.  
  94.  
  95. public class Example
  96. {
  97.     public static void Main()
  98.     {
  99.  
  100.         CircularQueue<int> queue = new CircularQueue<int>();
  101.  
  102.         queue.Enqueue(1);
  103.         queue.Enqueue(2);
  104.         queue.Enqueue(3);
  105.         queue.Enqueue(4);
  106.         queue.Enqueue(5);
  107.         queue.Enqueue(6);
  108.  
  109.         Console.WriteLine("Count = {0}", queue.Count);
  110.         Console.WriteLine(string.Join(", ", queue.ToArray()));
  111.         Console.WriteLine("---------------------------");
  112.  
  113.         int first = queue.Dequeue();
  114.         Console.WriteLine("First = {0}", first);
  115.         Console.WriteLine("Count = {0}", queue.Count);
  116.         Console.WriteLine(string.Join(", ", queue.ToArray()));
  117.         Console.WriteLine("---------------------------");
  118.  
  119.         queue.Enqueue(-7);
  120.         queue.Enqueue(-8);
  121.         queue.Enqueue(-9);
  122.         Console.WriteLine("Count = {0}", queue.Count);
  123.         Console.WriteLine(string.Join(", ", queue.ToArray()));
  124.         Console.WriteLine("---------------------------");
  125.  
  126.         first = queue.Dequeue();
  127.         Console.WriteLine("First = {0}", first);
  128.         Console.WriteLine("Count = {0}", queue.Count);
  129.         Console.WriteLine(string.Join(", ", queue.ToArray()));
  130.         Console.WriteLine("---------------------------");
  131.  
  132.         queue.Enqueue(-10);
  133.         Console.WriteLine("Count = {0}", queue.Count);
  134.         Console.WriteLine(string.Join(", ", queue.ToArray()));
  135.         Console.WriteLine("---------------------------");
  136.  
  137.         first = queue.Dequeue();
  138.         Console.WriteLine("First = {0}", first);
  139.         Console.WriteLine("Count = {0}", queue.Count);
  140.         Console.WriteLine(string.Join(", ", queue.ToArray()));
  141.         Console.WriteLine("---------------------------");
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement