Как перевернуть стек и распечатать его с помощью pop()?

#java

Вопрос:

У меня есть код, чтобы проложить путь из лабиринта. Я хочу создать новый класс, который перевернет стек. Стек должен быть таким, чтобы верхний элемент шел снизу и аналогично (в обратном порядке).

Исходный Код

 public class Stack {

 int SIZE = 100;
   Pos  st[];
   int top;
   Stack(int sz)
   {
      top = 0;
      st = new Pos[sz];
   }   
   Stack()
   {
      top = 0;
      st = new Pos[SIZE];
      
   }
   void push(Pos loc)
   {  
      st[top] = loc;
      top  ;
   }  
   void push(int row, int col)
   {
      st[top] = new Pos(row, col);
      top  ;
   }
   boolean isempty()
   { 
      return (top == 0);
   }
   Pos pop()
   {
     Pos loc = null;
     if (!isempty())
     {
       top--;
       loc = st[top];
     }
     return loc;
   }
   Pos peek()
   {
     Pos loc = null;
     if (!isempty())
        loc = st[top-1];
     return loc;
   }
}
 

Я создал новый переключатель стеков классов, в котором я

Моя неудачная попытка

 public static void stackSwitch(Stack stack1){

        Stack stack2 = new Stack();
        Object top = stack1.topEl();
//save the top
        top = stack1.pop();
        stack2.push(stack1.pop());
        stack2.push(stack1.pop());
//push it back
        stack1.push(top);
        stack1.push(stack2.pop());
        stack1.push(stack2.pop());
 //save the top
        top = stack1.pop();
        stack2.push(stack1.pop()); // The bottom is left in Stack
        stack2.push(top);
        stack.push(stack2.pop());
        stack.push(stack2.pop());
   
        while(!stack.isEmpty()){
            stack2.push(stack1.pop());
        }
             
    }
 

Пожалуйста, помогите мне перенести стек в обратном порядке, создав новый класс.

Ответ №1:

Поскольку ваш код не завершен, я объясню это с помощью кода sudo. Я не знаю, лучший ли это метод или нет, но используйте следующий код sudo, чтобы делать то, что вы хотите.

 input: stack1;

Stack stack2 = new Stack();
Stack stack3 = new Stack();

foreach(item in stack1) {
    stack2.push(stack1.peak); //peak return the upper value in stack
    stack3.push(stack1.pop);  //pop return the upper value in stack and remove it
}

foreach(item in stack3) {
    stack1.push(stack3.pop);  
}

 

Однако гораздо лучше использовать a queue вместе с вашим основным стеком при вставке в стек, чтобы иметь обратный порядок вашего стека:

 Stack1 stack = new Stack;
Queue queue = new Queue;

for(i=1 to n) {
  stack.push(i);
  queue.add(i);
}
//here queue and stack are in reverse order