In: Computer Science
Assume you have a stack of integers. The stack contains same number of positive and negative integers. You want to organize it such that negative and positive integers alternate (+-+-.., or -+-+,..).
A. Write a Java code that uses no more than two additional Stacks to solve the problem.
Note: You do not need to write the code for Stacks, you are using a Stack from the library with a name ourStack and has the following interface: ourStack() constructor, pop, push, isEmpty, size(), peek()).
B- Solve the same problem using one temporary list with interface: ourList() constructor, insertFront, insertBack, removeFront, removeBack, isEmpty, size().
Bonus Can you solve the problem using one queue (ourQueue with interface (add, remove, isEmpty, size() and peek() that returns the front without removing it).
Big Bonus: Solve the problem using only one temporary stack.
This question is for my midterm. please I need comments on the code.
the code below is a code that pro covered in class for the stacks and he expect something like that.
public class ourStack<T> {
        private T[]  S;
        private int size = 0;
        public ourStack() {
                S = (T[]) new Object[100];
                size = 0;
        }
        public int size() {
                return size;
        }
        public boolean isEmpty() {
                return (size == 0? true:false);
        }
        //index size is the empty spot. 
        public void push(T e) {
                if(size == S.length)
                        this.resize();
                this.S[size] = e;
                size++;
        }
        public T pop() {
                if(this.isEmpty())
                        return null;
                size--;
                return this.S[size];
        }
        public T peek() {
                if(this.isEmpty())
                        return null;
                return this.S[size - 1];
        }
        private void resize() {
                 //create an array temp of length Ar.length + 100
                 T[] temp = (T[]) new Object[this.S.length+100];
                 //copy array Ar into array temp
                 for(int i = 0; i<S.length; i++)
                         temp[i] = this.S[i];
                 //assign temp to Ar.
                 this.S = temp;
                 
         }
        //write a toString to return the content of the array in the form  [-3, -2, -5]
        public String toString() {
                String st = "[";
                if(this.isEmpty())
                        return "[]";
                 for (int i = 0; i<size -1; i++) {
                         st += this.S[i] + ", ";
                 }
                 st += this.S[size - 1] + "]";   
                
                 return st;      
                         
                 }      
}
Of all the ways to solve this problem, I went for the most optimized one so that you can get that BIG BONUS. I used the stack class provided in the question for stack functions.
import java.util.*;
import java.io.*;
public class Main{
  public static void main(String[] args){
    ourStack<Integer> s1 = new ourStack<Integer>();
    s1.push(5);
    s1.push(3);
    s1.push(2);
    s1.push(-1);
    s1.push(-6);
    s1.push(8);
    s1.push(-9);
    s1.push(-4);
    ourStack<Integer> s2 = new ourStack<Integer>();
    int a=s1.peek();
    while(s1.isEmpty()==true || s2.isEmpty()==true){
    while(s1.size()>0){
      if(s1.peek()>0 && a>0){
        a=s1.pop();
        s2.push(a);
      }else if(s1.peek()<0 && a<0){
        a=s1.pop();
        s2.push(a);
      }else{
        a=s1.pop();
        System.out.print(a+" ");
      }
    }
    
    while(s2.size()>0){
      if(s2.peek()>0 && a>0){
        a=s2.pop();
        s1.push(a);
      }else if(s2.peek()<0 && a<0){
        a=s2.pop();
        s1.push(a);
      }else{
        a=s2.pop();
        System.out.print(a+" ");
      }
    }
  }
  }
}

(Throw an upvote or comment if you have any doubts.)