zoukankan      html  css  js  c++  java
  • 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] + "
    ";
    	}
    	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("
    ");
    	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: 
    ");
    	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

  • 相关阅读:
    蓝桥杯 全球变暖(dfs)
    Bzoj3196 Tyvj 1730 二逼平衡树
    Bzoj3110 [Zjoi2013]K大数查询
    Bzoj4004 [JLOI2015]装备购买
    Bzoj2115 [Wc2011] Xor
    Bzoj1257 [CQOI2007]余数之和sum
    HDU1724 Ellipse
    Bzoj2178 圆的面积并
    SPOJ CIRU The area of the union of circles
    CodeForces 232E.Quick Tortoise
  • 原文地址:https://www.cnblogs.com/zhoufulin/p/5003792.html
Copyright © 2011-2022 走看看