通过链表实现栈
定义栈的链表节点:
class StackNode(object):
def __init__(self, data, next):
self.val = data
self.next = next
定义栈,并实现基础的入栈出栈判空操作:
class Stack(object):
def __init__(self):
self.top = None
self.bottom = None
def push(self, data):
if self.top is None:
self.top = StackNode(data, None)
self.bottom = self.top
else:
self.top.next = StackNode(data, None)
self.top = self.top.next
def pop(self):
if self.top is None:
return False
if self.bottom == self.top:
self.bottom = None
self.top = None
return True
p = self.bottom
while p is not None:
if p.next == self.top:
self.top = p
p = p.next
del p
return True
else:
p = p.next
def get_top(self):
return self.top.val
def is_empty(self):
if self.top is not None:
return False
else:
return True
利用双栈模拟FIFO队列
S1, S2 = Stack(), Stack()
data = [1, 2, 3, 4, 5, 6]
for d in data:
S1.push(d)
while S1.is_empty() is False:
S2.push(S1.get_top())
S1.pop()
while S2.is_empty() is False:
print(S2.get_top(), end='')
S2.pop()