enqueue

C#队列学习笔记:队列(Queue)和堆栈(Stack)

可紊 提交于 2020-03-23 01:57:58
一、队列(Queue) 1.1、概念 队列(Queue)代表了一个 先进先出 的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为 入队 ,当您从列表中移除一项时,称为 出队 。 1.2、Queue类的属性 下表列出了Queue类的一些常用的属性: 属性 描述 Count 获取 Queue 中包含的元素个数。 1.3、Queue类的方法 下表列出了Queue类的一些常用的方法: 序号 方法名 & 描述 1 public virtual void Clear(); 从 Queue 中移除所有的元素。 2 public virtual bool Contains( object obj ); 判断某个元素是否在 Queue 中。 3 public virtual object Dequeue(); 移除并返回在 Queue 的开头的对象。 4 public virtual void Enqueue( object obj ); 向 Queue 的末尾添加一个对象。 5 public virtual object[] ToArray(); 复制 Queue 到一个新的数组中。 6 public virtual void TrimToSize(); 设置容量为 Queue 中元素的实际个数。 1.4、示例演示 class Program { static

JavaScript实现队列结构(Queue)

心已入冬 提交于 2020-03-06 10:18:25
JavaScript实现队列结构(Queue) 一、队列简介 队列是是一种受限的线性表,特点为 先进先出 ( FIFO :first in first out)。 受限之处在于它只允许在表的 前端 (front)进行删除操作; 在表的 后端 (rear)进行插入操作; 相当于排队买票,先来的先买票,后来的后买票。 队列的应用: 打印队列:计算机打印多个文件的时候,需要排队打印; 线程队列:当开启多线程时,当新开启的线程所需的资源不足时就先放入线程队列,等待CPU处理; 队列类的实现: 队列的实现和栈一样,有两种方案: 基于数组实现; 基于链表实现; 队列的常见操作: enqueue(element):向队列尾部添加一个(或多个)新的项; dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素; front():返回队列中的第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息与Stack类的peek方法非常类似); isEmpty():如果队列中不包含任何元素,返回true,否则返回false; size():返回队列包含的元素个数,与数组的length属性类似; toString():将队列中的内容,转成字符串形式; 二、封装队列类 2.1.代码实现 // 基于数组封装队列类 function Queue() { /

广度优先遍历算法

爱⌒轻易说出口 提交于 2020-02-22 09:14:19
广度优先遍历,这边就要涉及队列的处理,因为,我们一开始访问一个节点之后,访问跟这个结点直接相连的所有节点,这样相连的节点依次加入队列当中,保持队列的先进先出,每次出一个,再访问出的这个节点直接相连的节点,仍然依次进入队列当中。 这边我们知道队列的最大元素的个数,这边采用循环队列的结构。 typedef struct { int data[MAXSIZE]; int front; int rear; }Queue; 给出队列的入队,出队操作。 int enQueue(Queue *q,int e) { if((q->rear+1)%MAXSIZE==q->front) { return 0; } q->data[q->rear]=e; q->rear=(q->rear+1)%MAXSIZE; return 1; } int deQueue(Queue *q,int *e) { if(q->front==q->rear) return 0; *e=q->data[q->front]; q->front=(q->front+1)%MAXSIZE; return 1; } 给出整个代码: #include <stdio.h> #define MAXVEX 9 #define INFINITY 65535 #define MAXSIZE 9 //队列最大储存 typedef struct

数据结构_队列结构_优先级

五迷三道 提交于 2020-02-20 09:33:31
class priorityElement { constructor (elem, priority) { this.elem = elem this.priority = priority } } class priorityQueue { constructor () { this.items = [] } enqueue (elem, priority) { let priorityElem = new priorityElement(elem, priority) let flag = true if (!this.isEmpty()) { for (let i = 0; i < this.size(); i++) { if (priorityElem.priority < this.items[i].priority) { flag = false this.items.splice(i, 0, priorityElem) break; } } if (flag) this.items.push(priorityElem) }else { this.items.push(priorityElem) } } isEmpty () { return this.items.length <= 0 } size () { return this.items.length } }

队列

回眸只為那壹抹淺笑 提交于 2020-01-26 21:44:52
132. 小组队列 输入样例: 2 3 101 102 103 3 201 202 203 ENQUEUE 101 ENQUEUE 201 ENQUEUE 102 ENQUEUE 202 ENQUEUE 103 ENQUEUE 203 DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 2 5 259001 259002 259003 259004 259005 6 260001 260002 260003 260004 260005 260006 ENQUEUE 259001 ENQUEUE 260001 ENQUEUE 259002 ENQUEUE 259003 ENQUEUE 259004 ENQUEUE 259005 DEQUEUE DEQUEUE ENQUEUE 260002 ENQUEUE 260003 DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 0 输出样例: Scenario #1 101 102 103 201 202 203 Scenario #2 259001 259002 259003 259004 259005 260001 arr[0]的队列记录每个组来的先后次序,之后的队列记录相应的组的成员 再按照arr[0]队列中的次序,依次使之后的队列出队 # include

UVA - 540-Team Queue解题报告(stl+模拟)

偶尔善良 提交于 2020-01-16 10:12:56
目录 题目概述 思路分析 完整代码 题目概述 链接: https://vjudge.net/problem/UVA-540 有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么这个新人会插队到最后一个队友身后。如果没有任何一个队友排队,则他会排到长队的队尾。输入每个团队中所有队员的编号,要求支持如下3种指令(前两种指令可以穿插进行)。 ENQUEUE:编号为X的人进入长队。 DEQUEUE:长队队首出队。 STOP:停止模拟。 对于每个DEQUEUE指令,输出出队的人的编号。 输入描述: 输入文件中有一组或多组测试数据。 每组测试数据开始有t个团队。下面t行,每行的第一个数字代表这个团队人数,后面是这几个人的编号。编号为0到999999之间的一个整数。 每组测试数据以“STOP”结束。 输入以t==0时结束。 警告:一个测试用例可能包含最多200000(二十万)个命令,所以实现 团队的队列应该是有效的。 输出描述: 对于每组测试数据,先打印一句"Scenario #k",k是第几组数据。对于每一个"DEQUEUE"指令,输出一个出队的人的编号。每组测试数据后要换行,即使是最后一组测试数据。 样例输入: 2 3 101 102 103 3 201 202 203 ENQUEUE 101 ENQUEUE 201 ENQUEUE 102 ENQUEUE 202

【算法】实现栈和队列

末鹿安然 提交于 2020-01-14 13:28:10
栈(stack) 栈(stack)是一种后进先出(LIFO)的集合类型, 即后来添加的数据会先被删除 可以将其类比于下面文件的取放操作:新到的文件会被先取走,这使得每次取走的文件都是最新的。 栈可以用数组或者队列去实现 下面要实现的栈的API如下图所示: 用数组实现栈 下面我们通过数组实现一个指定了初始容量,但随着元素的增加能够动态地扩张容量的栈。注意: 因为数组指定大小后不可改变, 所以我们要定义自动扩大栈容量的操作 public class ArrayStack<Item> { // 栈元素的总数 private int N = 0; // 存放栈元素的数组 private Item [] items; public ArrayStack (int M) { items = (Item[]) new Object[M]; } /** * @description: 调整栈的大小 */ private void resize (int max) { Item [] temp = (Item [])new Object[max]; for (int i =0;i<items.length;i++) { temp[i] = items[i]; } items = temp; } /** * @description: 向栈顶插入元素 */ public void push (Item

刷题篇-栈

懵懂的女人 提交于 2020-01-13 23:27:12
一、小组队列 题目描述 : \quad 有n个小组要排成一个队列,每个小组中有若干人。当一个人来到队列时,如果队列中已经有了自己小组的成员,他就直接插队排在自己小组成员的后面,否则就站在队伍的最后面。请你编写一个程序,模拟这种小组队列。 输入格式 : \quad 输入将包含一个或多个测试用例。对于每个测试用例,第一行输入小组数量t。接下来t行,每行输入一个小组描述,第一个数表示这个小组的人数,接下来的数表示这个小组的人的编号。编号是0到999999范围内的整数。一个小组最多可包含1000个人。 \quad 最后,命令列表如下。 有三种不同的命令: 1、ENQUEUE x - 将编号是x的人插入队列; 2、DEQUEUE - 让整个队列的第一个人出队; 3、STOP - 测试用例结束 \quad 每个命令占一行。当输入用例t=0时,代表停止输入。需注意:测试用例最多可包含200000(20万)个命令,因此小组队列的实现应该是高效的:入队和出队都需要使用常数时间。 输出样例 : \quad 对于每个测试用例,首先输出一行“Scenario #k”,其中k是测试用例的编号。然后,对于每个DEQUEUE命令,输出出队的人的编号,每个编号占一行。在每个测试用例(包括最后一个测试用例)输出完成后,输出一个空行。 数据范围 : 1 ≤ t ≤ 1000 1≤t≤1000 1 ≤ t ≤ 1 0