Advertisement
mbojmaliev

[НП] Генерички ред

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