队列结构可以使用数组来模拟,只需要设定头和尾的两个标记

参考自《啊哈》

 # 按书中的代码会出现索引越界的问题(书中申请了超量的空间)
# 尝试令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数据结构与算法——队列的更多相关文章

  1. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  2. Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...

  3. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  4. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  5. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  6. JavaScript数据结构与算法-队列练习

    队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...

  7. Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  8. Python 数据结构和算法

    阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...

  9. python数据结构与算法之问题求解实例

    关于问题求解,书中有一个实际的案例. 上图是一个交叉路口的模型,现在问题是,怎么安排红绿灯才可以保证相应的行驶路线互不交错. 第一步,就是把问题弄清楚. 怎么能让每一条行驶路线不冲突呢? 其实,就是给 ...

随机推荐

  1. Android 性能分析工具dumpsys的使用(自己增加一部分在后面)

    Android提供的dumpsys工具可以用于查看感兴趣的系统服务信息与状态,手机连接电脑后可以直接命令行执行adb shell dumpsys 查看所有支持的Service但是这样输出的太多,可以通 ...

  2. C#读取XML文件中有乱码的处理办法

    1.以文本的方式读取出xml内容 2.如果xml加载文本失败,替换掉乱码的内容 private static void loadxml(XmlDocument doc, string str) { t ...

  3. nodejs的express使用介绍

    Express框架 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 概述 运行原理 底层:http模块 什么是中间件 use方法 Express的方法 all ...

  4. java中正则表达式基本用法

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...

  5. CSS分页

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 网络基础知识之————A记录和CNAME记录的区别

    1.什么是域名解析? 域名解析就是国际域名或者国内域名以及中文域名等域名申请后做的到IP地址的转换过程.IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址.域名的解 ...

  7. 使用rman迁移数据库到异机

    迁移数据库的方法有多种,较为常用的则是使用RMAN来迁移.使用RMAN迁移数据库属于数据库的物理备份与恢复范畴,整个过程中数据库的相关信息是完整地镜像.因此,基于此种方式还原恢复的数据库用于测试会使得 ...

  8. quartz-2.2.x 快速入门 (1)

    欢迎来到quartz快速入门教程.阅读本教程,你将会了解: quartz下载 quartz安装 根据你的需要,配置Quartz 开始一个示例应用   当熟悉了quratz调度的基本功能后,可以尝试一些 ...

  9. dedecms最新版本修改任意管理员漏洞+getshell+exp

    此漏洞无视gpc转义,过80sec注入防御. 补充下,不用担心后台找不到.这只是一个demo,都能修改任意数据库了,还怕拿不到SHELL? 起因是全局变量$GLOBALS可以被任意修改,随便看了下,漏 ...

  10. junit基础篇、中级篇-实例代码

    学习文章: http://blog.csdn.net/andycpp/article/details/1327147 http://wenku.baidu.com/link?url=C27gDEj0l ...