Advertisement
Nikolovska

[НП] лаб6.1 Генерички магацин (Stack)

Jun 6th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.25 KB | None | 0 0
  1. /*Генерички податочни структури (6)
  2.  
  3. Генерички магацин (Stack) Problem 1 (0 / 0)
  4.  
  5. Да се имплементира генеричката податочна структура магацин (stack). Магацинот има еден генерички параметар T и
  6. следниве методи:
  7.  
  8. Stack() - креира нов празен магацин
  9. push(T element) - го додава елементот на врвот на магацинот
  10. peek():T - го враќа елементот на врвот на магацинот, но не го отстранува
  11. pop():T - го отстранува и го враќа елементот на врвот на магацинот
  12. isEmpty():boolean - враќа true ако магацинот е празен (не содржи ниту еден елемент)
  13. Може да користите поврзана листа ,единечна или двојна Node<T> или обична низа T[]. Не смеете да користите ArrayList,
  14. LinkedList или некоја друга готова структура. Методите pop и peek треба да фрлат исклучок EmptyStackException доколку
  15. магацинот е празен
  16.  
  17. Sample input
  18. 0 10
  19.  
  20. Sample output
  21. Test#0
  22. testing: Stack::push(T) , Stack::pop():T , T is Integer
  23. Pushing elements:
  24. 1 2 3 4 5 6 7 8 9 10
  25. Poping elements:
  26. 10 9 8 7 6 5 4 3 2 1
  27.  */
  28.  
  29.  
  30. import java.util.Date;
  31. import java.util.LinkedList;
  32. import java.util.Scanner;
  33. import java.util.EmptyStackException;
  34.  
  35.  
  36. class Stack<T> {
  37.     private T[] elements;
  38.  
  39.     public Stack() {
  40.         elements = (T[]) new  Object[0];
  41.     }
  42.  
  43.     public void push(T element){
  44.         T[] temp = (T[]) new Object[elements.length+1];
  45.         for (int i=0; i<elements.length; i++){
  46.             temp[i] = elements[i];
  47.         }
  48.         temp[elements.length] = element;
  49.         elements = temp;
  50.     }
  51.  
  52.     public T peek() throws EmptyStackException {
  53.         if (isEmpty())
  54.             throw new EmptyStackException();
  55.         return elements[elements.length-1];
  56.     }
  57.  
  58.     public T pop() throws EmptyStackException {
  59.         if (isEmpty())
  60.             throw new EmptyStackException();
  61.         T pop = elements[elements.length-1];
  62.         T[] temp = (T[]) new Object[elements.length-1];
  63.         for (int i=0; i<elements.length-1; i++){
  64.             temp[i] = elements[i];
  65.         }
  66.         elements = temp;
  67.         return pop;
  68.     }
  69.  
  70.     public boolean isEmpty(){
  71.         return elements.length == 0;
  72.     }
  73. }
  74.  
  75.  
  76.  
  77. public class StackTest {
  78.  
  79.    
  80.        
  81.     public static void main(String[] args) {
  82.         Scanner jin = new Scanner(System.in);
  83.         int k = jin.nextInt();
  84.         System.out.println("Test#"+k);
  85.         if ( k == 0 ) {
  86.             System.out.println("testing: Stack::push(T) , Stack::pop():T , T is Integer");
  87.             int n = jin.nextInt();
  88.             Stack<Integer> stack = new Stack<Integer>();
  89.             System.out.println("Pushing elements:");
  90.             for ( int i = 1 ; i <= n ; ++i ) {
  91.                 if ( i > 1 ) System.out.print(" ");System.out.print(i);
  92.                 stack.push(i);
  93.             }
  94.             System.out.println();
  95.             System.out.println("Poping elements:");
  96.             for ( int i = n ; i >= 1 ; --i ) {
  97.                 if ( i < n ) System.out.print(" ");
  98.                 System.out.print(stack.pop());
  99.             }
  100.             System.out.println();
  101.         }
  102.         if ( k == 1 ) {
  103.             System.out.println("testing: Stack::push(T) , Stack::pop():T , T is String");
  104.            
  105.             int n = jin.nextInt();
  106.             Stack<String> stack = new Stack<String>();
  107.             System.out.println("Pushing elements:");
  108.             for ( int i = 0 ; i < n ; ++i ) {
  109.                 if ( i > 0 ) System.out.print(" ");
  110.                 String next = jin.next();System.out.print(next);
  111.                 stack.push(next);
  112.             }
  113.             System.out.println();
  114.             System.out.println("Poping elements:");
  115.             for ( int i = 0 ; i < n ; ++i ) {
  116.                 if ( i > 0 ) System.out.print(" ");
  117.                 System.out.print(stack.pop());
  118.             }
  119.         }
  120.         if ( k == 2 ) {
  121.             System.out.println("testing: Stack::push(T) , Stack::pop():T , Stack::isEmpty():boolean, T is Double");
  122.            
  123.             Stack<Double> stack = new Stack<Double>();
  124.             System.out.println("Pushing elements:");
  125.             boolean flag = false;
  126.             while ( jin.hasNextDouble() ) {
  127.                 double d = jin.nextDouble();
  128.                 stack.push(d);
  129.                 if ( flag ) System.out.print(" ");
  130.                 System.out.printf("%.2f",d);
  131.                 flag = true;
  132.             }
  133.             int i = 0;
  134.             System.out.println();
  135.             System.out.println("Poping elements:");
  136.             while ( ! stack.isEmpty() ) {
  137.                 if ( i > 0 ) System.out.print(" ");++i;
  138.                 System.out.printf("%.2f",stack.pop());
  139.             }
  140.         }
  141.         if ( k == 3 ) {
  142.             System.out.println("testing: Stack::push(T) , Stack::pop():T , Stack::isEmpty():boolean , Stack::peek():T , T is Long");
  143.            
  144.             int n = jin.nextInt();
  145.             Stack<Long> stack = new Stack<Long>();
  146.             LinkedList<Long> control_stack = new LinkedList<Long>();
  147.             boolean exact = true;
  148.             for ( int i = 0 ; exact&&i < n ; ++i ) {
  149.                 if ( Math.random() < 0.5 ) {//add
  150.                     long to_add = (long)(Math.random()*456156168);
  151.                     stack.push(to_add);control_stack.addFirst(to_add);
  152.                 }
  153.                 else {
  154.                     exact &= control_stack.isEmpty()==stack.isEmpty();
  155.                     if ( exact&&! stack.isEmpty() ) {
  156.                         if ( Math.random() > 0.7 ) exact &= control_stack.removeFirst().equals(stack.pop());
  157.                         else exact &= control_stack.peekFirst().equals(stack.peek());
  158.                     }
  159.                 }
  160.             }
  161.             System.out.println("Your stack outputs compared to the built in java stack were the same? "+exact);
  162.         }
  163.         if ( k == 4 ) {
  164.             System.out.println("testing: Stack::pop():T , Stack::isEmpty():boolean , Stack::peek():T , T is Long");
  165.            
  166.             Stack<Date> test_stack = new Stack<Date>();
  167.            
  168.             System.out.println("Stack empty? "+test_stack.isEmpty());
  169.             try {
  170.                 test_stack.pop();
  171.                 System.out.println("NO exeption was thrown when trying to pop from an empty stack!");
  172.                
  173.             } catch(Exception e) {
  174.                 System.out.print("Exeption thrown when trying to pop from an empty stack ");
  175.                 System.out.println(e.getClass().getSimpleName());
  176.             }
  177.             try {
  178.                 test_stack.peek();
  179.                 System.out.println("NO exeption was thrown when trying to peek in an empty stack!");
  180.             } catch(Exception e) {
  181.                 System.out.print("Exeption thrown when trying to peek in an empty stack ");
  182.                 System.out.println(e.getClass().getSimpleName());
  183.             }
  184.         }
  185.     }
  186.  
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement