Algorithm 算法-堆栈和队列

Algorithm 算法-堆栈和队列,algorithm,stack,queue,Algorithm,Stack,Queue,我正在为我的考试做复习,我遇到了这个问题,我需要在执行以下代码后找到Q1的内容 数据 5, 7, 12, 4, 0, 4, 6, 8, 67, 34, 23, 5, 0, 44, 33, 22, 6, 0 普塞多密码 Q1=createQueue S1=createStack loop (not end of file) read number if (number not 0) pushStack (S1,number) else p

我正在为我的考试做复习,我遇到了这个问题,我需要在执行以下代码后找到Q1的内容

数据

5, 7, 12, 4, 0, 4, 6, 8, 67, 34, 23, 5, 0, 44, 33, 22, 6, 0
普塞多密码

Q1=createQueue
S1=createStack
loop (not end of file)
    read number 
    if (number not 0)
        pushStack (S1,number)
    else
        popStack (S1,x)
        popStack (S1,x)
        loop (not empty S1)
            popStack (S1,x)
            enqueue (Q1,x)
        end loop
    end if
end loop
这是我的解决方案

如果数字不是0,则将数字推送到堆栈中 所以现在堆栈变为

6
22
33
44 
5
23
34
67
8
6
4
4
12
7
5
否则弹出堆栈的前2个元素 所以现在堆栈变为

33
44 
5
23
34
67
8
6
4
4
12
7
5
3.循环堆栈!空,弹出堆栈并在Q1中排队。因此,现在堆栈为空,队列变为空

5,7,12,4,4,6,8,67,34,23,5,44,33
33是队列中的第一个,5是队列中的最后一个

我仔细核对了提供的答案,发现我的答案不同

提供的答案

7,5,34,67,8,6,4,33,44

我不确定谁是对的。请帮助。

您的推理方向正确,但输入中有三个零,您似乎只对最后一个零执行else逻辑。请记住,else子句也在循环中。尝试处理输入,直到每个输入都被逐个处理

执行循环,而不是文件的结尾 读取数字,直到违反条件为止 堆栈包含数据中的数字,如下所示 4. 12 7. 5. 0遇到execute else条件后 在堆栈中弹出两个数字并执行循环,直到堆栈为空 队列包含以下数字 5,7 读取数字,直到违反条件为止 堆栈包含数据中的数字,如下所示 5. 23 34 67 8. 6. 4. 0遇到execute else条件后 在堆栈中弹出两个数字并执行循环,直到堆栈为空 队列包含以下数字 4,6,8,67,34,5,7 读取数字,直到违反条件为止 堆栈包含数据中的数字,如下所示 6. 22 33 44 0遇到execute else条件后 在堆栈中弹出两个数字并执行循环,直到堆栈为空 队列包含以下数字
REVERY-44,33,4,6,8,67,34,5,7-front

提供的答案似乎正确。您似乎假设除零之外的所有数字都会在其他任何事情发生之前被推送到堆栈上,但根据您提供的代码,这是不正确的。试着一步一步地往上爬到第一个零点,看看会发生什么。请注意,if嵌套在循环中。谢谢,我将解决againIt的琐碎问题,将其转换为实际代码并自己运行,可能是单步执行以查看所有中间步骤。这样做比让别人给你答案更能教会你。