数据结构:优先队列 基于list实现(python版)

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3
 4 #Author: Minion-Xu
 5 #list实现优先队列
 6
 7 class ListPriQueueValueError(ValueError):
 8     pass
 9
10 class List_Pri_Queue(object):
11     def __init__(self, elems = []):
12         self._elems = list(elems)
13         #从大到小排序,末尾值最小,但优先级最高,方便弹出且效率为O(1)
14         self._elems.sort(reverse=True)
15
16     #判断队列是否为空
17     def is_empty(self):
18         return self._elems is []
19
20     #查看最高优先级 O(1)
21     def peek(self):
22         if self.is_empty():
23             raise ListPriQueueValueError("in pop")
24         return self._elems[-1]
25
26     #弹出最高优先级 O(1)
27     def dequeue(self):
28         if self.is_empty():
29             raise ListPriQueueValueError("in pop")
30         return self._elems.pop()
31
32     #入队新的优先级 O(n)
33     def enqueue(self, e):
34         i = len(self._elems) - 1
35         while i>=0:
36             if self._elems[i] < e:
37                 i -= 1
38             else:
39                 break
40         self._elems.insert(i+1, e)
41
42 if __name__=="__main__":
43     l = List_Pri_Queue([4,6,1,3,9,7,2,8])
44     print(l._elems)
45     print(l.peek())
46     l.dequeue()
47     print(l._elems)
48     l.enqueue(5)
49     print(l._elems)
50     l.enqueue(1)
51     print(l._elems)
时间: 2024-12-22 04:32:27

数据结构:优先队列 基于list实现(python版)的相关文章

【Python】《大话设计模式》Python版代码实现

<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的,而在本人接触到的面向对象语言中,只对C++和Python还算了解,为了加深对各个模式的理解,我在网上下载了一个C++版的源代码,并根据自己的理解边读这本书边动手实践C++源代码,同时将其改写成了Python代码,算是一箭三雕吧. 由于这些代码的目的是展示各

《大话设计模式》Python版代码实现

上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的,而在本人接触到的面向对象语言中,只对C++和Python还算了解,为了加深对各个模式的理解,我在网上下载了一个C++版的源代码,并根据自己的理解边读这本书边动手实践C++源代码,同时将其改写成了Python代码,算是一箭三雕吧. 由于这些代码的目的是展示各个设计模式而非完成一个具体的复杂任务,基于C++版本

线性表应用--Josephus问题的解法(Python 版)

线性表应用 --Josephus问题的解法(Python 版) Josephus问题描述:假设有n个人围坐一圈,现在要求从第k个人开始报数,报到第m个数的人退出.然后从下一个人开始继续报数并按照相同的规则退出,直到所有人退出.要求按顺序输各出列人的编号. 基于数组概念解法 1. 建立一个包含n个人的表 2. 找到第k个人,从那里开始 3. 处理过程中采用吧相应元素修改为0的方式表示已经退出,反复做: 4. 数m个(尚在坐的)人,遇到表的末端转回到下标0继续 4. 把表示第m个人的表元素修改为0

python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器

python之simplejson,Python版的简单. 快速. 可扩展 JSON 编码器/解码器 simplejson Python版的简单. 快速. 可扩展 JSON 编码器/解码器 编码基本的 Python 对象层次结构: import simplejson as json print json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) print json.dumps("\"foo\bar") print json

微信支付SDK(python版)

最近一段时间一直在搞微信平台开发,最近的v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为 python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看着微信官方的demo 照葫芦画瓢就可以了. 我已经把代码放到github了,https://github.com/Skycrab/wzhifuSDK,我主要测试了JsApi调用方式,其它的调用方式并没有测试,如果你发现了bug,请多多pull request,我将不甚感激. 方便观看,代码贴于此.

编码的秘密(python版)

编码(python版) 最近在学习python的过程中,被不同的编码搞得有点晕,于是看了前人的留下的文档,加上自己的理解,准备写下来,分享给正在为编码苦苦了挣扎的你. 编码的概念 编码就是将信息从一种格式转换成另一种格式,计算机只认识二进制,简单的理解,将我们眼睛看到的文字转换为计算机能够识别的二进制格式视为编码,而二进制以某种编码格式转换为我们能看的文字的过程可以看成是解码.既然计算机只能认识二进制0,1,那么我们用的字母.数字和文字等是怎样和他们对应的呢?那就请继续看吧! python中查看

基于多线程的C#版QQ农场

基于多线程的C#版QQ农场(图形图像,文件和流,多线程,Web服务) 课程链接:http://www.dwz.cn/wkkAv 咨询QQ2110053820 课程讲师:蝈蝈 课程分类:.Net 适合人群:初级 课时数量:35课时 更新程度:完毕 用到技术:文本编辑器的实现.图形图像编程.多线程编程.文件和流 涉及项目:QQ农场 课程简介: 模拟QQ农场是以农场为背景的模拟经营类游戏,前身为"五分钟"团队开 发的开心农场,后面则嵌入在Q间和QQ校友(腾讯朋友)平台中的应用程序 游戏.游戏

关于在Linux mint(应该所有基于ubuntu的发行版都是这样子)jade安装使用问题

本文出自blog.csdn.net/svitter jade是什么? 模板引擎 如何在Ubuntu下使用? github上给的答案是 使用 npm install jade 来安装使用. 但是在ubuntu下没有办法直接在命令行使用jade. 你需要找到~/node_modules/jade/bin下的jade.js 如果使用deb安装的node,那么node在命令行下为js 希望不正确之处大家给予指正_(:3」∠)_ 关于在Linux mint(应该所有基于ubuntu的发行版都是这样子)ja

python 版 quicksort 快排

今天看了下苹果xml 解析,写了个小demo 心想还是 在博客上写点东西吧,毕竟很久很久都没有上来了 先上个效果图把 接下来 看下 工程目录图吧 本demo 分两种解析模式,一是苹果自带的, 首先先看下苹果自带的吧,工程文件为 NoteXMLParser 文件 ,另一种解析模式 是 NotesTBXMLParser文件 NoteXMLParser.h 文件代码如下 : // // NoteXMLParser.h // TestXML // // Created by choni on 14-5-

DIY一个基于树莓派和Python的无人机视觉跟踪系统

DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站几乎已经是标配.如果想来点高级的--在无人机上直接处理拍摄的图像并实现自动控制要怎么实现呢?其实视觉跟踪已经在一些高端的消费级无人机上有了应用,不过玩现成的永远没有自己动手来劲;).前段时间DIY了一个无人机三轴云台的视觉跟踪系统,除去云台花了¥370,本文将设计思路与实验效果分享出来. 一.基本配置 1.1 硬件 计算平台:树莓派3 (¥219.00) 摄像头:USB网络摄像头(¥108.