Advertisement
daniel_079

Untitled

Dec 18th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.33 KB | None | 0 0
  1. package queue;
  2.  
  3. //n - count of elements in queue
  4. //a[i] - element on position "i"
  5.  
  6. public class ArrayQueueADT {
  7.     // Inv: (n >= 0) && (a[i] != null for i = 1..n - 1)
  8.     private Object[] elements = new Object[10];
  9.     private int size = 0;
  10.     private int head = 0;
  11.     private int tail = 0;
  12.  
  13.     // Pre: capacity >= 0
  14.     private static void ensureCapacity(ArrayQueueADT queue, int capacity) {
  15.         if (capacity <= queue.elements.length) {
  16.             return;
  17.         }
  18.  
  19.         int newlength = 2 * capacity;
  20.         Object[] newQueue = new Object[newlength];
  21.         for (int i = queue.size - 1; i >= queue.head; i--) {
  22.             newlength--;
  23.             newQueue[newlength] = queue.elements[i];
  24.         }
  25.         queue.head = newlength;
  26.         for (int i = 0; i < queue.tail; i++) {
  27.             newQueue[i] = queue.elements[i];
  28.         }
  29.         queue.elements = newQueue;
  30.     }
  31.     // Post: (n' == n) && (a'[i] == a[i] for i = 0...n - 1)
  32.  
  33.     // Pre: element != null
  34.     public static void enqueue(ArrayQueueADT queue, Object element) {
  35.         assert element != null;
  36.  
  37.         ensureCapacity(queue, queue.size + 1);
  38.         queue.size++;
  39.         queue.elements[queue.tail] = element;
  40.         queue.tail = (queue.tail + 1) % queue.elements.length;
  41.     }
  42.     // Post: (n' == n + 1) && (a'[i] == a[i] for i = 0..n - 1) && (a'[n] == element)
  43.  
  44.     // Pre: n > 0
  45.     public static Object dequeue(ArrayQueueADT queue) {
  46.         assert size(queue) > 0;
  47.  
  48.         Object x = queue.elements[queue.head];
  49.         queue.elements[queue.head] = null;
  50.         queue.head = (queue.head + 1) % queue.elements.length;
  51.         queue.size--;
  52.         return x;
  53.     }
  54.     // Post: (n' == n - 1) && (a'[i - 1] == a[i] for i = 1...n - 1) && (Result == a[0])
  55.  
  56.     // Pre: n > 0
  57.     public static Object element(ArrayQueueADT queue) {
  58.         assert queue.size > 0;
  59.  
  60.         return queue.elements[queue.head];
  61.     }
  62.     // Post: (n' == n) && (a'[i] == a[i] for i = 0...n - 1) && (Result == a[0])
  63.  
  64.     // Pre: element != null
  65.     public static void push(ArrayQueueADT queue, Object element) {
  66.         assert element != null;
  67.  
  68.         ensureCapacity(queue, queue.size + 1);
  69.         queue.size++;
  70.         queue.head = (queue.head - 1 + queue.elements.length) % queue.elements.length;
  71.         queue.elements[queue.head] = element;
  72.     }
  73.     // (n' == n + 1) && (a'[i + 1] == a[i] for i = 0..n - 1) && (a'[0] == element)
  74.  
  75.     // Pre: n > 0
  76.     public static Object peek(ArrayQueueADT queue) {
  77.         assert queue.size > 0;
  78.  
  79.         return queue.elements[(queue.tail - 1 + queue.elements.length) % queue.elements.length];
  80.     }
  81.     // Post: (n' == n) && (a'[i] == a[i] for i = 0...n - 1) && (Result == a[n - 1])
  82.  
  83.     // Pre: n > 0
  84.     public static Object remove(ArrayQueueADT queue) {
  85.         assert queue.size > 0;
  86.  
  87.         Object result = queue.elements[(queue.tail - 1 + queue.elements.length) % queue.elements.length];
  88.         queue.elements[(queue.tail - 1 + queue.elements.length) % queue.elements.length] = null;
  89.         queue.tail = (queue.tail - 1 + queue.elements.length) % queue.elements.length;
  90.         queue.size--;
  91.         return result;
  92.     }
  93.     // Post: (n' == n - 1) && (a'[i] == a[i] for i = 0...n - 2) && (Result == a[n - 1])
  94.  
  95.     public static int size(ArrayQueueADT queue) {
  96.         return queue.size;
  97.     }
  98.     // Post: (n' == n) && (a'[i] == a[i] for i = 0...n - 1) && (Result == n)
  99.  
  100.     public static boolean isEmpty(ArrayQueueADT queue) {
  101.         return queue.size == 0;
  102.     }
  103.     // Post: (n' == n) && (a'[i] == a[i] for i = 0...n - 1) && (Result == (n == 0))
  104.  
  105.     public static void clear(ArrayQueueADT queue) {
  106.         queue.size = queue.head = queue.tail = 0;
  107.     }
  108.     // Post: n == 0
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement