当前位置: 首页 > 知识库问答 >
问题:

算法-堆栈和队列

燕和裕
2023-03-14

我正在为我的考试做复习,我遇到了这个问题,我需要在执行以下代码后找到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,则将数字推送到堆栈,使堆栈现在变为0

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

    否则,弹出堆栈的前两个元素,因此现在堆栈变为

    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
    

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

  • 共有1个答案

    公羊渝
    2023-03-14

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

     类似资料:
    • 数字键盘字母组合问题[M]

    • 栈 1. 数组实现 2. 链表实现 队列 栈 // java public interface MyStack extends Iterable { MyStack push(Item item); Item pop() throws Exception; boolean isEmpty(); int size(); } 1. 数组实现 // java

    • 这两种处理堆栈和队列的方法有什么区别?两者都叫什么? 第一种方式: 第二种方式: 它们是否正确?试图学好这些,但互联网上的解释却模糊不清。。

    • 因为它是一个队列,所以它将是FIFO,子字符串将导致输出为:OneWour?因为s.substring()是(3),所以不存在任何值。 最后,我在普林斯顿的CS课上发现了两个问题,但我不知道答案是怎么来的 假设客户机执行(queue)、入队和出队操作的混合序列。入队操作将整数0到9按顺序放入队列;出队列操作打印返回值。下列哪个序列不能发生? 假设执行(堆栈)push和pop操作的混合序列。推送按顺

    • 给定一个堆栈,任务是对它进行排序,使堆栈的顶部具有最大的元素。 示例1: 输入:堆栈:3 2 1输出:3 2 1示例2: 输入:堆栈:11 2 32 3 41输出:41 32 11 3 2 您的任务: 预期时间复杂度:O(N*N)预期辅助空间:O(N)递归。 约束:1

    • 栈(Stack) 是限定仅在 表尾 进行 插入和删除 操作的线性表。对前前端工程师来说日操作浏览后退前进 我们把允许插入和删除的一端为栈顶(top),另一端为栈底(bottom)。 栈又称为 后进先出 (Last In Firsot Out)的线性表,简称 LIFO 结构。 栈的实现 数组 - 顺序栈(内存地址连续性) 链表 - 链式栈 数组 - 顺序栈 用数组来一实现个栈 /** push(e