数据结构及算法(Python)---栈
来源:互联网 发布:网络最新骗术扒人 编辑:程序博客网 时间:2024/05/20 04:26
1、数据存储方式:可以采用列表或单链表 2、操作: Stack() 创建一个新的空栈 push(data) 添加一个新的元素data到栈顶 pop() 弹出栈顶元素 peek() 返回栈顶元素 is_empty() 判断栈是否为空 size() 返回栈的元素个数
""" 采用列表存储的方式"""class Stack(object): """栈""" def __init__(self): """初始化""" self.__list = [] # 定义一个列表用于存放数据 def push(self, data): """添加一个新的元素data到栈顶""" self.__list.append(data) # 把列表的尾部作为栈顶 def pop(self): """弹出栈顶元素""" return self.__list.pop() # 从列表尾部出栈操作 """ 也可以把列表头部作为栈顶,如果把列表头部作为栈顶, 则压栈就是 self.__list.insert(0, data), 出栈则是self.__list.pop(0) 此种方式与把列表尾部作为栈顶区别在于,列表尾部操作时间复杂度是O(1),而头部操作时间复杂度是O(n) """ def peek(self): """返回栈顶元素""" if self.__list: # 列表为空时,返回None,否则返回最后一个元素 return self.__list[-1] else: return None def is_empty(self): """判断栈是否为空""" return not self.__list # 列表为空时,返回True,否则返回False def size(self): """返回栈的元素个数""" return len(self.__list)if __name__ == '__main__': s = Stack() s.push(1) s.push(2) s.push(3) s.push(4) print("栈顶数据:", s.peek()) print("判空:", s.is_empty()) print("长度:", s.size()) print(s.pop()) print(s.pop()) print(s.pop()) print(s.pop()) print("栈顶数据:", s.peek()) print("判空:", s.is_empty()) print("长度:", s.size())
执行结果
栈顶数据: 4判空: False长度: 44321栈顶数据: None判空: True长度: 0
""" 采用单链表存储的方式"""import SingleLinkListclass Stack(object): """栈""" def __init__(self): """初始化""" self.__sll = SingleLinkList() # 定义一个链表用于存放数据 def push(self, data): """添加一个新的元素data到栈顶""" self.__sll.add(data) # 把链表的头部作为栈顶 def pop(self): """弹出栈顶元素""" data = self.peek() # 获取栈顶的元素 if data: self.__sll.remove(data) # 删除栈顶的元素 return data # 把链表的头部作为栈顶 def peek(self): """返回栈顶元素""" return self.__sll.index(0) # 直接返回首节点的元素 # return self.__sll._SingleLinkList__head.data # 可以通过实例访问类的私有变量 def is_empty(self): """判断栈是否为空""" return self.__sll.is_empty() # 直接返回链表判空结果 True空 def size(self): """返回栈的元素个数""" return self.__sll.length() # 直接返回链表的长度if __name__ == '__main__': s = Stack() s.push(1) s.push(2) s.push(3) s.push(4) print("栈顶数据:", s.peek()) print("判空:", s.is_empty()) print("长度:", s.size()) print(s.pop()) print(s.pop()) print(s.pop()) print(s.pop()) print("栈顶数据:", s.peek()) print("判空:", s.is_empty()) print("长度:", s.size())
执行结果
栈顶数据: 4判空: False长度: 44321栈顶数据: None判空: True长度: 0
阅读全文
0 0
- 数据结构及算法(Python)---栈
- 数据结构及算法(Python)---单链表
- 数据结构及算法(Python)---队列
- 常用查找数据结构及算法(Python实现)
- 常用查找数据结构及算法(Python实现)
- 数据结构与算法(Python)
- (考研)数据结构及算法
- python数据结构与算法 19有序列表 ADT及实现
- 【数据结构&&算法系列】插入排序简单介绍及python代码
- 【数据结构&&算法系列】归并排序简单介绍及python代码
- 数据结构与算法之栈(Java与Python实现)
- 数据结构及算法-何谓数据结构
- python进阶(数据结构和算法[1])
- python进阶(数据结构和算法[二])
- python进阶(数据结构和算法[三])
- python 数据结构和算法(一)
- python数据结构与算法 (翻译)第一章
- Python数据结构与算法
- HDU1506(最大子矩阵)
- [USACO17JAN]Building a Tall Barn建谷仓
- 数组
- keras配置(WIN10/GPU版本)
- 集合:set 与 映射 map
- 数据结构及算法(Python)---栈
- 面向对象六大设计原则(二)开闭原则
- springmvc的运行原理
- 彩色瓷砖
- Gym
- OSGi入门必读系列《OSGi服务:非常适合SOA的架构》
- 周中总结--2017.9.12
- 文章标题
- '乡吧'社区APP(包含安卓端和后台代码)