2014-09-23 2 views
0

Мне нужно перевернуть стек в python, моя идея состоит в том, чтобы создать пустой стек в начале. Затем мы проверяем, пуст ли исходный стек, если это так, тогда нам нечего менять; если нет, каждый раз, когда мы вытаскиваем элемент из исходного стека, мы возвращаем его обратно в пустой стек. Это продолжается до тех пор, пока исходный стек не сможет выскочить. И, наконец, мы переименуем стек хранилища в качестве исходного стека и вернем его. Теперь он должен иметь обратный порядок.Как правильно отформатировать стек?

Но проблема в том, что для единичного теста ниже он никогда не работает, оказывается, что стек temp, который я получаю, не имеет обратного порядка.

Защиту test_reverse (Я):

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()) 

Мне очень интересно, почему это не работает, спасибо!

+1

Вы видели функцию reverse()? –

+0

@MattBall, да, я понимаю, верхние элементы в исходном стеке уходят в нижнюю часть временного стека, а затем, когда мы выходим из элементов из временного стека, мы должны получить обратный порядок. :( – rexarski

+2

Вам не нужно делать 'stack = reverse (stack)' вместо просто 'reverse (stack)'? –

ответ

1

реверс (стек) производит ответ, а затем выбрасывает его. Поместите его в новую переменную; это не реверсирование на месте.

0

Если вы заинтересованы в использовании первого, первого выхода (FIFO), вероятно, вы должны реализовать очередь как свою структуру данных, а не стек. Общие реализации очередей также, как правило, более гибкие в применении для того, что, по-вашему, вы пытаетесь выполнить.

Смежные вопросы