Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. package queue;
  2.  
  3. public class ArrayQueueModule {
  4. private static int first, size;
  5. private static Object[] elements = new Object[10];
  6.  
  7. // a = elements[first..first + size]
  8.  
  9. // Pre: element != null
  10. // Post: first = first' && size = size' + 1 && for all i = 0..size' : a[i]' = a[i] && a[size] = element
  11. public static void enqueue(Object element) {
  12. assert element != null;
  13. ensureCapacity(size + 1);
  14. elements[(first + size) % elements.length] = element;
  15. size++;
  16. }
  17.  
  18. // Pre: element != null
  19. // Post: first = first' - 1 && size = size' + 1 && for all i = 0..size' : a[i + 1]' = a[i] && a[0] = element
  20. public static void push(Object element) {
  21. assert element != null;
  22. ensureCapacity(size + 1);
  23. first = (first - 1 + elements.length) % elements.length;
  24. elements[first] = element;
  25. size++;
  26. }
  27.  
  28. // Pre: a.length >= size
  29. // Post: a.length > size && for all i = 0..size : a[i]' = a[i]
  30. private static void ensureCapacity(int capacity) {
  31. if (capacity <= elements.length) {
  32. return;
  33. }
  34. Object[] newElements = new Object[2 * capacity];
  35. for (int i = 0; i < size; i++) {
  36. newElements[i] = elements[(i + first) % elements.length];
  37. }
  38. first = 0;
  39. elements = newElements;
  40. }
  41.  
  42. // Pre: size > 0
  43. // Peek: first = first' && size = size' && for all i = 0..size : a[i]' = a[i]
  44. public static Object element() {
  45. assert size > 0;
  46. return elements[first];
  47. }
  48.  
  49. // Pre: size > 0
  50. // Peek: first = first' && size = size' && for all i = 0..size : a[i]' = a[i]
  51. public static Object peek() {
  52. assert size > 0;
  53. return elements[(first + size - 1) % elements.length];
  54. }
  55.  
  56. // Pre: size > 0
  57. // Peek: first = first' && size = size' - 1 && for all i = 0..size' : a[i]' = a[i]
  58. public static Object dequeue() {
  59. assert size > 0;
  60. Object now = elements[first];
  61. first++;
  62. first %= elements.length;
  63. size--;
  64. return now;
  65. }
  66.  
  67. // Pre: size > 0
  68. // Post: first = first' && size = size' − 1 && for all i = 0..size' : a[i]' = a[i]
  69. public static Object remove() {
  70. assert size > 0;
  71. Object now = elements[(first + size - 1) % elements.length];
  72. size = (size - 1 + elements.length) % elements.length;
  73. return now;
  74. }
  75.  
  76. // Post: first = first' && size = size' && for all i = 0..size : a[i]' = a[i]
  77. public static int size() {
  78. return size;
  79. }
  80.  
  81. // Post: first = first' && size = size' && for all i = 0..size : a[i]' = a[i]
  82. public static boolean isEmpty() {
  83. return size == 0;
  84. }
  85.  
  86. // Post: first = first' && size = 0
  87. public static void clear() {
  88. size = 0;
  89. }
  90.  
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement