JS中数据结构之队列

队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按 顺序排列的数据,先进先出。

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

用数组实现的队列

复制代码
  1. function Queue() {
  2.   this.dataStore = [];
  3.   this.enqueue = enqueue;
  4.   this.dequeue = dequeue;
  5.   this.front = front;
  6.   this.back = back;
  7.   this.toString = toString;
  8.   this.empty = empty;
  9. }
复制代码

enqueue() 方法向队尾添加一个元素:

  1. function enqueue(element) {
      this.dataStore.push(element);
    }

dequeue() 方法删除队首的元素:

  1. function dequeue() {
      return this.dataStore.shift();
    }

front(),back() 方法读取队首和队尾的元素:

复制代码
  1. function front() {
  2.   return this.dataStore[0];
  3. }
  4. function back() {
  5.   return this.dataStore[this.dataStore.length-1];
  6. }
复制代码

toString() 方法显示队列内的所有元素:

复制代码
  1. function toString() {
  2.   var retStr = "";
  3.   for (var i = 0; i < this.dataStore.length; ++i) {
  4.     retStr += this.dataStore[i] + "\n";
  5.   }
  6.   return retStr;
  7. }
复制代码

empty() 方法判断队列是否为空:

复制代码
  1. function empty() {
  2.   if (this.dataStore.length == 0) {
  3.     return true;
  4.   }
  5.   else {
  6.     return false;
  7.   }
  8. }
复制代码

 

优先队列

在一般情况下,从队列中删除的元素,一定是率先入队的元素。从优先队列中删除元素时,需要考虑优先权的限制,在删除元素时不必遵守先进先出的约定。高优先级的元素优先处理。

重新定义 dequeue() 方法,使其删除队列中拥有最高优先级的元素。我们规定: 优先码的值最小的元素优先级最高。

复制代码
  1. function dequeue() {
  2. var priority = this.dataStore[0].code;
  3. var num = 0;
  4. for (var i = 1; i < this.dataStore.length; ++i) {
  5. if (this.dataStore[i].code < priority) {
  6. priority = this.dataStore[i].code;
  7. num = i;
  8. }
  9. }
  10. return this.dataStore.splice(num, 1);
  11. }
复制代码

 

posted @   wenxuehai  阅读(554)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
//右下角添加目录
点击右上角即可分享
微信分享提示