python语言的堆栈与队列类的实现
基于python语言的数据结构之堆栈与队列的实现
# 堆栈的实现
# -*- coding: utf-8 -*-
"""
栈(stack), 是一种容器,可以存入数据元素,访问元素,删除元素
只允许在容器的一段存取数据
特点: 后进先出 Last in first out
"""
"""
借助list来实现堆栈
添加的方法; 压栈(入栈)
弹栈(出栈)
Stack() 创建一个新的空栈
push(item) 添加一个新元素 item 到栈顶
pop() 弹出栈顶元素
peek() 返回栈顶元素
is_empty() 判断栈是否为空
size() 返回栈元素的个数
"""
class Stack(object):
"""栈"""
def __init__(self):
self.__list = []
def push(self, item):
"""添加一个新元素item到栈顶"""
self.__list.append(item) # 尾部添加 ,时间复杂度o1
# self.__list.insert(0,item) 这样从尾部添加的时间复杂度为O(n)
def pop(self):
"""弹出栈顶元素"""
return self.__list.pop()
def peek(self):
"""返回栈顶元素"""
if self.__list:
return self.__list[-1]
return None
def is_empty(self):
"""判断栈是否为空"""
return self.__list == []
def size(self):
"""返回栈元素的个数"""
return len(self.__list)
if __name__ == '__main__':
s = Stack()
print(s.is_empty())
s.push(1)
s.push(3)
s.push(4)
print(s.pop())
print(s.pop())
print(s.pop())
# 队列的实现
# -*- coding: utf-8 -*-
class Queue:
"""队列"""
def __init__(self):
self.__list = []
def enqueue(self, item):
"""往队列中添加一个元素"""
self.__list.append(item) # 时间复杂度o(1)
def dequeue(self):
"""从队列头部删除一个元素"""
return self.__list.pop(0) # 时间复杂度 o(n)
def is_empty(self):
"""判断是否为空"""
return self.__list == []
def size(self):
"""返回队列大小"""
return len(self.__list)
if __name__ == '__main__':
s = Queue()
print(s.is_empty())
s.enqueue(1)
s.enqueue(3)
s.enqueue(4)
print(s.dequeue())
print(s.dequeue())
print(s.dequeue())
# 双端队列的实现
# -*- coding: utf-8 -*-
class Deque(object):
def __init__(self):
self.__list = []
def add_front(self, item):
"""往队列头部添加一个元素"""
self.__list.insert(0, item) # 时间复杂度o(1)
def add_rear(self, item):
"""往队列尾部添加一个元素"""
self.__list.append(item) # 时间复杂度o(1)
def pop_rear(self):
"""从队列尾部删除一个元素"""
return self.__list.pop() # 时间复杂度 o(1)
def pop_front(self):
"""从队列头部删除一个元素"""
return self.__list.pop(0) # 时间复杂度 o(n)
def is_empty(self):
"""判断是否为空"""
return self.__list == []
def size(self):
"""返回队列大小"""
return len(self.__list)
python语言的堆栈与队列类的实现的更多相关文章
- python之对堆栈、队列处理操作(转载+个人看法)
参考链接:https://blog.csdn.net/u010786109/article/details/40649827 python实现堆栈操作 堆栈是一个后进先出的数据结构,其工作方式就像一堆 ...
- 基于Python语言使用RabbitMQ消息队列(六)
远程过程调用(RPC) 在第二节里我们学会了如何使用工作队列在多个工人中分布时间消耗性任务. 但如果我们想要运行存在于远程计算机上的方法并等待返回结果该如何去做呢?这就不太一样了,这种模式就是常说的远 ...
- 基于Python语言使用RabbitMQ消息队列(一)
介绍 RabbitMQ 是一个消息中间人(broker): 它接收并且发送消息. 你可以把它想象成一个邮局: 当你把想要寄出的信放到邮筒里时, 你可以确定邮递员会把信件送到收信人那里. 在这个比喻中, ...
- 利用python列表实现堆栈和队列
堆栈: 堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出. 我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的append()和pop()方法可以实现栈 ...
- 基于Python语言使用RabbitMQ消息队列(五)
Topics 在前面教程中我们改进了日志系统,相比较于使用fanout类型交易所只能傻瓜一样地广播,我们用direct获得了选择性接收日志的能力. 虽然使用direct类型交易所改进了我们的系统,但它 ...
- 基于Python语言使用RabbitMQ消息队列(四)
路由 在上一节我们构建了一个简单的日志系统.我们能够广播消息给很多接收者. 在本节我们将给它添加一些特性——我们让它只订阅所有消息的子集.例如,我们只把严重错误(critical error)导入到日 ...
- 基于Python语言使用RabbitMQ消息队列(三)
发布/订阅 前面的教程中我们已经创建了一个工作队列.在一个工作队列背后的假设是每个任务恰好会传递给一个工人.在这一部分里我们会做一些完全不同的东西——我们会发送消息给多个消费者.这就是所谓的“发布/订 ...
- 基于Python语言使用RabbitMQ消息队列(二)
工作队列 在第一节我们写了程序来向命名队列发送和接收消息 .在本节我们会创建一个工作队列(Work Queue)用来在多个工人(worker)中分发时间消耗型任务(time-consuming tas ...
- python列表模拟堆栈和队列
对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ...
随机推荐
- PATB1014福尔摩斯的约会
参考代码: #include<cstdio> #include<cstring> #include<cstdlib> int main() { char week[ ...
- ZROI 暑期高端峰会 A班 Day1 组合计数
AGC036F Square Constriants 一定有 \(l_i<p_i\le r_i\). 考虑朴素容斥,枚举每个数是 \(\le l_i\) 还是 \(\le r_i\).对于 \( ...
- redis 下key的过期时间详解 :expire
memcached 和 redis 的set命令都有expire参数,可以设置key的过期时间.但是redis是一个可以对数据持久化的key-value database,它的key过期策略还是和me ...
- Apache的安装部署 2(加密认证 ,网页重写 ,搭建论坛)
一.http和https的基本理论知识1. 关于https: HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道 ...
- ##ant 打包apk
ant 打包apk 1. 参考: Android Ant 批量多渠道打包实例 单个渠道类似操作,只不过不用修改build.xml文件 2. 修改ant debug的包签名,使用和release版本相同 ...
- Hotspot的栈
各种类型的线程他们所需要的栈的大小其实是可以通过不同的参数来控制的: java_thread的stack_size,其实就是-Xss或者-XX:ThreadStackSize的值 compiler_t ...
- IDEA Gradle配置与使用
1.安装Gradle,并添加环境变量. https://www.cnblogs.com/NyanKoSenSei/p/11458953.html 2.在IDEA中设置Gradle: 3.选中项目中的. ...
- 开源分布式数据库中间件 DBLE
DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”:以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持: DBLE官方网站:https://openso ...
- 所谓的SaaS服务到底是什么?
先从SaaS说起,SaaS是英文Soft as a Service(软件即服务)的简写.SaaS并不是指代一个行业或者一种技术,它是一种2B的专业型软件租赁使用模式. 什么是专业型软件? 就是为了解决 ...
- DDR3(4):读控制
写控制完成后开始设计读控制,写控制和读控制是非常相似的. 一.总线详解 由 User Guide 可知各信号之间的逻辑关系,读数据是在给出命令之后一段时间后开始出现的.图中没有给出app_rd_dat ...