Advertisement
Filip_Markoski

[NP] 4.3 Генерички ред (Solved)

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