Advertisement
Nikolovska

[НП] лаб4.3 Генерички ред

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