Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.88 KB | None | 0 0
  1. import edu.princeton.cs.algs4.StdIn;
  2. import edu.princeton.cs.algs4.StdOut;
  3.  
  4. import java.util.NoSuchElementException;
  5.  
  6. public class StackedQueue<Item> {
  7.     private int prev_capacity = 0;
  8.     private int popPointer = 0;
  9.     private int pushPointer = 0;
  10.     private Item[] popArray;
  11.     private Item[] pushArray;
  12.  
  13.     public StackedQueue() {
  14.         popArray = (Item[]) new Object[1];
  15.         pushArray = (Item[]) new Object[1];
  16.     }
  17.  
  18.     public boolean isEmpty() {
  19.         return popPointer == 0 && pushPointer == 0;
  20.     }
  21.  
  22.     private void traverse() {
  23.         StdOut.println("PopStack");
  24.         for (int i = 0; i < popArray.length; i++) StdOut.print(popArray[i] + " ");
  25.         StdOut.println("\nPushStack");
  26.         for (int i = 0; i < pushArray.length; i++) StdOut.print(pushArray[i] + " ");
  27.         StdOut.println();
  28.     }
  29.  
  30.     public void enqueue(Item item) {
  31.         if (pushPointer == pushArray.length) resizeArray(2 * pushArray.length);
  32.         pushArray[pushPointer++] = item;
  33.         StdOut.println("Push pointer became " + pushPointer);
  34.     }
  35.  
  36.     public Item dequeue() {
  37.         if (isEmpty()) throw new NoSuchElementException();
  38.         if (popPointer == 0) {
  39.             try {
  40.                 resize();
  41.             } catch (NoSuchElementException e) {
  42.                 return null;
  43.             }
  44.         }
  45.  
  46.         Item item = popArray[--popPointer];
  47.         popArray[popPointer] = null;
  48.         StdOut.println("Pop pointer became " + popPointer);
  49.  
  50.         return item;
  51.     }
  52.  
  53.     private void resizeArray(int capacity) {
  54.         Item[] copy = (Item[]) new Object[capacity];
  55.         for (int i = 0; i < pushPointer; i++) {
  56.             copy[i] = pushArray[i];
  57.         }
  58.         pushArray = copy;
  59.     }
  60.  
  61.     private void resize() {
  62.         Item[] copy = (Item[]) new Object[1];
  63.         Item[] newPushArray = (Item[]) new Object[1];
  64.         if (pushArray.length != prev_capacity) {
  65.             newPushArray = (Item[]) new Object[pushArray.length - prev_capacity];
  66.         }
  67.         if (pushPointer != prev_capacity) {
  68.             copy = (Item[]) new Object[pushPointer - prev_capacity];
  69.         } else {
  70.             StdOut.println("empty pop stack");
  71.             throw new NoSuchElementException();
  72.         }
  73.  
  74.         int j = 0;
  75.         for (int i = prev_capacity; i < pushPointer; i++) {
  76.             newPushArray[j] = pushArray[i];
  77.             copy[j++] = pushArray[i];
  78.         }
  79.         prev_capacity = j;
  80.         popArray = copy;
  81.         pushArray = newPushArray;
  82.  
  83.         popPointer = j;
  84.         pushPointer = j;
  85.     }
  86.  
  87.  
  88.     public static void main(String[] args) {
  89.         StackedQueue<String> queue = new StackedQueue<>();
  90.         while (!StdIn.isEmpty()) {
  91.             String word = StdIn.readString();
  92.             if (word.equals("traverse")) queue.traverse();
  93.             else if (word.equals("-")) {
  94.                 StdOut.println("dequeued - " + queue.dequeue());
  95.             } else queue.enqueue(word);
  96.         }
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement