栈可以用顺序表方式实现,也可以用链表方式实现。我大Python的内建数据结构太强大,可以用list直接实现栈,简单快捷。人生苦短,我用Python。代码如下:
class Stack(object): # 初始化栈为空列表 def __init__(self): self.items = [] # 判断栈是否为空,返回布尔值 def is_empty(self): return self.items == [] # 返回栈顶元素 def peek(self): return self.items[len(self.items) - 1] # 返回栈的大小 def size(self): return len(self.items) # 压栈,入栈,进栈 def push(self, item): self.items.append(item) # 出栈 def pop(self): return self.items.pop()
两个栈实现队列:
class QueueWithTwoStacks(object): def __init__(self): self._stack1 = [] self._stack2 = [] def appendTail(self,x): self._stack1.append(x) def deleteHead(self): if self._stack2: return self._stack2.pop() else: if self._stack1: while self._stack1: self._stack2.append(self._stack1.pop()) return self._stack2.pop() else: return None
两个队列实现栈:
class StackWithTwoQueues(object): def __init__(self): self._stack1 = [] self._stack2 = [] def push(self,x): if len(self._stack1) == 0: self._stack1.append(x) elif len(self._stack2) == 0: self._stack2.append(x) if len(self._stack2) == 1 and len(self._stack1) >= 1: while self._stack1: self._stack2.append(self._stack1.pop(0)) elif len(self._stack1) == 1 and len(self._stack2) > 1: while self._stack2: self._stack1.append(self._stack2.pop(0)) def pop(self): if self._stack1: return self._stack1.pop(0) elif self._stack2: return self._stack2.pop(0) else: return None