数据结构与算法JavaScript描述练习------第5章队列

js(JavaScript)数据结构之队列(Queue) 队列是一种数据结构,它遵循先进先出(FIFO)的原则,即最先进入队列的元素最先被移除。在日常生活中,我们可以将队列比喻为排队等待服务的人群,如在银行排队或者日常购物排队。 阅读详情

1. 修改 Queue 类,形成一个 Deque 类。这是一个和队列类似的数据结构,允许从队列两端 添加和删除元素,因此也叫双向队列。写一段测试程序测试该类。

function Deque() { 
	this.dataStore = []; 
	this.enqueue = enqueue; 
	this.addFront = addFront;
	this.dequeue = dequeue; 
	this.removeEnd = removeEnd;
	this.front = front; 
	this.back = back; 
	this.toString = toString; 
	this.empty = empty; 
} 
 
function enqueue(element) { 
	this.dataStore.push(element); 
} 
 
function dequeue() { 
	return this.dataStore.shift(); 
} 
 
function front() { 
	return this.dataStore[0]; 
} 
 
function back() { 
	return this.dataStore[this.dataStore.length-1]; 
} 
 
function toString() { 
	var retStr = "";
	for (var i = 0; i < this.dataStore.length; ++i) { 
		retStr += this.dataStore[i] + "\n"; 
	} 
	return retStr; 
} 
 
function empty() { 
	if (this.dataStore.length == 0) { 
		return true; 
	} else { 
		return false; 
	} 
} 

function addFront(element) {
	this.dataStore.unshift(element);
}

function removeEnd() {
	return this.dataStore.pop();
}

var d = new Deque();
d.enqueue(1);
d.enqueue(2);
d.enqueue(3);
d.addFront(0);
d.addFront(-1);
console.log("Deque after adding elements:");
console.log(d.toString());
console.log("Removed element from front: " + d.dequeue());
console.log("Removed element from front: " + d.dequeue());
console.log("Removed element from end: " + d.removeEnd());
console.log("Deque after removing elements:");
console.log(d.toString());
console.log("Is deque empty? " + d.empty());

2. 使用前面完成的 Deque 类来判断一个给定单词是否为回文。

function isPalindrome(word) {
    var d = new Deque();
    
    for (var i = 0; i < word.length; i++) {
        d.enqueue(word[i]);
    }
    
    while (!d.empty()) {
        if (d.front() !== d.back()) {
            return false;
        }
        
        d.dequeue();
        d.removeEnd();
    }
    
    return true;
}
var words = ["racecar", "hello", "madam", "noon", "world"];
words.forEach(function(word) {
	if (isPalindrome(word)) {
		console.log(word + " is a palindrome\n");
	}
});

3. 修改例 5-5 中的优先队列,使得优先级高的元素优先码也大。写一段程序测试你的改动。

function Queue() { 
	this.dataStore = []; 
	this.enqueue = enqueue; 
	this.dequeue = dequeue; 
	this.front = front; 
	this.back = back; 
	this.toString = toString; 
	this.empty = empty; 
} 
 
function enqueue(element) { 
	this.dataStore.push(element); 
} 
 
// function dequeue() { 
	// return this.dataStore.shift();
// }
function dequeue() { 
	var priority = 0;
	for (var i = 1; i < this.dataStore.length; i++) {
		if (this.dataStore[i].code > this.dataStore[priority].code) {
			priority = i;
		}
	}
	return this.dataStore.splice(priority, 1);
} 
 
function front() { 
	return this.dataStore[0]; 
} 
 
function back() { 
	return this.dataStore[this.dataStore.length-1]; 
} 
 
// function toString() { 
	// var retStr = "";
	// for (var i = 0; i < this.dataStore.length; ++i) { 
		// retStr += this.dataStore[i] + "\n"; 
	// } 
	// return retStr; 
// } 
function toString() { 
	var retStr = "";
	for (var i = 0; i < this.dataStore.length; ++i) { 
		retStr += this.dataStore[i].name + " code: " + this.dataStore[i].code + "\n"; 
	} 
	return retStr; 
}
 
function empty() { 
	if (this.dataStore.length == 0) { 
		return true; 
	} else { 
		return false; 
	} 
} 




