3、js数据结构与算法之队列

博客介绍了队列这种先进先出的数据结构,其主要操作有入队、出队、读取队头元素等,还可获取队列元素数量和清空队列。同时提到可以用 JavaScript 数组实现队列,利用数组的 push() 和 shift() 方法完成相应操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、前言

     队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。队列被用在很多地方,比如提交操作系统执行的一系列进程、打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客。

    队列的两种主要操作是:向队列中插入新元素和删除队列中的元素。插入操作也叫做入队,删除操作也叫做出队。入队操作在队尾插入新元素,出队操作删除队头的元素。

      队列的另外一项重要操作是读取队头的元素。这个操作叫做peek()。该操作返回队头元素,但不把它从队列中删除。除了读取队头元素,我们还想知道队列中存储了多少元素,可以使用length 属性满足该需求;要想清空队列中的所有元素,可以使用clear() 方法来实现。

2 一个用数组实现的队列

使用数组来实现队列看起来顺理成章。JavaScript 中的数组具有其他编程语言中没有的优点,数组的push() 方法可以在数组末尾加入元素,shift() 方法则可删除数组的第一个元素。

//队尾添加一个元素
function enqueue(element) {
    this.dataStore.push(element);
}
//删除队首的元素
function dequeue() {
    return this.dataStore.shift();
}
//读取队首的元素
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;
}
//判断队列是否为空
function empty() {
    if (this.dataStore.length == 0) {
        return true;
    }
    else {
        return false;
    }
}

function Queue() {
    this.dataStore = [];
    this.enqueue = enqueue; //队尾添加一个元素
    this.dequeue = dequeue; //删除队首的元素
    this.front = front; //读取队首的元素
    this.back = back;  //读取队尾的元素
    this.toString = toString; //toString() 方法显示队列内的所有元素
    this.empty = empty;  //判断队列是否为空
}

// 测试程序
var q = new Queue();
q.enqueue("Meredith");
q.enqueue("Cynthia");
q.enqueue("Jennifer");
/*Meredith
Cynthia
Jennifer*/
console.log(q.toString());
q.dequeue();
/*Cynthia
Jennifer*/
console.log(q.toString());
//Front of queue: Cynthia
console.log("Front of queue: " + q.front());
//Back of queue: Jennifer
console.log("Back of queue: " + q.back());

参考:数据结构与算法JavaScript描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值