一、队列的特征性:

1. 先进先出

9

8

7

6

5

4

3

2

1

0

last                                                                                                                                                first

二、类定义队列

class:

1、实例属性

a.first节点

b.last节点

每一个新元素进来时,都是从最后面插入进来;每一个元素要出去,都是从开头向外出。

2、实例方法

a.进队列 enqueue

核心算法: 判断队列是否为空,如果是空则first,last都指向新加入的结点node;

如果不为空,这first指向队列第一个元素位置,在队尾插入元素完成后,last指向向后加1

b.出队列 dequeue

核心算法:

参数:None

返回值:节点的值

队列为空时,return None;队列不为空,记录首节点first,然后将下一个节点的值赋给first(可能为None),最后返回首节点的值。

3、练习:用上述的代码,完成67,45,34节点顺序放入队列,之后从队列的头部开始访问队列里的每一个元素。

4、练习:目前的队列,无法判断队列里面节点的个数,新增一个实例属性self.num,完成队列节点的计算,在是上题的基础上打印队列剩余节点的个数。

三、代码:

#encoding=utf-8

class Node(object):

def __init__(self, val):

self.value = val

self.next = None

class Queue(object):

def __init__(self):

self.first = None

self.last = None

def enqueue(self,n):

if self.first == None:

newNode = Node(n)

self.first = newNode

self.last = newNode

else:

newNode = Node(n)

self.last.next = newNode

self.last = newNode

def dequeue(self):

if self.first == None:

return None

else:

tmpVar = self.first.value

self.first = self.first.next

if self.first == None:

self.last = None

return tmpVar

if __name__ == '__main__':

q = Queue()

varList = [67,45,34,38,96,101]

for var in varList:

q.enqueue(var)

for i in xrange(3):

q.dequeue()

node = q.first

while node != None:

print node.value

node = node.next

python算法-队列的更多相关文章

  1. Python算法应用实战之队列详解

    队列是一种先进先出(First-In-First-Out,FIFO)的数据结构.队列被用在很多地方,比如提交操作系统执行的一系列进程.打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客.下 ...

  2. Java && Python 算法面试常用类以及方法总结

    数据结构 逻辑结构上: 包括集合,线性结构,非线性结构. 存储结构: 顺序存储,链式存储,索引存储,散列存储. Java 常见数据结构 大专栏  Java && Python 算法面试 ...

  3. python算法常用技巧与内置库

    python算法常用技巧与内置库 近些年随着python的越来越火,python也渐渐成为了很多程序员的喜爱.许多程序员已经开始使用python作为第一语言来刷题. 最近我在用python刷题的时候想 ...

  4. 安装Python算法库

    安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...

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

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

  6. python消息队列snakemq使用总结

    Python 消息队列snakemq总结 最近学习消息总线zeromq,在网上搜了python实现的消息总线模块,意外发现有个消息队列snakemq,于是拿来研究一下,感觉还是很不错的,入手简单使用也 ...

  7. python RabbitMQ队列使用(入门篇)

    ---恢复内容开始--- python RabbitMQ队列使用 关于python的queue介绍 关于python的队列,内置的有两种,一种是线程queue,另一种是进程queue,但是这两种que ...

  8. python算法(一)

    python算法(一) 一.求数x的因子 x=100 divisors=()#初始化空的元组 for i in range(1,x): if x%i==0: divisors=divisors+(i, ...

  9. Python算法与数据结构--求所有子数组的和的最大值

    Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...

随机推荐

  1. laravel 5.5 oauth2.0 跨域问题解决方案

    一.laravel-Cors 安装 在终端执行安装命令如下: composer require barryvdh/laravel-cors 添加服务提供商 在Laravel配置文件app.php的pr ...

  2. C# 分支语句 练习题

    1.“请输入年份:”(1-9999) “请输入月份:”(1-12) “请输入日期:”(要判断大小月,判断闰年) 判断输入的时间日期是否正确 bool dateISOK = false;//放置日期是否 ...

  3. [习题]输入自己的生日(年/月/日)#2 -- 日历(Calendar)控件的时光跳跃,一次跳回五年、十年前?--TodaysDate属性、VisibleDate属性

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/10/calendar_visibledate_birthday_dropdow ...

  4. 通过StringBuilder的reverse()实现倒序

    import java.util.Scanner; public class ReverseString { public static void main(String[] args) { Scan ...

  5. js 控制台输出

    var a = 'string'; var b = 123; console.log("The %s jumped over %d tall buildings", a, b); ...

  6. readystatechange

    // alternative to DOMContentLoaded document.onreadystatechange = function () { if (document.readySta ...

  7. Bootstrap-datepicker设置开始时间结束时间范围

    $('.form_datetime').datepicker({   format: 'yyyy-mm-dd',    weekStart: 1,    startDate: '+1',   endD ...

  8. 运用模逆运算(同余方程)来解决Matlab课上的一道思考题

    一道Matlab编程题 & 暴力解法 Matlab课上老师出了这样一道题: 一个篮子有K个鸡蛋: 2个2个拿剩1个: 3个3个全部拿完: 4个4个拿剩1: 5个5个拿剩4个: 6个6个拿剩3个 ...

  9. 八 个优秀的 jQuery Mobile 教程

    jQuery Mobile 是 jQuery 在手机上和平板设备上的版本.jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架.虽然j ...

  10. Bootstrap历练实例:基本输入框组

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...