目录
- 栈的定义
- 栈的基本操作
- 小练习
1.栈的定义
栈遵循后进先出(Last In First Out),现实生活中也有不少这样的例子,比如在学校食堂吃完饭时,你把盘子放到桌子上,叠起来之后,阿姨过来拿盘子出去洗,假如是手洗,那肯定是先从最上面的盘子开始拿来洗的,而最上面的盘子是最后放上去的,却是第一个 被拿出来的,这就是后进先出,与之相同的还有查看网页,比如你查找“stack”,往往你会打开好几张网页链接,然后再继续开,你一开始看的网页应该就是你最后打开的。
2.栈的基本操作
class Node(object):
def __init__(self, data, next = None):
self.data = data
self.next = next
class Stack(object):
def __init__(self, top = None):
self.top = top
def push(self,data):
#创建新的节点放到栈顶
self.top = Node(data, self.top)
def pop(self):
#拿出栈顶元素,原来的栈发生改变
if self.top is None:
return None
data = self.top.data
self.top = self.top.next
return data
def peek(self):
#查看栈顶元素,原来的栈不变
return self.top.data if self.top is not None else None
def isEmpty(self):
return self.peek() is None
if __name__ == "__main__":
stack = Stack()
stack1 = stack.push(1)
stack1 = stack.push(2)
print stack.peek(), #查看栈顶元素
stack.pop()
print stack.peek()
#输出: 2 1
3.小练习
使用栈,使得输入字符串元素倒转,即:
"apple"→"elppa"
def revStrings(myStr):
stack = Stack()
for ch in myStr:
stack.push(ch)
revStr = ''
while not stack.isEmpty():
revStr += stack.pop()
return revStr
print revStrings("apple")
写不出或报错的人,主要有以下原因:
- 不会使用栈的思想:后进先出
- 没想到字符串遍历
- 字符串拼接问题