原题链接:
http://www.lintcode.com/zh-cn/problem/implement-queue-by-two-stacks/
题目描述
正如标题所述,你需要使用两个栈来实现队列的一些操作。
队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。
pop和top方法都应该返回第一个元素的值。
样例
比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2
题目解析:
题目主要考察的是队列和栈两种数据结构。队列:先进先出。栈:先进后出。
思路
思路一
栈是先进后出,队列时先进先出的。如果把元素放到stack1中,然后再把这些元素从stack1中弹出,依次放入stack2中,然后取stack2中的元素,就可以实现先进先出了。
当然了,这里还要注意一些问题。比如在stack2中有元素的时候,不能把stack1的元素压入到stack2中。
对于python来说,list数组本身就可以作为一个栈来使用。
push操作就是list.append()。pop操作就是list.pop()
代码(Python)
思路一代码
class MyQueue:
def __init__(self):
# do intialization if necessary
#栈一:push到该栈中
self.stack1 = []
#栈二:从该栈中弹出
self.stack2 = []
"""
@param: element: An integer
@return: nothing
"""
def push(self, element):
# write your code here
self.stack1.append(element)
"""
@return: An integer
"""
def pop(self):
# write your code here
if self.stack2:
return self.stack2.pop()
if self.stack1:
#将栈一的元素push到栈二中
while (self.stack1):
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
else:
return None
"""
@return: An integer
"""
def top(self):
# write your code here
if self.stack2:
return self.stack2[len(self.stack2)-1]
if self.stack1:
while (self.stack1):
self.stack2.append(self.stack1.pop())
return self.stack2[len(self.stack2)-1]
else:
return None
复制代码
谦言忘语
个人目前只懂一丁点python语法,所以不做语法上的优化,而且整体代码风格效果会尽量跟C语言趋于一致。