Advertisement
lameski

Untitled

Jun 11th, 2017
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.62 KB | None | 0 0
  1. //genericki red
  2. import java.util.LinkedList;
  3. import java.util.Scanner;
  4.  
  5. class EmptyQueueException extends RuntimeException{}
  6.  
  7.  
  8. class Node<T>
  9. {
  10. T element;
  11. Node<T> next;
  12. Node(T element, Node<T> next)
  13. {
  14. this.element = element;
  15. this.next = next;
  16. }
  17.  
  18. public T getElement()
  19. {
  20. return element;
  21. }
  22. public Node<T> getNext()
  23. {
  24. return next;
  25. }
  26.  
  27. public void setNext(Node<T> next)
  28. {
  29. this.next = new Node<T>(next.element, next);
  30. }
  31.  
  32. }
  33. class Queue<T>
  34. {
  35. Node<T> first, last;
  36. int count;
  37. public Queue()
  38. {
  39. first = last = null;
  40. count = 0;
  41. }
  42.  
  43. public boolean isEmpty()
  44. {
  45. return count == 0;
  46. }
  47.  
  48. public void enqueue(T element)
  49. {
  50. if(this.isEmpty())
  51. first = last = new Node<T>(element, null);
  52. else
  53. {
  54. last.setNext(new Node<T>(element, null));
  55. last = last.next;
  56. }
  57.  
  58. count++;
  59. }
  60.  
  61. public T dequeue()
  62. {
  63. if(count == 0)
  64. throw new EmptyQueueException();
  65.  
  66. T element = first.element;
  67. first = first.next;
  68. count--;
  69. return element;
  70. }
  71.  
  72. public T peek()
  73. {
  74. if(count==0)
  75. throw new EmptyQueueException();
  76. return first.element;
  77. }
  78.  
  79. public T inspect()
  80. {
  81. if(count==0)
  82. throw new EmptyQueueException();
  83. return last.element;
  84. }
  85.  
  86. public int count()
  87. {
  88.  
  89. return count;
  90. }
  91. }
  92.  
  93. public class QueueTest {
  94.  
  95.  
  96. public static void main(String[] args) throws EmptyQueueException {
  97. Scanner scanner = new Scanner(System.in);
  98. int numberOfElements = scanner.nextInt();
  99. if (numberOfElements == 0) { //Simple test case with one int element
  100. int element = scanner.nextInt();
  101. Queue<Integer> queue = new Queue<>();
  102. System.out.println("Queue empty? : " + queue.isEmpty());
  103. System.out.println("Queue count? : " + queue.count());
  104. System.out.println("Queue enqueue: " + element);
  105. queue.enqueue(element);
  106. System.out.println("Queue empty? : " + queue.isEmpty());
  107. System.out.println("Queue count? : " + queue.count());
  108. System.out.println("Queue dequeue? : " + queue.dequeue());
  109. System.out.println("Queue empty? : " + queue.isEmpty());
  110. System.out.println("Queue count? : " + queue.count());
  111. } else if (numberOfElements == 1) { //a more complex test with strings
  112. Queue<String> queue = new Queue<>();
  113. int counter = 0;
  114. while (scanner.hasNextInt()) {
  115. String t = scanner.next();
  116. queue.enqueue(t);
  117. ++counter;
  118. }
  119. for (int i = 0; i < counter; ++i) {
  120. System.out.println(queue.dequeue());
  121. }
  122. queue.enqueue(scanner.next());
  123. System.out.println("Queue inspect? : " + queue.inspect());
  124. System.out.println("Queue peek? : " + queue.peek());
  125. queue.enqueue(queue.dequeue());
  126. queue.enqueue(scanner.next());
  127. System.out.println("Queue inspect? : " + queue.inspect());
  128. System.out.println("Queue peek? : " + queue.peek());
  129. } else if (numberOfElements == 2) {
  130. Queue<String> queue = new Queue<>();
  131. String next;
  132. int counter = 0;
  133. while (true) {
  134. next = scanner.next();
  135. if (next.equals("stop")) break;
  136. queue.enqueue(next);
  137. ++counter;
  138. }
  139. while (!queue.isEmpty()) {
  140. if (queue.count() < counter) System.out.print(" ");
  141. System.out.print(queue.dequeue());
  142. }
  143. } else if (numberOfElements == 3) { //random testing
  144. Queue<Double> queue = new Queue<>();
  145. LinkedList<Double> linkedQueue = new LinkedList<>();
  146. boolean flag = true;
  147. int n = scanner.nextInt();
  148. for (int i = 0; i < n; ++i) {
  149. double q = Math.random();
  150. if (q < 0.5) {
  151. double t = Math.random();
  152. queue.enqueue(t);
  153. linkedQueue.addFirst(t);
  154. }
  155. if (q < 0.8&&q >= 0.5) {
  156. if (!linkedQueue.isEmpty()) {
  157. double t1 = linkedQueue.removeLast();
  158. double t2 = queue.dequeue();
  159. flag &= t1 == t2;
  160. } else {
  161. flag &= linkedQueue.isEmpty() == queue.isEmpty();
  162. }
  163. }
  164. if (q < 0.9 && q >= 0.8) {
  165. if (!linkedQueue.isEmpty()) {
  166. double t1 = linkedQueue.peekLast();
  167. double t2 = queue.peek();
  168. flag &= t1 == t2;
  169. } else {
  170. flag &= linkedQueue.isEmpty() == queue.isEmpty();
  171. }
  172. }
  173. if (q < 1 && q >= 0.9) {
  174. if (!linkedQueue.isEmpty()) {
  175. double t1 = linkedQueue.peekFirst();
  176. double t2 = queue.inspect();
  177. flag &= t1 == t2;
  178. } else {
  179. flag &= linkedQueue.isEmpty() == queue.isEmpty();
  180. }
  181. }
  182. flag &= linkedQueue.size() == queue.count();
  183. }
  184. System.out.println("Compared to the control queue the results were the same? : " + flag);
  185. } else if (numberOfElements == 4) { //performance testing
  186. Queue<Double> queue = new Queue<>();
  187. int n = scanner.nextInt();
  188. for (int i = 0; i < n; ++i) {
  189. if (Math.random() < 0.5) {
  190. queue.enqueue(Math.random());
  191. } else {
  192. if (!queue.isEmpty()) {
  193. queue.dequeue();
  194. }
  195. }
  196. }
  197. System.out.println("You implementation finished in less then 3 seconds, well done!");
  198. } else if (numberOfElements == 5) { //Exceptions testing
  199. Queue<String> queue = new Queue<>();
  200. try {
  201. queue.dequeue();
  202. } catch (Exception e) {
  203. System.out.println(e.getClass().getSimpleName());
  204. }
  205. try {
  206. queue.peek();
  207. } catch (Exception e) {
  208. System.out.println(e.getClass().getSimpleName());
  209. }
  210. try {
  211. queue.inspect();
  212. } catch (Exception e) {
  213. System.out.println(e.getClass().getSimpleName());
  214. }
  215. }
  216. }
  217.  
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement