这是一本关于在LinkedLists,Stacks和Queue上测试你的书的问题。目标是从这段简短的代码片段中打印出所需的输出。我已将代码附在我的分析中。
LinkedList<Integer> a = new LinkedList<Integer>();
Stack<Integer> s = new Stack<Integer>();
Queue<Integer> q = new LinkedList<Integer>();
a.add( 2 );
a.add( 3 );
a.add( 5 );
a.add( 7 );
LL:a = {2, 3, 5, 7}
for ( int i : a )
{
System.out.print( i + " " );
s.push( i );
q.add( i );
}
打印输出:2 3 5 7
筹码:s = {2, 3, 5, 7}
队列:q = {2, 3, 5, 7}
System.out.println();
for ( int i : a )
{
s.push( i );
q.add( s.pop() + 5 );
System.out.print( s.pop() + " " );
}
筹码:s = {2, 3, 5, 7, 2, 3, 5, 7}
队列:q = {2, 3, 5, 7, 12, 10, 8, 7}
。这是s.pop() + 5
打印输出:7 5 3 2
System.out.println();
for ( int i : a )
{
System.out.print( q.remove() + " " );
System.out.print( q.remove() + " " );
}
打印输出:2 3 5 7 12 10 8 7
总而言之,我的打印输出是:
2 3 5 7
7 5 3 2
2 3 5 7 12 10 8 7
然而,这个问题的答案是:
2 3 5 7
7 5 3 2
2 3 5 7 7 8 10 12
如您所见,结果在队列打印中不匹配。我重复了两次问题,但无法确定我在添加(s.pop() + 5
)或.pop()
打印时是否出错。有人能给我一些关于我做错了什么的见解吗?
答案 0 :(得分:2)
我认为你的错误就在这里,在第三段代码中:
for ( int i : a )
{
s.push( i );
q.add( s.pop() + 5 );
System.out.print( s.pop() + " " );
}
将i
推入堆栈后,会立即通过q.add(s.pop() + 5);
弹出。执行将是这样的:
在:
s == [2, 3, 5, 7]
q == [2, 3, 5, 7]
第一次迭代:
2 is pushed onto s
2 is popped off of s
5 is added to 2
7 is added to q
7 is popped off s and printed
第二次迭代:
3 is pushed onto s
3 is popped off of s
5 is added to 3
8 is added to q
5 is popped off s and printed
依此类推。
因此,该循环之后的正确结果应该是一个空堆栈和一个队列:
[2, 3, 5, 7, 7, 8, 10, 12]
我认为其他一切都还可以。