基于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语言的堆栈与队列类的实现的更多相关文章

  1. python之对堆栈、队列处理操作(转载+个人看法)

    参考链接:https://blog.csdn.net/u010786109/article/details/40649827 python实现堆栈操作 堆栈是一个后进先出的数据结构,其工作方式就像一堆 ...

  2. 基于Python语言使用RabbitMQ消息队列(六)

    远程过程调用(RPC) 在第二节里我们学会了如何使用工作队列在多个工人中分布时间消耗性任务. 但如果我们想要运行存在于远程计算机上的方法并等待返回结果该如何去做呢?这就不太一样了,这种模式就是常说的远 ...

  3. 基于Python语言使用RabbitMQ消息队列(一)

    介绍 RabbitMQ 是一个消息中间人(broker): 它接收并且发送消息. 你可以把它想象成一个邮局: 当你把想要寄出的信放到邮筒里时, 你可以确定邮递员会把信件送到收信人那里. 在这个比喻中, ...

  4. 利用python列表实现堆栈和队列

    堆栈: 堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出. 我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的append()和pop()方法可以实现栈 ...

  5. 基于Python语言使用RabbitMQ消息队列(五)

    Topics 在前面教程中我们改进了日志系统,相比较于使用fanout类型交易所只能傻瓜一样地广播,我们用direct获得了选择性接收日志的能力. 虽然使用direct类型交易所改进了我们的系统,但它 ...

  6. 基于Python语言使用RabbitMQ消息队列(四)

    路由 在上一节我们构建了一个简单的日志系统.我们能够广播消息给很多接收者. 在本节我们将给它添加一些特性——我们让它只订阅所有消息的子集.例如,我们只把严重错误(critical error)导入到日 ...

  7. 基于Python语言使用RabbitMQ消息队列(三)

    发布/订阅 前面的教程中我们已经创建了一个工作队列.在一个工作队列背后的假设是每个任务恰好会传递给一个工人.在这一部分里我们会做一些完全不同的东西——我们会发送消息给多个消费者.这就是所谓的“发布/订 ...

  8. 基于Python语言使用RabbitMQ消息队列(二)

    工作队列 在第一节我们写了程序来向命名队列发送和接收消息 .在本节我们会创建一个工作队列(Work Queue)用来在多个工人(worker)中分发时间消耗型任务(time-consuming tas ...

  9. python列表模拟堆栈和队列

    对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ...

随机推荐

  1. mysql 8创建远程访问用户以及连接mysql速度慢的解决方法

      mysql 8创建远程访问用户 [root@demo /]# mysql -u root -p  #登录服务器数据库 Enter password:123xxx >user mysql; & ...

  2. 【游记】CSP-S2019游记

    \(\Large\texttt{Day -1}\) 今天晚上gryz开了也许是晚宴(awa),有水饺和蛋糕.因为去拿笔记本的原因没有吃到蛋糕..好可惜. 明天不用上早自习太棒了. 明天出发报道. 这笔 ...

  3. 一些树上dp的复杂度证明

    以下均为内网 树上染色 https://www.lydsy.com/JudgeOnline/problem.php?id=4033 可怜与超市 http://hzoj.com/contest/62/p ...

  4. 热点Key问题的发现与解决

    热点问题概述 产生原因 热点问题产生的原因大致有以下两种: 用户消费的数据远大于生产的数据(热卖商品.热点新闻.热点评论.明星直播). 在日常工作生活中一些突发的的事件,例如:双十一期间某些热门商品的 ...

  5. 二叉树遍历(前序、中序、后序)-Java实现

    一.前序遍历 访问顺序:先根节点,再左子树,最后右子树:上图的访问结果为:GDAFEMHZ. 1)递归实现 public void preOrderTraverse1(TreeNode root) { ...

  6. github打开慢,甚至打不开,怎么办,解决方案方法

    有人使用github后,在某些网络下发现打开慢,甚至打不开,这都是因为他是国外站:目前互联网的连接机制导致超过一定的路由节点的连接就会出现这个问题,解决办法就是直接告诉本机ip.不要先层层询问域名转i ...

  7. cad.net IExtensionApplication接口的妙用 分开写"启动运行"函数

    cad提供的 IExtensionApplication 接口 是不能实现一次以上的,那么这给编写代码带来了一种不好的情况是,每次都要去修改实现这个接口的类, 如果是一个小的测试功能,你又要去动前面的 ...

  8. @AspectJ注解的value属性

    @Component @Scope("prototype") @Aspect(value="perthis(execution(* com.helius.service. ...

  9. CentOS7使用tar.gz包安装MySql的踩坑之旅

    由于客户的CentOS服务器没有安装yum工具,只能通过下载tar.gz包安装mysql,于是跟着万能的百度开启了漫漫踩坑之旅: 1.下载mysql-5.6.33-linux-glibc2.5-x86 ...

  10. [转帖]深入理解latch: cache buffers chains

    深入理解latch: cache buffers chains http://blog.itpub.net/12679300/viewspace-1244578/ 原创 Oracle 作者:wzq60 ...