function Patient(name, code) { 
 this.name = name; 
 this.code = code; 
}


var ed = new Queue(); 
ed.enqueue(new Patient("Smith",5)); 
ed.enqueue(new Patient("Jones", 4));
ed.enqueue(new Patient("Fehrenbach", 6)); 
ed.enqueue(new Patient("Brown", 1)); 
ed.enqueue(new Patient("Ingram", 1)); 
console.log(ed.toString()); 
var seen = ed.dequeue(); 
console.log("Patient being treated: " + seen[0].name); 
console.log("Patients waiting to be seen: ") 
console.log(ed.toString()); 
var seen = ed.dequeue(); 
console.log("Patient being treated: " + seen[0].name); 
console.log("Patients waiting to be seen: ") 
console.log(ed.toString()); 
var seen = ed.dequeue(); 
console.log("Patient being treated: " + seen[0].name); 
console.log("Patients waiting to be seen: ") 
console.log(ed.toString());

4. 修改例 5-5 中的候诊室程序,使得候诊室内的活动可以被控制。写一个类似菜单系统, 让用户可以进行如下选择: a. 患者进入候诊室; b. 患者就诊; c. 显示等待就诊患者名单。

function Queue() { 
	this.dataStore = []; 
	this.enqueue = enqueue; 
	this.dequeue = dequeue; 
	this.front = front; 
	this.back = back; 
	this.toString = toString; 
	this.empty = empty; 
} 
 
function enqueue(element) { 
	this.dataStore.push(element); 
} 
 
// function dequeue() { 
	// return this.dataStore.shift();
// }
function dequeue() { 
	var priority = 0;
	for (var i = 1; i < this.dataStore.length; i++) {
		if (this.dataStore[i].code < this.dataStore[priority].code) {
			priority = i;
		}
	}
	return this.dataStore.splice(priority, 1);
} 
 
function front() { 
	return this.dataStore[0]; 
} 
 
function back() { 
	return this.dataStore[this.dataStore.length-1]; 
} 
 
// function toString() { 
	// var retStr = "";
	// for (var i = 0; i < this.dataStore.length; ++i) { 
		// retStr += this.dataStore[i] + "\n"; 
	// } 
	// return retStr; 
// } 
function toString() { 
	var retStr = "";
	for (var i = 0; i < this.dataStore.length; ++i) { 
		retStr += this.dataStore[i].name + " code: " + this.dataStore[i].code + "\n"; 
	} 
	return retStr; 
}
 
function empty() { 
	if (this.dataStore.length == 0) { 
		return true; 
	} else { 
		return false; 
	} 
} 




function Patient(name, code) { 
 this.name = name; 
 this.code = code; 
}


function main() {
    var ed = new Queue();

    while (true) {
        console.log("\n请选择操作:");
        console.log("a. 患者进入候诊室");
        console.log("b. 患者就诊");
        console.log("c. 显示等待就诊患者名单");
        console.log("d. 退出");

        var choice = prompt("请输入选项:").toLowerCase();

        switch (choice) {
            case 'a':
                var name = prompt("请输入患者姓名:");
                var code = parseInt(prompt("请输入患者优先级代码:"));
                ed.enqueue(new Patient(name, code));
                console.log(name + "已进入候诊室");
                break;

            case 'b':
                if (!ed.empty()) {
                    var seen = ed.dequeue();
                    console.log("正在治疗的患者:" + seen[0].name);
                } else {
                    console.log("候诊室为空,无法就诊!");
                }
                break;

            case 'c':
                if (!ed.empty()) {
                    console.log("等待就诊的患者列表:\n" + ed.toString());
                } else {
                    console.log("候诊室为空!");
                }
                break;

            case 'd':
                console.log("退出程序。");
                return;

            default:
                console.log("无效的选择,请重新输入!");
                break;
        }
    }
}

main();

