队列

Python优先权队列出现TypeError: unorderable types 解决方法

£可爱£侵袭症+ 提交于 2020-11-24 06:26:05
class MyType: def __init__(self, arg1, arg2=None): self.data1 = arg1 self.data2 = arg2 q = queue.PriorityQueue() m1 = MyType(5) m2 = MyType(2) m3 = MyType(4) q.put( (1, m1)) q.put( (2, m2)) q.put( (3, m3)) while not q.empty(): print( q.get()) PriorityQueue 里的数据格式是 (优先级, 数据) 其中优先级为一个整形数字, 数据可以是内置类型或者自定义类型,当队列里的所有数据项的优先级没有重复时上面的代码没有什么问题,但万一两个数据项的优先级相同就会报错,类似这样: 因为python的优先级队列使用了堆排序,当队列中两个数据项优先级相同时,队列就会把两个数据项直接拿来再比较确定数据的排列顺序,但是由于我们使用了自定义的数据类型,系统不知道如何比较我们定义的数据,所以就会报错。 所以为了让我们自定义的数据可以比较大小,我们可以覆盖 __lt__这个函数,实现小于比较操作。然后python报错就解决了。(觉得这玩意和c++的stl一样 , stl中也需要类重载<运算符) class MyType: def __init__(self,

STM32 按键扫描的方式实现,用队列传递参数

◇◆丶佛笑我妖孽 提交于 2020-03-25 13:29:21
3 月,跳不动了?>>> 开发环境是keil4.70a 实验板为神舟三号 STM32F103ZET6 软件上使用到了固件库了ucosii 纯粹为了学习,分享一下学习心得 首先上队列初始化的代码 OS_EVENT* KEY_Q; //按键记录的OS队列 void *key_list[80]; //队列定义时要求定义指针数组 /* 推荐在main中或者main.c类似的文件和位置创建这两个变量 */ KEY_Q = OSQCreate(key_list,80); /* 推荐在OSInit之后立马创建这个队列 */ //对了别忘了配置 //这些OS的功能使能 #define OS_Q_EN 1 /* Enable (1) or Disable (0) code generation for QUEUES */ #define OS_Q_ACCEPT_EN 1 /* Include code for OSQAccept() */ #define OS_Q_DEL_EN 1 /* Include code for OSQDel() */ #define OS_Q_FLUSH_EN 1 /* Include code for OSQFlush() */ #define OS_Q_PEND_ABORT_EN 1 /* Include code for OSQPendAbort() */

队列实现(C语言)

北慕城南 提交于 2020-03-12 02:41:17
队列是数据结构中比较常见的,跟时间有关的一般和队列有关系。 队列的实现有很多如数队(数组实现)、链队(链表实现的)。数队又分不同的实现,每种实现都有自己的缺点。这里是最普通的一种,了解队列的结构。下面是数队的一种实现,先看实现: #include<stdio.h> #include<malloc.h> //结构 typedef struct QU{ int *base;//1 int rear;//2 int size;//3 } QU, *QUECE; QUECE init(){ QUECE queue; queue->base = (int *)malloc(10*sizeof(int)); queue->rear = 0; queue->size = 10; return queue; } void en(QUECE queue, int e){ if(queue->rear-1 == queue->size)//4 exit(-1); queue->base[queue->rear] = e;//5 queue->rear = queue->rear+1;//6 } int de(QUECE queue){ int e; int i; e = queue->base[0];//7 if(queue->rear == 0)//8 exit(-1); for(i=1;i

SGE中将指定用户使用特定的队列

允我心安 提交于 2020-01-08 21:50:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近, 同事提出了一个新需求: 保留一些计算节点给研发专用。 实现思路: 将计算节点放入到 主机组(host group)中, 在队列中指定所使用的主机组以及可以使用的用户, 来达到限定某些用户使用指定节点的目的 实现过程 将Node-240从主机组 @allhosts 中取出 先将需要指定专门用户的主机 Node-240 从默认的 @allhosts 中主机组中取出来,这样,默认所有用户可用的队列 all.q 中就不再使用 Node-240 节点。 原配置: [admin@ master ~]$ qconf -shgrp @allhosts group_name @allhosts hostlist Node-243 Node-242 Node-241 Node-240 修改后: [admin@ master ~]$ qconf -shgrp @allhosts group_name @allhosts hostlist Node-243 Node-242 Node-241 增加新的 主机组,名为 @rdhosts , 组内仅含有一个主机 Node-240 [admin@ master ~]$ qconf -ahgrp @rdhosts group_name @rdhosts hostlist Node

【算法系列 三】 Quene

那年仲夏 提交于 2019-12-07 13:07:52
1. 拓扑排序问题( HDU 1285 ) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; public class Main { static int[] inDegree = new int[502]; static int[][] v = new int[502][502]; static boolean[] contain = new boolean[502]; public static void main(String[] args) throws IOException { StreamTokenizer in = new StreamTokenizer(new BufferedReader( new InputStreamReader(System.in))); int n, m; while (in.nextToken() != StreamTokenizer.TT_EOF) { n = (int) in.nval; in.nextToken(); m = (int) in.nval; init(n); for (int i = 1; i <= m; i++) {

VBS 脚本中的字典、动态数组、队列和堆栈

∥☆過路亽.° 提交于 2019-12-06 21:45:45
今天用VBS脚本写了几个程序,用到了字典(Dictionary)、动态数组(ArrayList)、队列(Queue)和堆栈(Stack)。现在写篇Blog总结一下 :-) 1.编写环境 今天突发奇想下载了个gVim来写VBS脚本,我用的版本是7.4的 在写脚本前,需要在gVim的安装根目录下,找到文件“_vimrc”,在里面添加下面三行: set number set softtabstop=4 set tabstop=4 意思分别是“显示行号”、“按退格键一次删掉4个空格”和“设定Tab长度为4个字符” 这个设置类似于Linux系统下文件“.vimrc”的配置 2.字典:Scripting.Dictionary VBS中的字典需要使用Scripting.Dictionary 脚本文件:a.vbs,包含字典的添加、删除、判断键是否存在、修改键、修改值、遍历、统计键值对个数 Option Explicit '建立字典 Dim Dict : Set Dict = CreateObject("Scripting.Dictionary") '添加键值对 Dict.Add "Key1", "Item1" Dict.Add "Key2", "Item2" Dict.Add "Key3", "Item3" '字典中键值对数量 WScript.Echo "字典中现有键值对数量: " & Dict

小蚂蚁学习数据结构(6)——线性结构——队列的介绍

谁说我不能喝 提交于 2019-12-04 01:11:29
队列: 定义:一种可以实现“先进先出”的存储结构 分类: 链式队列——用链表实现 静态队列——用数组实现 静态队列通常都必须是循环队列 循环队列的讲解: 1,静态队列为什么必须是循环队列 如果不是循环队列,会造成空间的巨大浪费 2,循环队列需要几个参数来确定 以及它们的含义 需要2个参数来确定 front rear 两个参数不同场合有不同的含义 先死记住就行 1,队列初始化 front和rear的值都是零 2,队列非空 front代表的是队列的第一个元素 rear代表的是队列的最后一个有效元素的下一个元素 3,队列空 front和rear的值相等,但不一定是零 3,循环队列各个参数的含义 4,循环队列入队伪算法讲解 将值存入r的位置 正确的写法是: r = (r+1)%数组的长度 5,循环队列出队伪算法讲解 f = (f + 1 )%数组的长度 6,如何判断循环队列是否为空 如果front和rear的值相等,则该队列就一定相等 7,如何判断循环队列 是否已满 预备知识: front 的值可能比rear大, front的值也可能比rear小 当然也可能两者相等 两种方式: 1,多增加一个标志参数(一般不用这种方式) 2,少用一个元素 如果r和f的值紧挨着,则队列已满 if( (r+1)%数组长度 == f ) { 已满 } else { 不满 } 学PHP的小蚂蚁 博客 http:/

C 算法与数据结构 队列

自作多情 提交于 2019-12-02 07:45:30
队列 线性数据结构的一种。 特点 先进先出 入队的那一头叫队尾,出队的那一头叫队首。 队列里的指针域总是指向下一个节点。 下面是队列的链式存储结构C代码实现 #include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int QElemType;typedef int Status;/* * 存储结构 */typedef struct QNode { QElemType data; struct QNode *next; }QNode, *QueuePtr;typedef struct{ QueuePtr front; //队头指针 QueuePtr rear; //队尾指针}LinkQueue;/* * 初始化队列 */Status InitQueue(LinkQueue *Q){ Q->front = Q->rear = (QueuePtr) malloc(sizeof(QNode)); if (!Q->front) { exit(OVERFLOW); } Q->front->next = NULL; return OK; }/* * 销毁队列 */Status DestroyQueue