In: Computer Science
In java, write a class that tests the following code. Add screen shots as well.
public class DoubleStack<E> {
private E[] elements;
private int top1, top2;
private static int DEFAULT_SIZE = 10;
public DoubleStack() {
elements = (E[])new
Object[DEFAULT_SIZE];
top1 = 0;
top2 = elements.length - 1;
}
public boolean isFull(int stack) {
if(top2 == top1 + 1)
return
true;
else
return
false;
}
public boolean isEmpty(int stack) {
if(stack == 1 && top1 ==
0)
return
true;
else if(stack == 2 && top2
== elements.length-1)
return
true;
else
return
false;
}
public void push(int stack, E data) {
if(isFull(stack))
resize();
if(stack == 1) {
elements[top1] =
data;
top1++;
}
else if(stack == 2) {
elements[top2] =
data;
top2--;
}
}
public E peek(int stack) {
if(!isEmpty(stack))
{
if(stack ==
1)
return elements[top1-1];
else if(stack ==
2)
return elements[top2+1];
}
return null;
}
public E pop(int stack) {
if(!isEmpty(stack))
{
if(stack ==
1)
return elements[--top1];
else if(stack ==
2)
return elements[++top2];
}
return null;
}
public int size(int stack) {
if(stack == 1)
return
top1;
else if(stack == 2)
return
elements.length - 1 - top2;
else
return 0;
}
public void resize() {
E[] temp = (E[])new
Object[elements.length * 2];
for(int i = 0; i < top1;
i++){
temp[i] =
elements[i];
}
int i, j;
for(i = elements.length - 1, j =
temp.length-1; i > top2; i--, j--) {
temp[j] =
elements[i];
}
elements = temp;
top2 = j;
}
}
//Java program
class DoubleStack<E> {
private E[] elements;
private int top1, top2;
private static int DEFAULT_SIZE = 10;
public DoubleStack() {
elements = (E[])new Object[DEFAULT_SIZE];
top1 = 0;
top2 = elements.length - 1;
}
public boolean isFull(int stack) {
if(top2 == top1 + 1)
return true;
else
return false;
}
public boolean isEmpty(int stack) {
if(stack == 1 && top1 == 0)
return true;
else if(stack == 2 && top2 ==
elements.length-1)
return true;
else
return false;
}
public void push(int stack, E data) {
if(isFull(stack))
resize();
if(stack == 1) {
elements[top1] = data;
top1++;
}
else if(stack == 2) {
elements[top2] = data;
top2--;
}
}
public E peek(int stack) {
if(!isEmpty(stack))
{
if(stack == 1)
return elements[top1-1];
else if(stack == 2)
return elements[top2+1];
}
return null;
}
public E pop(int stack) {
if(!isEmpty(stack))
{
if(stack == 1)
return elements[--top1];
else if(stack == 2)
return elements[++top2];
}
return null;
}
public int size(int stack) {
if(stack == 1)
return top1;
else if(stack == 2)
return elements.length - 1 - top2;
else
return 0;
}
public void resize() {
E[] temp = (E[])new Object[elements.length * 2];
for(int i = 0; i < top1; i++){
temp[i] = elements[i];
}
int i, j;
for(i = elements.length - 1, j = temp.length-1; i >
top2; i--, j--) {
temp[j] = elements[i];
}
elements = temp;
top2 = j;
}
}
public class Stack{
public static void main(String args[]){
DoubleStack<Integer> st = new
DoubleStack<Integer>();
st.push(1, 10);
st.push(1, 20);
st.push(1, 30);
st.push(2, 40);
st.push(2, 50);
System.out.println("Peek element in
stack 1 "+ st.peek(1));
System.out.println("Peek element in
stack 2 "+ st.peek(2));
System.out.println("Size of stack 1
: " + st.size(1));
System.out.println("Size of stack 2
: " + st.size(2));
st.pop(1);
st.pop(2);
System.out.println("Peek element in
stack 1 "+ st.peek(1));
System.out.println("Peek element in
stack 2 "+ st.peek(2));
System.out.println("Size of stack 1
: " + st.size(1));
System.out.println("Size of stack 2
: " + st.size(2));
st.pop(1);
st.pop(2);
System.out.println("Peek element in
stack 1 "+ st.peek(1));
System.out.println("Peek element in
stack 2 "+ st.peek(2));
System.out.println("Size of stack 1
: " + st.size(1));
System.out.println("Size of stack 2
: " + st.size(2));
}
}
//sample output