JavaScript数据结构 --- 队列

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

posted @ 2015-11-28 23:51  周福林  阅读(163)  评论(0编辑  收藏  举报