一、栈和队列的基本概念
1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征
2.队列(queue)是一种具有先进先出特征的线性数据结构,元素的增加只能在一端进行,元素的删除只能在另一端进行。能够增加元素的队列一端称为队尾,可以删除元素的队列一端则称为队首。
二、用python实现栈和队列的功能
1.栈可以通过python的list来实现,其中append操作相当于栈的push操作,官方代码如下:
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
2.python用 collections.deque设计实现队列功能:
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
三、用两个栈实现一个队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
主要思路:一个栈input用于输入,另一个栈output用于输出,一串输入经过一次进栈和一次出栈操作就可以达到先进先出,需要注意的是每次输入时需要判断output内是否还有元素,有的话需要重新放入input才可以进行append操作。
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.input=[]
self.output=[]
def push(self, node):
# write code here
if self.output==[]:
self.input.append(node)
else:
while self.output:
self.input.append(self.output.pop())
self.input.append(node)
def pop(self):
# return xx
if self.input==[] and self.output==[]:
return None
else:
while self.input:
self.output.append(self.input.pop())
return self.output.pop()