#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