Advertisement
Evyatar12

Utils.cs - Queue

Jan 24th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.47 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Queues
  6. {
  7.     class Utils
  8.     {
  9.  
  10.         public static Queue<T> Copy<T>(Queue<T> q)
  11.         {
  12.             Queue<T> copy = new Queue<T>();
  13.             Queue<T> temp = new Queue<T>();
  14.  
  15.             while (!q.IsEmpty())
  16.             {
  17.                 T val = q.Remove();
  18.                 copy.Insert(val);
  19.                 temp.Insert(val);
  20.             }
  21.  
  22.             while (!temp.IsEmpty())
  23.             {
  24.                 q.Insert(temp.Remove());
  25.             }
  26.  
  27.             return copy;
  28.         }
  29.  
  30.         public static void PushQueue<T>(Queue<T> from, Queue<T> to)
  31.         {
  32.             while (!from.IsEmpty())
  33.                 to.Insert(from.Remove());            
  34.         }
  35.  
  36.         public static Node<T> QueueToNode<T>(Queue<T> q)
  37.         {
  38.             if (q.IsEmpty())
  39.                 return null;
  40.  
  41.             Queue<T> clone = Copy(q);
  42.  
  43.             Node<T> head = null,
  44.                     previous = null;
  45.  
  46.             while (!clone.IsEmpty())
  47.             {
  48.                 Node<T> node = new Node<T>(clone.Remove());
  49.  
  50.                 if (head == null)
  51.                 {
  52.                     head = node;
  53.                     previous = head;
  54.                 }
  55.                 else
  56.                 {
  57.                     previous.SetNext(node);
  58.                     previous = previous.GetNext();
  59.                 }
  60.             }
  61.  
  62.             return head;
  63.         }
  64.  
  65.         public static bool IsContained<T>(Queue<T> q1, Queue<T> q2)
  66.         {
  67.             Queue<T> cloneQ2 = Copy(q2);
  68.  
  69.             Node<T> nodeQ1 = QueueToNode(q1);
  70.             Node<T> current = nodeQ1;
  71.  
  72.             while (!cloneQ2.IsEmpty() && current != null)
  73.             {
  74.                 // if current element is the same
  75.                 if (cloneQ2.Remove().Equals(current))
  76.                     // move to check next element
  77.                     current = current.GetNext();
  78.  
  79.                 // if current element doesn't match anticipated element, start over
  80.                 else
  81.                     current = nodeQ1;
  82.             }
  83.  
  84.             return current == null;
  85.         }
  86.  
  87.         public static int QueueSize<T>(Queue<T> q)
  88.         {
  89.             int size = 0;
  90.             Queue<T> clone = Copy(q);
  91.            
  92.             while (!clone.IsEmpty())
  93.             {
  94.                 size++;
  95.                 clone.Remove();
  96.             }
  97.  
  98.             return size;
  99.         }
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement