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

参考自《啊哈》

 # 按书中的代码会出现索引越界的问题(书中申请了超量的空间)
# 尝试令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. 3. Swift 数组|字典|集合

    在OC中数组,字典,集合有自己的表示方法,分别是Array,Dictionary,Set 与 String 都属于数值类型变量,他们都属于结构体. 使用简介灵活多变,个人感觉可读性变差了很多,用起来由 ...

  2. 轻松解决Linux安装Eclipse方法

    随着Linux的发展,很多人开始学习Linux系统,你了解Linux系统么?你是Linux系统的应用者么?本文为你详细介绍Linux安装Eclipse,为你在学习Linux安装Eclipse时起一定的 ...

  3. 跨站脚本 XSS<一:防御方法>

    1. 过滤特殊字符 避免XSS的方法之一主要是将用户所提供的内容进行过滤,许多语言都有提供对HTML的过滤: PHP的htmlentities()或是htmlspecialchars(). Pytho ...

  4. Android技能树

    第一部分:Android(安卓)Android基础知识Android内存泄漏总结Handler内存泄漏分析及解决Android性能优化ListView详解RecyclerView和ListView的异 ...

  5. [Git] 怎么使用Git让代码回到以前的某个节点

    我们可以使某个文件回到以前的某个节点,也可以使整个文件夹下面的文件都回到以前的某个节点,下面只介绍某个文件的,全部的类似. 按步骤操作完成后本地你选中的文件会变成红色,此时的代码还是原来的代码,但是G ...

  6. ANSI C与GNU C

    GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.它在编写linux的时候自己制作了一个标准成为 GNU C标准.A ...

  7. win7 桌面上的网络邻居不见了

    win7 桌面上的网络邻居不见了,可能是以前在桌面上直接删除了.现右击桌面--个性化--更改桌面图标,也找不到网上邻居了.怎么找回来啊? 网上邻居已经改名叫网络了.可以右键桌面选择“个性化”,然后更改 ...

  8. 数据库 基础篇2(mysql)

    2.1MySQL入门 1)到mysql官网下载. 2)安装mysql软件 3)使用 验证是否成功 打开cmd  -> 输入 mysql -u root -p  回车   -> 输入密码   ...

  9. C#日常总结1

    Rows:行的集合: Columns:列的集合: Gridview:用来显示数据的表格{ //设置 AutoGenerateColumns="false":表示不允许自动产生列,列 ...

  10. springmvc自定义日期编辑器

    1.控制器 @Controller public class MyController { // 处理器方法 @RequestMapping(value = "/first.do" ...