python数据结构与算法——队列
队列结构可以使用数组来模拟,只需要设定头和尾的两个标记
参考自《啊哈》
# 按书中的代码会出现索引越界的问题(书中申请了超量的空间)
# 尝试令tai初始为len(q)-1则不会出错但少了最后一位
# 通过异常处理,捕获出界异常则直接跳出循环
def queue_demo1(q):
newq = []
head = 0
tail = len(q) # 记录队列最后一位 while head < tail :
newq.append(q[head])
head += 1
try:
q.append(q[head])
except IndexError:
break
head += 1
tail += 1 return newq
具体使用方法与注意事项,下面不同的实现方式也是同样的道理:
if __name__=="__main__":
# 注意,往list尾部以外的插入insert和删除del操作都是相当耗费时间的
# 最好只用append或extend q = list("") # 分离字符串序列
newq = queue_demo(q)
print newq >>> ['', '', '', '', '', '', '', '', '']
我们也可以自己实现队列类型:
# ======= 手动实现队列类型 =======
# 队列节点元素
class Node:
def __init__(self,data,next=None):
self.data = data
self.next = next # 简单的FIFO队列类别
class Queue:
def __init__(self):
self.head = None
self.tail = None
self.count = 0 def append(self,data):
if self.head == None:
self.head = Node(data)
self.tail = self.head
else:
self.tail.next = Node(data)
self.tail = self.tail.next
self.count += 1 def pop(self):
if self.head == None:
raise "Error: head==None"
data = self.head.data
self.head = self.head.next
self.count -= 1
return data # 从新实现上面的算法
def queue_demo2(q): queue = Queue()
for item in q: # 初始化队列
queue.append(item) newq = []
while queue.count > 0:
newq.append(queue.pop()) # 记录删除的元素
if queue.count==0:
break
else:
temp = queue.pop() # 从新入队的元素
queue.append(temp) return newq
python提供了内置的数据结构,在collections模块中
# 使用python内置对象
# deque: 双端队列,可以快速的从两侧追加和插入的对象
# 注意 list.pop(0) 也可以弹出首元素,但实际上很耗时间
def queue_demo3(q):
from collections import deque
# 好赞,突然发现,自己写的方法和内置对象名字一模一样,代码完全不用改
# 上面的我也是猜的...
queue = deque()
for item in q: # 初始化队列
queue.append(item) newq = []
while queue.count > 0:
newq.append(queue.pop()) # 记录删除的元素
if queue.count==0:
break
else:
temp = queue.pop() # 从新入队的元素
queue.append(temp) return newq
python数据结构与算法——队列的更多相关文章
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法之图的广度优先与深度优先搜索算法示例
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...
- javascript数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- JavaScript数据结构与算法-队列练习
队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- Python 数据结构和算法
阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...
- python数据结构与算法之问题求解实例
关于问题求解,书中有一个实际的案例. 上图是一个交叉路口的模型,现在问题是,怎么安排红绿灯才可以保证相应的行驶路线互不交错. 第一步,就是把问题弄清楚. 怎么能让每一条行驶路线不冲突呢? 其实,就是给 ...
随机推荐
- 使用Rsync进行文件的同步与备份
Rsync是Linux下非常不错的文件同步备份工具,安全性高.备份迅速.支持增量备,功能强大且高效. 服务端配置 Rsync服务的配置文件/etc/rsyncd.conf,示例配置(带用户名密码配置) ...
- 微信小程序文件作用域模块引用
文件作用域 在 JavaScript 文件中声明的变量和函数只在该文件中有效:不同的文件中可以声明相同名字的变量和函数,不会互相影响. 通过全局函数 getApp() 可以获取全局的应用实例,如果需要 ...
- Count Primes - LeetCode
examination questions Description: Count the number of prime numbers less than a non-negative number ...
- 深入浅出设计模式——原型模式(Prototype Pattern)
模式动机在面向对象系统中,使用原型模式来复制一个对象自身,从而克隆出多个与原型对象一模一样的对象.在软件系统中,有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所 ...
- 【转】Linux下patch打补丁命令
[转]Linux下patch打补丁命令 转自:http://www.cnblogs.com/noaming1900/archive/2010/10/28/1863282.html 此命令用于为特定软件 ...
- TCP/IP协议学习(四) 协议概述
生活中有舒适区,借口成为懒惰的护身符,学习也有舒适区,逃避便是阻止进步的最大障碍. 经过半年多嵌入式方面的工作和学习,我提高了很多,但同时我也对自己所面临的问题逐渐清晰: 1. 偏于实践,理论基础不牢 ...
- codeforces 446A DZY Loves Sequences
vjudge 上题目链接:codeforces 446A 大意是说最多可以修改数列中的一个数,求最长严格递增的连续子序列长度. 其实就是个 dp 的思想,想好思路后交上去没想到一直 wa 在第二个测试 ...
- c++ 在windows下建立目录
#include <direct.h> #include <stdlib.h> #include <stdio.h> int main( void ) { ) { ...
- CSS3 transform对普通元素的N多渲染影响
一.一入transform深似海 一个普普通通的元素,如果应用了CSS3 transform变换,即便这个transform属性值不会改变其任何表面的变化(如scale(1), translate(0 ...
- Java 中的 request 和response 理解
request和response(请求和响应) 1.当Web容器收到客户端的发送过来http请求,会针对每一次请求,分别创建一个用于代表此次请求的HttpServletRequest对象(reque ...