您的位置:首页 > 理论基础 > 数据结构算法

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: