数据结构与算法JavaScript描述——使用队列
1.使用队列:方块舞的舞伴分配问题
<script type="text/javascript"> function Queue(){this.dataStore = [];this.enqueue = enqueue;this.dequeue = dequeue;this.front = front;this.back = back;this.toString = toString;this.empty = empty;this.count = count; }/** * 向队尾添加一个元素 */ function enqueue(element){this.dataStore.push(element); }/** * 删除队首的元素: */ function dequeue(){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 count(){return this.dataStore.length; }//===================================使用Queue类============================================= /** * 每个舞者信息都被存储在一个Dancer 对象中 */ function Dancer(name, sex) {this.name = name;this.sex = sex; }/** * 将舞者信息从文件中读到程序里来 * trim() 函数除去了每行字符串后的空格 * 根据性别,将舞者加入不同的队列 */ function getDancers(males, females){var names = read("dancers.txt").split("\n");for (var i = 0; i < names.length; ++i) {names[i] = names[i].trim();}for (var i = 0; i < names.length; ++i) {var dancer = names[i].split(" ");var sex = dancer[0];var name = dancer[1];if (sex == "F") {females.enqueue(new Dancer(name, sex));}else{males.enqueue(new Dancer(name, sex));}} }/** * 将男性和女性组成舞伴,并且宣布配对结果 */ function dance(males, females){console.log("The dance partners are: \n");while (!females.empty() && !males.empty()) {person = females.dequeue();console.log("Female dancer is: " + person.name);person = males.dequeue();console.log(" and the male dancer is: " + person.name);} }/** *测试程序: */ var maleDancers = new Queue(); var femaleDancers = new Queue(); getDancers(maleDancers, femaleDancers); dance(maleDancers, femaleDancers); if (!femaleDancers.empty()) {print(femaleDancers.front().name + " is waiting to dance."); } if (!maleDancers.empty()) {print(maleDancers.front().name + " is waiting to dance."); }//显示等候跳舞的人数 if (maleDancers.count() > 0) {print("There are " + maleDancers.count() +" male dancers waiting to dance."); } if (femaleDancers.count() > 0) {print("There are " + femaleDancers.count() +" female dancers waiting to dance."); }</script>
View Code
2.使用队列对数据进行排序
<script type="text/javascript"> function Queue(){this.dataStore = [];this.enqueue = enqueue;this.dequeue = dequeue;this.front = front;this.back = back;this.toString = toString;this.empty = empty;this.count = count; }/** * 向队尾添加一个元素 */ 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 count(){return this.dataStore.length; }//===================================使用Queue类============================================= /** * 根据相应位(个位或十位)上的数值,将数字分配到相应队列 * nums: 待排序的数组 * queues: 队列数组 * n: nums的length * 参数digit 1-按照个位数排序,10-按照十位数排序 */ function distribute(nums, queues, n, digit){for(var i=0; i<n; i++){if(digit == 1){queues[nums[i]%10].enqueue(nums[i]);}else{var k = Math.floor(nums[i]/10); queues[k].enqueue(nums[i]);}} }/** * 从队列中收集数字的函数 */ function collect(queues, nums){var i=0;for(var j=0; j<queues.length; j++){while(!queues[j].empty()){nums[i++] = queues[j].dequeue();}} }//测试程序 //1.定义queues 和 nums var queues = []; for (var i = 0; i < 10; ++i) {queues[i] = new Queue(); } var nums = []; for (var i = 0; i < 10; ++i) {nums[i] = Math.floor(Math.random() * 101); }console.log("Before radix sort: "); console.log(nums); distribute(nums, queues, nums.length, 1); //按照个位数进行第一次排序 collect(queues, nums); //对按照个位数排好序的队列,每个队列挨排出列,组成新的数组 distribute(nums, queues, nums.length, 10); //按照十位数进行第二次排序 collect(queues, nums); console.log("After radix sort: "); console.log(nums);</script>
View Code
打印出来如下:
3.优先队列:
<script type="text/javascript"> function Queue(){this.dataStore = [];this.enqueue = enqueue;this.dequeue = dequeue;this.front = front;this.back = back;this.toString = toString;this.empty = empty;this.count = count; }/** * 向队尾添加一个元素 */ function enqueue(element){this.dataStore.push(element); }/** * 使用简单的顺序查找方法寻找优先级最高的元素(优先码越小优先级越高,比如,1 比5 的优先级高) * 返回包含一个元素的数组——从队列中删除的元素。 * * 假设第0个位置的优先级最小。 * 找到比这个优先级更小的位置,然后更新位置。 */ 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].name + ", code: "+ this.dataStore[i].code + "\n";}return retStr; }/** * 判断队列是否为空 */ function empty(){if(this.dataStore.length == 0){return true;}else{return false;} }/** * 显示队列中有多少个元素 */ function count(){return this.dataStore.length; }//===================================使用Queue类============================================= function Patient(name, code) {this.name = name;this.code = code; }//优先队列的实现: var p = new Patient("Smith",5); var ed = new Queue(); ed.enqueue(p); p = new Patient("Jones", 4); ed.enqueue(p); p = new Patient("Fehrenbach", 6); ed.enqueue(p); p = new Patient("Brown", 1); ed.enqueue(p); p = new Patient("Ingram", 1); ed.enqueue(p); console.log(ed.toString()); console.log("-------------------------------");var seen = ed.dequeue(); console.log("Patient being treated: " + seen[0].name); console.log("Patients waiting to be seen: "); console.log(ed.toString()); console.log("-------------------------------");// 下一轮 var seen = ed.dequeue(); console.log("Patient being treated: " + seen[0].name); console.log("Patients waiting to be seen: "); console.log(ed.toString()); console.log("-------------------------------");var seen = ed.dequeue(); console.log("Patient being treated: " + seen[0].name); console.log("Patients waiting to be seen: "); console.log(ed.toString());</script>
打印结果:
转载于:https://www.cnblogs.com/tenWood/p/7215502.html
数据结构与算法JavaScript描述——使用队列相关推荐
- 资料分享:送你一本《数据结构与算法JavaScript描述》电子书!
数据结构 是掌握计算机编程必须具备的技能.通常情况下,我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表.栈.队列.字符串.动态数字.整数集合.树.图.搜索.排序等涉及的算法全部写一遍. ...
- 关于《数据结构与算法JavaScript描述》这本书
前端开发人员是非常有必要掌握数据结构与算法的,最近博主在温习数据结构与算法的时候,从学校图书馆借的这本书, 不看不知道,一看吓一跳,这本书上的代码出现很多的错误,根本就调试不同,而且方法乱用,是读过为 ...
- 数据结构与算法JavaScript描述——链表
1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
- 散列--数据结构与算法JavaScript描述(8)
散列 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用. 散列使用的数据结构叫做散列表. 在散列表上插入.删除和取用数据都非常快,但是对于查找操作来说却效率低下,比如查找一组数据中的最大 ...
- 数据结构与算法JavaScript (一) 栈
序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录 ...
- 数据结构与算法之猫狗队列
数据结构与算法之猫狗队列 目录 猫狗队列 1. 猫狗队列 描述 代码实现 import java.util.LinkedList; import java.util.Queue;public clas ...
- 04_JavaScript数据结构与算法(四)队列
JavaScript 数据结构与算法(四)队列 认识队列 队列(Queue)是一种运算受限的线性表,特点:先进先出.(FIFO:First In First Out) 受限之处: 只允许在表的前端(f ...
- 数据结构与算法(C++)– 队列(Queue)
数据结构与算法(C++)– 队列(Queue) 1.队列 先进先出(First in, First out) enqueue 入队,dequeue 出队 front 队头,rear / back 队尾 ...
- 101道算法javaScript描述【一】
文章目录 小册介绍 你会收获到什么? 适宜人群 你需要准备什么 学习指南 高效地学习 一起变得更好 最后 开篇--复杂度 时间复杂度 常见的时间复杂度 递归的时间复杂度 空间复杂度 常见的空间复杂度 ...
最新文章
- pyqt5实战之透明样式和页面切换和弹出新窗口
- cf1556B B. Take Your Places!
- 如何利用光衰减器测试光纤收发器的灵敏度?
- 山东大学青岛计算机学院贺平,计算机学院学子在全国数学建模竞赛中再获佳绩...
- 没有并发经验,但是面试中经常被问到高并发,怎么破局?
- 是什么会议_会议签到是什么,会议签到过程是怎样的?
- 应届生去软通动力怎么样_超强干货:应届生如何找实习工作?
- 深度解析两大应用内测分发工具Pre.im与TestFlight
- SRP6针对于网游登录服的应用
- R语言数据可视化---交互式图表recharts包
- 根目录下的/lib64也不能删除
- android盒子没声音,安卓手机投屏,投影仪没有声音解决办法
- 人人羡慕的阿里程序员,也是等级分明的,你属于哪个等级呢
- 从0开始,如何设计一个社交电商产品
- kaggle入门--泰坦尼克号之灾(手把手教你)
- 【办公】罗技设备(基于M590)使用方法
- linux 键盘测试程序员,程序员之家打字测试
- mysql 留存率_mysql查询用户留存语法(用户留存和用户留存率问题)
- 数据堂CEO齐红威应邀出席“数据要素市场制度体系建设”专家研讨会
- go设置后端启动_名企实习项目|后端开发岗go微服务实战项目启动,大牛导师带你拿offer!...
热门文章
- python线性回归实例_python 线性回归示例
- js/jq基础(日常整理记录)-3-一个自定义表格
- 我读过的最好的epoll讲解--转自”知乎“ 【转】
- Android渲染机制和丢帧分析
- 一个有趣的算法问题:如何定义一个分数类
- MongoDB 查询超时异常 SocketTimeoutException
- NetBpm 组织架构(4)
- Centos 6 安装 配置 oracle11g R2
- oracle 10g 用户管理笔记
- [转]double free or corruption (!prev): 0x080644c8 ***