CSE143X Stack/Queue Examples handout #28
Queues should be constructed using the Queue interface and the
LinkedList implementation:
Queue q = new LinkedList();
Stacks should be constructed using the Stack class (there is no interface):
Stack s = new Stack();
For Stack, we are using the following operations:
public void push(E value) // push given value onto top of the stack
public E pop() // removes and returns the top of the stack
public boolean isEmpty() // returns whether or not stack is empty
public int size() // returns number of elements in the stack
For Queue, we are using the following operations:
public void add(E value) // inserts given value at the end of the queue
public E remove() // removes and returns the front of the queue
public boolean isEmpty() // returns whether or not queue is empty
public int size() // returns number of elements in the queue
Sample Program StackQueue.java
------------------------------
import java.util.*;
public class StackQueue {
public static void main(String[] args) {
Queue q = makeRandomQueue(10);
System.out.println("initial queue = " + q);
System.out.println("sum = " + sum(q));
System.out.println("after sum queue = " + q);
System.out.println();
Stack s = new Stack();
queueToStack(q, s);
System.out.println("after queueToStack:");
System.out.println(" queue = " + q);
System.out.println(" stack = " + s);
System.out.println();
s = makeRandomStack(10);
System.out.println("initial stack = " + s);
System.out.println("sum = " + sum(s));
System.out.println("after sum stack = " + s);
System.out.println();
stackToQueue(s, q);
System.out.println("after stackToQueue:");
System.out.println(" stack = " + s);
System.out.println(" queue = " + q);
}
// pre : size >= 0
// post: returns a queue of size random values from 0 to 99
public static Queue makeRandomQueue(int size) {
Random r = new Random();
Queue q = new LinkedList();
for (int i = 0; i < size; i++)
q.add(r.nextInt(100));
return q;
}
// pre : size >= 0
// post: returns a stack of size random values from 0 to 99
public static Stack makeRandomStack(int size) {
Random r = new Random();
Stack s = new Stack();
for (int i = 0; i < size; i++)
s.push(r.nextInt(100));
return s;
}
// post: Values from q moved to s (added in queue order, front to back);
// q is empty
public static void queueToStack(Queue q, Stack s) {
while (!q.isEmpty()) {
int n = q.remove();
s.push(n);
}
}
// post: Values from s moved to q (added in stack order, top to bottom);
// s is empty
public static void stackToQueue(Stack s, Queue q) {
while (!s.isEmpty()) {
int n = s.pop();
q.add(n);
}
}
// post: returns the sum of the values in q
public static int sum(Queue q) {
int sum = 0;
for (int i = 0; i < q.size(); i++) {
int n = q.remove();
sum = sum + n;
q.add(n);
}
return sum;
}
// post: returns the sum of the values in s
public static int sum(Stack s) {
int sum = 0;
Queue q = new LinkedList();
while (!s.isEmpty()) {
int n = s.pop();
sum = sum + n;
q.add(n);
}
queueToStack(q, s);
stackToQueue(s, q);
queueToStack(q, s);
return sum;
}
}