数据结构(用 JS 实现栈和队列【三种方式】)

简介: 数据结构(用 JS 实现栈和队列【三种方式】)

先进后出

JS 实现栈

  • 栈 : 用数组实现
  • 入栈 push ---- 时间复杂度 O(1)
  • 出栈 pop ---- 时间复杂度 O(1)
let stack = [];

// 入栈
stack.push("a");
stack.push("b");

console.log(stack);

// 出栈 -- 先进后出 -- b 出栈
stack.pop();

console.log(stack);

队列

先进先出

JS 实现队列(方案1)

  • 队列 : 用数组实现
  • 入队 push ---- 时间复杂度 O(1)
  • 出队 shift ---- 时间复杂度 O(n)
let queue = [];

// 入队
queue.push("a");
queue.push("b");

console.log(queue);

// 出队 -- 先进先出 -- a 出队
queue.shift();

console.log(queue);

JS 实现队列(方案2)

  • 队列 : 用数组实现
  • 入队 unshift ---- 时间复杂度 O(n)
  • 出队 pop ---- 时间复杂度 O(1)
let queue = [];

// 入队
queue.unshift("a");
queue.unshift("b");

console.log(queue);

// 出队 -- 先进先出 -- a 出队
queue.pop();

console.log(queue);

【推荐】JS 链表实现队列(方案3)

时间复杂度 O(1)

// 实现队列的:入队、出队、长度
// PS:要用链表来实现,用数组性能较低

class MyQueue {
  constructor() {
    this.length = 0; // 长度
    this.head = null;
    this.tail = null;
  }
  // 从 tail 入队
  add(value) {
    const newNode = { value };

    if (this.length === 0) {
      // 长度是 0
      this.head = newNode;
      this.tail = newNode;
    } else {
      // 长度 > 0 ,把 newNode 拼接到 tail 位置
      this.tail.next = newNode;
      this.tail = newNode;
    }

    this.length++; // 累加长度
  }
  // 从 head 出队
  delete() {
    if (this.length <= 0) return null;

    let value = null;
    if (this.length === 1) {
      // 长度是 1 ,只有一个元素了
      value = this.head.value; // 先找到结果
      // 重置 head tail
      this.head = null;
      this.tail = null;
    } else {
      // 长度 > 1 ,多个元素
      value = this.head.value; // 先找到结果
      this.head = this.head.next; // 重置 head
    }

    // 减少长度,返回结果
    this.length--;
    return value;
  }
}

// 功能测试
const queue = new MyQueue();
queue.add(100);
console.log("length1", queue.length); // 1
queue.add(200);
console.log("length2", queue.length); // 2
console.log("delete1", queue.delete()); // 100
queue.add(300);
console.log("length3", queue.length); // 2
console.log("delete2", queue.delete()); // 200
console.log("length4", queue.length); // 1
console.log("delete3", queue.delete()); // 300
console.log("length5", queue.length); // 0
console.log("delete4", queue.delete()); // null
目录
相关文章
|
14天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
90 9
|
5天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
14 1
|
8天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
11天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
13天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
40 4
|
17天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
27天前
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
44 6
|
30天前
数据结构(栈与列队)
数据结构(栈与列队)
17 1
|
1月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
16 0
|
JavaScript 前端开发
javascript的队列,优先队列,循环队列
按书上的来弄的。慢慢理解了。 function Queue() { var items = []; this.enqueue = function(element){ items.
943 0

热门文章

最新文章