手把手教你用 JavaScript 实现常见数据结构与算法 你是否遇到过这样的场景?写前端代码时想优化列表渲染性能,却不知道用链表还是数组更高效;面试时被问“用 JS 实现一个栈”,结果卡壳在 API 设计;想自己写个小框架,却对虚拟 DOM 的树结构遍历一头雾水?本文正是为解决这些问题而生:覆盖6 类核心数据结构(数组、链表、栈、队列、树、图)和5 大经典算法(排序、搜索、递归、动态规划、贪心),用 JS 代码+生活案例,让你“既能写代码,又懂为什么这么写”。本文从“生活场景”切入,先讲数据结构(像认识工具),再讲算法(像学习工具的用法),最后用实战案例串联。 阅读详情

相关推荐

华为模拟器eNSP练习题 - HCIA综合实验

华为模拟器eNSP练习题 - HCIA综合实验 题目要求 ISP路由器只能配置IP地址,之后不得进行其他任何配置; 整个内部网络基于192.168.1.0/24进行地址规划; R1/R2之间启动OSPF协议,单区域; PC1-PC4自动获取IP地址; PC1不能telnet R1,PC1外的其他内网pc可以; PC1-PC4可以访问PC5,R2的公网接口只拥有一个公有IP12.0.0.1; 外部的client可以通过域名www.ensp.com访问http server; ISP路由telnet 12.0

炸鸡店老板z的博客 9877

【数据结构与算法】详解什么是队列,并用代码手动实现一个队列结构

队列结构也是平时非常常见的一种受限的线性数据结构。它跟栈结构一样都是受限的数据结构,区别就是队列结构是遵循着先进先出的原则,本文将对此进行详细的讲解。 先点赞,再看博客,顺手可以点个关注。 微信公众号搜索【Lpyexplore的编程小屋】,关注我,带你在python爬虫的过程中学习前端 回复 “领取前端电子书”,领取前端相关的电子版书籍 回复 “前端常考面试题”,领取前端面试题以及相应答案 数据结构——队列一、什么是队列二、队列结构的方法三、用代码实现一个队列结构(1)创建一个构造函数(2)实现enq

零一的博客 1万+

用STM32的SPI模式2搞定SSI绝对值编码器通信(附完整代码与避坑点)

本文详细解析了如何使用STM32的SPI模式2实现SSI绝对值编码器通信,包括硬件设计、SPI配置、数据处理算法及稳定性优化技巧。通过完整的代码示例和避坑指南,帮助工程师解决时序匹配、数据解析等常见问题,提升工业自动化系统中的编码器通信可靠性。

weixin_27252001的博客 268

《数据结构与算法JavaScript描述》

《数据结构与算法JavaScript描述》 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115363398 上架时间:2014-8-5 出版日期:2014 年8月 开本:16开 版次:1-1 所属分类:计算机 > 软件与程序设计 > 网络编程 > ...

weixin_30607029的博客 747

CentOS7上装不了最新Chrome?别折腾依赖了,试试这个老版本安装法(附103.0.5060.24 beta下载地址)

本文提供了在CentOS7上安装兼容版Chrome的详细指南,解决了因GLIBC版本限制导致的最新版Chrome无法安装的问题。推荐使用Chrome 103.0.5060.24 beta版本,并附有下载地址和完整安装步骤,包括禁用自动更新和配套工具安装,确保系统稳定性和功能完整性。

weixin_29289821的博客 570

【Tableau】解决订阅报表PDF中文显示为乱码(方框)问题

一、问题描述 在tableau server网页端报表中文字符能正常显示,但在订阅后发送到邮箱时,以图片格式呈现的内容中中文字符显示为方框。 网页端报表能正常显示中文字符: 邮件中的报表不能正常显示中文字符: 二、问题分析 网页端字符显示情况是由html编码决定的,而tableau生成图片时是通过所部署的服务器的字体文件显示字体。因此可能是由于Linux服务器缺失相关的字体文件导致网页端选择的中文字体在服务器上缺失对应的字体文件导致的。则考虑在服务器引入对应的字体文件。 三、问题解决 1、查看服务器现有

why_not_study的博客 2834

5分钟入门JavaScript队列(Queue)数据结构【JavaScript数据结构与算法系列】

本文目录一、什么是JavaScript队列数据结构二、创建一个JavaScript队列三、封装队列方法①向队列添加元素②检查队列是否为空③获取队列的长度④从队列移除元素⑤查看队列头元素⑥清空队列⑦创建toString方法五、使用Queue类四、本章小结五、写在后面 一、什么是JavaScript队列数据结构 在上一篇文章中,我们了解并学习了JavaScript栈数据结构,本章开始JavaScript的队列数据结,第一章先认识队列与怎么去封装一个队列。 前面的文章里我们已经学习了栈。队列和栈非常类似,但是使用

