【问题标题】:How to reverse a stack properly?如何正确反转堆栈?
【发布时间】:2014-09-23 15:11:17
【问题描述】:

我需要在python中反转一个堆栈,我的想法是在开始时创建一个空堆栈。然后我们测试原始堆栈是否为空,如果是,那么我们没有什么可以反转的;如果不是,每次我们从原始堆栈中弹出一个项目时,我们都会将它推回空堆栈。这一直持续到原始堆栈没有任何东西可以弹出。最后我们将存储堆栈重命名为原始堆栈,并将其返回。它现在应该有一个相反的顺序。

但问题是,对于下面的单元测试,它从来没有工作过,事实证明我得到的临时堆栈没有相反的顺序。

def test_reverse(self):

    stack = Stack()
    stack.push(1)
    stack.push(2)
    reverse(stack)
    self.assertEqual(stack.pop(), 1)
    self.assertEqual(stack.pop(), 2)
    self.assertTrue(stack.is_empty())

我真的很想知道为什么这不起作用,谢谢!

【问题讨论】:

  • 你见过 reversed() 函数吗?
  • @MattBall,是的,我明白,原始堆栈中的顶部项目进入临时堆栈的底部,然后当我们从临时堆栈中弹出项目时,我们应该得到相反的顺序。 :(
  • 你不需要stack = reverse(stack) 而不是reverse(stack)吗?
  • @PradeepKumar 试过了,没用 :(
  • 您可能还需要将temp = temp.push(stuff) 替换为temp.push(stuff),因为您已经有了临时堆栈。虽然没有测试。试试吧。

标签: python stack reverse


【解决方案1】:

reverse(stack) 正在产生答案,然后将其丢弃。将其放入一个新变量中;它没有在原地反转。

【讨论】:

    【解决方案2】:

    如果您对使用先进先出 (FIFO) 感兴趣,您可能应该将队列实现为您的数据结构,而不是堆栈。队列的常见实现通常也更灵活地应用到您想要完成的任务。

    【讨论】:

      猜你喜欢
      • 2014-12-14
      • 1970-01-01
      • 2021-07-19
      • 2021-12-10
      • 2015-06-06
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      相关资源
      最近更新 更多