JavaScript数据结构 --- 队列
2015-11-28 23:51
573 查看
JavaScript数据结构 --- 队列
队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。是一种先进先出(First-In-First-Out,FIFO)的数据结构。队列的两种主要操作是:向队列中插入新的元素和删除队列中的元素。插入操作叫入队,删除操作叫出队。队列的另一项重要操作是读取队头元素而不把它从队列中删除,命名为 peek()。
用数组实现队列
使用数组实现队列很方便,数组的 push() 方法可以在数组末尾加入元素,shift() 方法可以删除数组的第一个元素。
构造 Queue 类。
function Queue() { this.dataStore = []; this.enqueue = enqueue; // 向队尾添加一个元素 this.dequeue = dequeue; // 删除队首的元素 this.front = front; // 读取队首元素 this.back = back; // 读取队尾元素 this.toString = toString; // 显示队内所有元素 this.empty = empty; //判断队列是否为空 }
enqueue() 方法向队尾添加一个元素。
function enqueue(element) { this.dataStore.push(element); }
dequeue() 方法删除队首元素。
function dequeue() { return this.dataStore.shift(); }
front() 读取队首元素,back() 读取队尾元素。
function front() { return this.dataStore[0]; } function back() { return this.dataStore[this.dataStore.length - 1]; }
toString() 显示队列内所有元素。
function toString() { var retStr = ""; for (var i = 0; i < this.dataStore.length; i++) { retStr += this.dataStore[i] + "\n"; } return retStr; }
empty() 判断队列是否为空。
function empty() { if (this.dataStore.length == 0) { return true; } else { return false; } }
使用队列:方块舞的舞伴分配问题
队列经常用于模拟排队的人,可以用队列来模拟跳方块舞的人。
当男生女生来到舞池,他们按自己的性别排成两排,当舞池中有地方空出来时,选两个队列中的第一个人组成舞伴。他们身后的人各自向前移动一位,变成新的队首。当一对舞伴进入舞池时,主持人通报他们的名字。当一对舞伴走出舞池,且两排队列中有任意一对没人时,主持人也会把情况通报给大家。
先将男生女生的名字存在文件中。
M Bruno Mars
M Justin Bieber
M Wiz Khalifa
M Charlie Puth
M Ed Sheeran
M Sam Smith
M Hans Zimmer
M Jason Mraz
F Ellie Gouding
F Kayt Perry
F Taylor Swift
F Aviril Lavigne
每个舞者的信息都被存储在一个 Dancer 对象中。
function Dancer(name, sex) { this.name = name; this.sex = sex; }
写一个函数读取舞者信息。
function getDancers(males, females) { var names = red("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("Females dancer is:" + person.name); person = males.dequeue(); console.log("Males dancer is:" + person.name); } console.log(); }
参考资料:
JavaScript高级程序设计
JavaScript MDN
Data Structures and Algorithms with JavaScript
相关文章推荐
- 2015 ACM/ICPC Asia Regional Shenyang Online C. Minimum Cut[树链剖分]
- 数据结构——双向链表实现,基本操作的C++版
- 二叉排序树的基本操作(建立,中序遍历,查找,删除,插入)
- JavaScript数据结构 ---- 栈
- 数据结构-哈夫曼树
- 树链剖分学习
- 数据结构例程——插入排序之希尔排序
- 数据结构例程——插入排序之直接插入排序
- 数据结构例程——哈希表及其运算的实现
- 数据结构-线索化二叉树
- 代码整洁之道(五)---------------------数据结构与对象
- 2015年大二上-数据结构-串(1)- 顺序串算法库
- 数据结构和算法学习(10)- 2-3-4树
- 数据结构--向量--向量介绍
- 近似装箱问题(两种脱机算法实现)
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- 近似装箱问题(三种联机算法实现)
- 树套树学习
- 排序(希尔排序)
- 关于图的遍历算法