[英]Insert elements of a Queue in a Stack java
我正在练习,这是文本:函数将队列Q,空堆栈S和整数k作为输入,并在S中插入Q的前k个元素,以便Q前面的元素位于S的顶部和Q的第k个元素在S的底部。例如,如果Q = <6,8,7,15,20,9>,其中6是前面的元素,则之后调用insert(Q,S,4),我们得到S = <6,8,7,15>,其中6是顶部的元素。 我不能使用任何数据结构。 这是我的解决方案,但无法正常工作,我以错误的顺序插入元素...
public static void main(String[] args) {
Queue<String>Q=new ArrayQueue<String>();
Stack<String>S=new ArrayStack<String>();
Q.enqueue("Bob");
Q.enqueue("Tom");
Q.enqueue("Ann");
Q.enqueue("Bill");
Q.enqueue("David");
Q.enqueue("Mary");
Q.enqueue("Bob");
Q.enqueue("Jane");*/
for(int k=1;k<=9;k++){
insert(Q,S,k);
System.out.print("Dopo aver invocato insert con k="+k +", S = < ");
while(!S.isEmpty())
System.out.print(S.pop()+" ");
System.out.println(">");
}
}
public static <E>void insert(Queue<E> Q,Stack<E> S, int k){
int sizeOfQ=Q.size();
if(sizeOfQ<k)
return;
for(int i=0;i<k;i++){
E elt=Q.dequeue();
Q.enqueue(elt);
}
for(int i=0;i<sizeOfQ;i++){
E elt=Q.dequeue();
if(i>=sizeOfQ-k){
S.push(elt);
Q.enqueue(elt);
}else{
Q.enqueue(elt);
}
}
for(int i=0;i<sizeOfQ-k;i++){
Q.enqueue(Q.dequeue());
}
显然,这是一种考试,所以我不能直接给您答案。
我能做的就是向您显示找到解决方案的方向。
尝试用其他形式写问题:
以这种形式编写的它接缝了一个递归算法。 是不是
如果可以使用递归,则此问题非常简单。
仅注意两点:
如果无法递归,则需要插入一个新的数据结构(列表,数组或另一个堆栈,在这种情况下,任何可能性都可以正常工作)以维护中间步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.