首页 > 代码库 > 数据结构与算法JavaScript描述——使用队列

数据结构与算法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.

 

数据结构与算法JavaScript描述——使用队列