我错过了什么来完成这个问题?
家庭作业问题说:
假设您有3个整数堆栈,s1(其中包含值),s2(为空)和s3(也为空)。使用此处给出的算法编写代码以对s1中的条目进行排序(排序的值将在结尾处的s2中): 在任何时间点,s2将按排序顺序保留条目,最小值位于顶部。将s1的顶部条目移动到s2。删除并考虑s1的顶部条目t。删除堆栈s2的条目并将它们放到堆栈s3上,直到到达正确的位置以放置t。然后把t放到s2上。接下来将所有条目从s3移动到s2。
到目前为止我的代码:
public class practice2
{
public static void main(String[] args)
{
Stack<Integer> s1 = new Stack<Integer>();
Stack<Integer> s2 = new Stack<Integer>();
Stack<Integer> s3 = new Stack<Integer>();
s1.push(1);
s1.push(61);
s1.push(21);
s1.push(31);
s1.push(51);
s1.push(111);
s2.push(s1.pop());
while(!s1.isEmpty())
{
if(s1.peek() < s2.peek())
{
s2.push(s1.pop());
}
else
{
s3.push(s1.pop());
}
}
if(s2.peek() < s3.peek())
{
while(!s2.isEmpty())
{
s1.push(s2.pop());
}
}
while(!s1.isEmpty())
{
if(s1.peek() > s3.peek())
{
s2.push(s1.pop());
}
else
s2.push(s3.pop());
}
}
}
答案 0 :(得分:0)
您的代码不符合您提供的算法。您要实现的算法是
所以编写伪代码来执行此操作:
目前,您的代码执行以下操作:
虽然 s1 不为空:如果 s1 的顶部小于 s2的顶部
如果 s2 的顶部小于 s3的顶部
虽然 s1 不为空:如果 s1 的顶部大于 s3的顶部
希望这有帮助。