狼丶宇先森的网络科技空间 2178

萤石摄像头批量下载视频后FFmepg拼接

本文描述萤石摄像头,如何批量下载视频,然后把视频片段拼接为一个完整的视频,亲测有效。有问题,可以下面留言

烤鱼哥哥的博客 1202

资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

数据结构 是掌握计算机编程必须具备的技能。通常情况下,我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表、栈、队列、字符串、动态数字、整数集合、树、图、搜索、排序等涉及的算法全部写一遍。写完之后,基本上就把这门语言搞定了。 今天给大家分享的就是我从网上找到的利用 JavaScript 语言来实现各种数据结构的算法,希望这本电子书对学习 JavaScript 想从事前端工作的读者有益。...

老马的程序人生 4380

QNX系统中的密码哈希格式——数据安全深度分析

综上所述,QNX系统中的Shadowed密码哈希格式提供了一种有效的数据安全机制,能够保护用户密码的安全性。通过将用户密码的哈希值存储在系统文件中,并结合哈希算法和盐值的使用,可以有效地防止明文密码泄露和密码破解。密码哈希是一种常用的安全技术,用于将用户密码转换为不可逆的哈希值,以保护用户的敏感信息。在QNX操作系统中,存在一种称为Shadowed密码哈希格式的机制,用于存储用户密码的安全散列值。当用户登录系统时,系统会将用户输入的密码与保存的哈希值进行比对,以验证密码的正确性。在上述代码中,首先使用。

UneDatabase的博客 253

20、Citrix 云桌面常见VDA注册问题汇总

本文总结了与 VDA 中出现的 VDA 会话断开连接、注册、会话卡住以及挂起/崩溃相关的主要支持文章。

我在Citrix、VMware、Veeam、微软和NVIDIA等领域拥有丰富经验的专业人士,专注于设计和维护虚拟化基础设施、实施备份与灾难恢复策略,致力于优化企业的IT环境。 944

【数据结构与算法】详解什么是优先级队列,并用代码手动实现一个优先级队列

上一篇文章讲解了队列的相关知识,同时用代码实现了一个队列结构。那么本文将介绍一下另一种特殊的队列结构,叫做 优先级队列。 上一篇文章的跳转链接—— 公众号:Lpyexplore的编程小屋 关注我,每天更新,带你在python爬虫的过程中学习前端,还有更多电子书和面试题等你来拿 数据结构——优先级队列一、什么是优先级队列 一、什么是优先级队列 在了解了什么是队列以后,我们再来了解优先级队列,顾名思义,优先级队列就是在队列的基础上给每个元素加上了先后顺序,我们仍然拿排队买票的例子来讲解。 ...

零一的博客 2万+

手把手教你学Simulink--基于电能质量与无功补偿的场景实例:统一电能质量调节器(UPQC)的联合控制仿真

在现代电力系统中,电能质量问题有源电力滤波器(APF)→ 治理谐波与无功动态电压恢复器(DVR)→ 补偿电压暂降/暂升静止无功发生器(SVG)→ 无功补偿与电压支撑而统一电能质量调节器(Unified Power Quality Conditioner, UPQC)是一种集串联补偿与并联补偿于一体的全能型电能质量治理装置✅ 电压类问题:暂降、暂升、不平衡、闪变✅ 电流类问题:谐波、无功、三相不平衡✅ 实现双向有功交换(储能型)串联单元(DVR功能):串联于线路,控制电源侧电压质量并联单元。

MHD0815的博客 240

Javascript描述-数据结构与算法

☆     数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。      下面是我总结整理出的关于数据结构与算法的相关内容,如有错误,欢迎交流。本文中对于方法的封装均采用JavaScript语言来实现。...

weixin_43689100的博客 402

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

前端学习总结(二十二)——常见数据结构与算法javascript实现

