【问题标题】:algorithms- stack and queue算法 - 堆栈和队列
【发布时间】:2014-07-21 13:25:02
【问题描述】:

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

数据

5, 7, 12, 4, 0, 4, 6, 8, 67, 34, 23, 5, 0, 44, 33, 22, 6, 0

Pusedo 代码

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

这是我的解决方案

  1. 如果数字不为0,则将数字压入堆栈 所以现在堆栈变成了

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

    33
    44 
    5
    23
    34
    67
    8
    6
    4
    4
    12
    7
    5
    

3.loop stack !empty, pop stack and enqueue in Q1.so 现在栈是空的,队列变成了

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

33 是队列中的第一个,5 是队列的最后一个。

我仔细检查了提供的答案,发现我的答案不同

提供的答案

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

我不确定谁是正确的。请帮忙。

【问题讨论】:

  • 提供的答案似乎是正确的。您似乎假设除零之外的所有数字都在发生其他任何事情之前被压入堆栈,但根据您提供的代码,这是不正确的。尝试一步一步地工作到第一个零,看看会发生什么。请注意,if 嵌套在内部 loop
  • 谢谢,我会再解决的
  • 将其转换为实际代码并自己运行是很简单的,可能单步执行即可查看所有中间步骤。这样做比要求别人给你答案更能教给你。

标签: algorithm stack queue


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-18
    • 2015-11-16
    • 2019-03-07
    • 2021-04-29
    • 2011-12-01
    • 2011-03-03
    • 2021-03-17
    • 2014-04-21
    相关资源
    最近更新 更多