algorithm- stack和queue

时间:2014-06-01 06:43:48

标签: algorithm stack queue

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

数据

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

pusedo-code

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. 如果number不为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. 3.loop stack!empty,弹出堆栈并在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
    

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

enter image description here执行循环(不是文件结尾) 读取数字,直到违反条件 堆栈包含来自数据的数字,如下所示 4 12 7 5 遇到0后执行else条件 弹出堆栈中的两个数字并执行循环,直到堆栈为空 队列包含以下数字 5,7 读取数字,直到违反条件 堆栈包含来自数据的数字,如下所示 5 23 34 67 8 6 4 遇到0后执行else条件 弹出堆栈中的两个数字并执行循环,直到堆栈为空 队列包含以下数字 4,6,8,67,34,5,7 读取数字,直到违反条件 堆栈包含来自数据的数字,如下所示 6 22 33 44 遇到0后执行else条件 弹出堆栈中的两个数字并执行循环,直到堆栈为空 队列包含以下数字 罕见-44,33,4,6,8,67,34,5,7-front