Это типичная перестановка стека с помощью двух очередей, одна для ввода, а другая для вывода. Я хочу проверить, является ли q2 (вывод) правильной перестановкой q1 (ввод), но я не могу сравнивать выбор из первых двух очередей из-за их типа Object
, поскольку оператор >=
не будет работать на нем.Сравнение передних элементов очереди с помощью оператора> =
package a2;
import a1queue.*;
import a1stack.*;
public class Permu {
public static int stperm(ArrayQueue q1,ArrayQueue q2) throws EmptyStackException, QueueFullException, EmptyQueueException, StackFullException{
ArrayStack s = new ArrayStack();
while(!q2.isEmpty()){
while(!q1.isEmpty() && q2.front() >=q1.front()){// shows error here
if(q2.front() == q1.front()){
System.out.println("enqueue(q2,dequeue(q1))-> "+ q1.front() + " is enqueued in q2.");
q1.dequeue();
q2.dequeue();
}
else {
System.out.println("push(s,dequeue(q1)) -> " + q1.front() + " is pushed into stack.");
s.push(q1.dequeue());
}
}
if (q2.front() == s.top()){
System.out.println("enqueue(q2, pop(s)) "+s.top() +" is popped from stack & enqueued in q2.");
s.pop();
q2.dequeue();
}
else{
q1.enqueue(s.pop());
System.out.println(s.top());
break;
}
}
System.out.println("it is a permutation");
return 0;
}
private static int compare(java.lang.Object front, java.lang.Object front2) {
// TODO Auto-generated method stub
return 0;
}
private static int Object(Object front) {
// TODO Auto-generated method stub
return 0;
}
public static void main(String[] args) throws QueueFullException,StackFullException,EmptyQueueException,EmptyStackException {
ArrayQueue q1 = new ArrayQueue();
ArrayQueue q2 = new ArrayQueue();
q1.enqueue(1);
q1.enqueue(2);
q1.enqueue(3);
q1.enqueue(4);
q1.enqueue(5);
q1.enqueue(6);
q2.enqueue(4);
q2.enqueue(5);
q2.enqueue(3);
q2.enqueue(2);
q2.enqueue(1);
q2.enqueue(6);
System.out.print(stperm(q1,q2));
}
}
Почему бы не сделать очереди родовыми? Я вижу, что вы добавляете целые числа, поэтому Queue вернет целое число, которое вы можете сравнить. –