python队列和栈操作,两个栈实现队列,两个队列实现栈

迈不过友情╰ 2022-05-06 11:30 430阅读 0赞

参考:http://docs.python.org/2/tutorial/datastructures.html#more-on-lists的官方代码

  1. >>> stack = [3, 4, 5]
  2. >>> stack.append(6)
  3. >>> stack.append(7)
  4. >>> stack
  5. [3, 4, 5, 6, 7]
  6. >>> stack.pop()
  7. 7
  8. >>> stack
  9. [3, 4, 5, 6]
  10. >>> stack.pop()
  11. 6
  12. >>> stack.pop()
  13. 5
  14. >>> stack
  15. [3, 4]

队列

  1. >>> from collections import deque
  2. >>> queue = deque(["Eric", "John", "Michael"])
  3. >>> queue.append("Terry") # Terry arrives
  4. >>> queue.append("Graham") # Graham arrives
  5. >>> queue.popleft() # The first to arrive now leaves
  6. >>> queue.pop(0) #与popleft()效果一样
  7. 'Eric'
  8. >>> queue.pop(0) # The second to arrive now leaves
  9. 'John'
  10. >>> queue # Remaining queue in order of arrival
  11. deque(['Michael', 'Terry', 'Graham'])

使用两个栈实现一个队列
插入:插入到stack1
删除:如果stack2为空,将stack1pop之后push到stack2,如果stack2不为空,则直接popstack2

  1. class Solution:
  2. def __init__(self):
  3. self.stack1 = []
  4. self.stack2 = []
  5. def push(self, node):
  6. self.stack1.append(node)
  7. def pop(self):
  8. if self.stack2 == []:
  9. while self.stack1 != []:
  10. self.stack2.append(self.stack1.pop())
  11. return self.stack2.pop()
  12. sol = Solution()
  13. sol.push(1)
  14. sol.push(2)
  15. print(sol.pop())
  16. sol.push(3)
  17. print(sol.pop())
  18. print(sol.pop())

输出:

  1. 1
  2. 2
  3. 3

两个队列实现一个栈
插入:保证一个队列为空,一个不为空,插入的时候,插入到不为空的队列,保证进入的先后顺序
删除:将不为空的队列全部搬入到为空的队列只剩下最后一个元素,然后删除这个元素,就能再先进先出的基础上实现先进后出

  1. class Solution:
  2. def __init__(self):
  3. self.queue1 = []
  4. self.queue2 = []
  5. def insert(self, x):
  6. if self.queue1 == []:
  7. self.queue2.append(x)
  8. elif self.queue2 == []:
  9. self.queue1.append(x)
  10. def delete(self):
  11. if self.queue2 == []:
  12. while len(self.queue1) != 1:
  13. self.queue2.append(self.queue1.pop(0))
  14. return self.queue1.pop(0)
  15. elif self.queue1 == []:
  16. while len(self.queue2) != 1:
  17. self.queue1.append(self.queue2.pop(0))
  18. return self.queue2.pop(0)
  19. sol = Solution()
  20. sol.insert(1)
  21. sol.insert(2)
  22. sol.insert(3)
  23. print(sol.delete())
  24. print(sol.delete())
  25. sol.insert(5)
  26. print(sol.delete())
  27. print(sol.delete())

输出:

  1. 3
  2. 2
  3. 5
  4. 1

发表评论

表情:
评论列表 (有 0 条评论,430人围观)

还没有评论,来说两句吧...

相关阅读