写在前面作为前端开发者而言,可能不会像后端开发那样遇到很多的算法和数据结构问题,但是不论是做前端、 服务端还是客户端, 任何一个程序员都会开始面对更加复杂的问题, 这个时候算法和数据结构知识就变得不可或缺,它是编程能力中很重要的一部分。如今的前端技术发展飞快,再也不像以前那样只负责视图层了,更多的交互和数据逻辑需要前端来做,这个时候对于算法和数据结构就有着更高的要求。此外,前端还可以去做node端,

浩时代的博客 3万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JavaScript 版数据结构与算法

数据结构与算法

weixin_49809163的博客 1406

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《数据结构与算法JavaScript描述》读书笔记

总的来说,书的质量不太高,如果作为前端工程师算法入门的书的话,不如去读《算法图解》,相比之下更容易理解,讲解也更加准确。这本JavaScript描述只是用了JavaScript去实现一些基础算法,而且实现的也不是很令人满意。

多啦的博客 512

JavaScript数据结构与算法笔记

JavaScript数据结构与算法笔记

qq_43645678的博客 1144

js数据结构与算法:队列

目录🚗.队列初认识🚓.队列的各种方法2.1 enqueue(向队列添加元素)2.2 dequeue(向队列删除元素)2.3 peek (查看队列头元素)2.4 size和isEmpty(队列长度与是否为空)2.5 clear(清空队列)2.6 toString(创建 toString方法)🚕.使用队列并总结3.1使用队列3.2总结 队尾:进行插入操作的端,队头:进行删除操作的端。空队列:队列中没有元素时。队列元素:队列的数据元素。入队:在队列中插入一个队列元素,出队:从队列中删除一个队列元素。声明类...

m0_51311990的博客 1141

拿捏javascript数据结构与算法(上)

本文参考《学习javascript数据结构与算法》,根据自己整理写下,如有错误的地方,欢迎大佬指正。 知识点: 第一章:javascript简介 第二章:ECMAscript和TypeScript概述 第三章:数组 第四章:栈 第五章:队列和双端对列 第六章:链表 第七章:集合 第八章:字典和散列表 第九章:递归 第一章js基础比较简单,在这里我就不浪费时间重复了,直接从第二章开始 第二章:ECMAscript和TypeScript概述 2.1 ECMAscript还是TypeScript 2.2 EC

十九万里的博客 2025

《学习JavaScript数据结构与算法》核心知识点梳理

这本《学习JavaScript数据结构与算法》是前端和Node.js开发者入门数据结构与算法的经典读物。它的核心价值在于使用JavaScript这门熟悉的语言,来揭示计算机科学中基础且重要的概念。

宝青书坊 1577

【JavaScript数据结构与算法】队列

队列 1 什么是队列 队列是一种列表,具有先进先出(FIFO)的特点。可用于模拟提交操作系统执行的一系列进程、打印任务,顾客排队行为等。 2 对队列的操作 入队(插入新元素) 出队(删除元素) 读取队头元素 读取队列长度 length 清空队列 clear() 3 实现队列 用数组模拟。 实现Queue类,先从构造函数开始。 function Queue(){ this.dataS...

ljs_coding 242

前端js写数据结构与算法

主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底...,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。(3)所以,为了避免复杂性,从一诞生,JavaScript 就是单线程,这已经成了这门语言的核心特征,将来也不会改变。广度优先遍历,指的是从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。这步做完后,最后的元素会是最大的数。

weixin_52663662的博客 1526

学习JavaScript 数据结构与算法

学习链接:https://github.com/XPoet/js-data-structures-and-algorithms JavaScript 数据结构与算法 1.数据结构(data structure) 数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系 ​ 是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法 2.解决问题方法的效率,根据数据的组织方式有关 3.常见的数据结构:数组,栈,链表,图,散列表,队

我是一只蘑菇17的博客 2561

重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列

定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读《学习JavaScript数据结构与算法-第三版》的系列文章,主要讲述队列数据结构、双端队列数据结构以及队列相关应用。 队列 队列是遵循**先进先出(FIFO)**原则的一组有序的项...

chuningmei2658的博客 156
上一篇: 数据结构与算法JavaScript描述练习------第4章栈
下一篇: 数据结构与算法JavaScript描述练习------第6章链表
maxiumII
博客等级 码龄17年 436粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值