栈的概念与数据结构
栈(有时称为“后进先出栈”)是一个元素的有序集合,其中添加移除新元素总发生在同一端。这一端通常称为“顶部”。与顶部对应的端称为“底部”。栈的底部很重要,因为在栈中靠近底部的元素是存储时间最长的。最近添加的元素是最先会被移除的。这种排序原则有时被称为 LIFO,后进先出。它基于在集合内的时间长度做排序。较新的项靠近顶部,较旧的项靠近底部。
栈的抽象数据类型定义:栈的抽象数据类型应该由以下结构和操作定义。栈操作如下:
- Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。
- push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。
- pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。
- peek() 从栈返回顶部项,但不会删除它。不需要参数。 不修改栈。
- isEmpty() 测试栈是否为空。不需要参数,并返回布尔值。
- size() 返回栈中的 item 数量。不需要参数,并返回一个整数。
栈的定义
1 class Stack(object): 2 def __init__(self): 3 self.stack = [] 4 5 def __str__(self): 6 return str(self.stack) 7 8 def push(self, item): 9 self.stack.append(item) 10 11 def pop(self): 12 return self.stack.pop() if self.stack else "Stack is empty!" 13 14 def peek(self): 15 return len(self.stack) - 1 16 17 def isEmpty(self): 18 return self.stack == [] 19 20 def size(self): 21 return len(self.stack)
栈的使用
1 s=Stack() 2 print(s.isEmpty()) 3 s.push(4) 4 s.push('dog') 5 print(s.peek()) 6 s.push(True) 7 print(s.size()) 8 print(s.isEmpty()) 9 s.push(8.4) 10 print(s.pop()) 11 print(s.pop()) 12 print(s.size())