小工具知识网

当前位置: 首页 > 行业知识 > 前端常用数据结构

行业知识

前端常用数据结构

2026-11-12 05:27:26 来源:互联网转载

前端常用数据结构

  • 前端常用数据结构
    • 数据结构
    • 数组
    • 栈
    • 队列
    • 链表
      • 单向链表
      • 双向链表
    • 树

前端常用数据结构

  • 什么是数据结构
  • 常���的数据结构
    • JavaScript 如何实现
    • 这些数据结构实际场景

数据结构

所谓数据结构,是在计算机中组织、管理和存储数据的一种方式。

()

:你知道哪些数据结构?

数据结构整体可以分为两大类:线性数据结构 和 非线性数据结构

()
  • 线性数据结构:数据会排列成线性的序列

    • 数组(Array):一种固定大小的数据结构,里面存储相同类型的元素集合。通过索引来进行访问。
    • 链表(Linked List):由一个一个的节点组成,每个节点会包含数据还有下一个节点的指针(内存地址)
    • 栈(Stack):只有一个出入口,先进后出、后进先出
    • 队列(Queue):有两个口,因此先进先出,后进后出
  • 非线性数据结构:顾名思义,就是元素不以线性的顺序排列

    • 树(Tree):体现了一个层次,DOM 树、组件树
    • 图(Graph):由多个节点以及连接节点的边组成。
    • 哈希表(Hash Table)

前端常用的数据结构有:数组、栈、队列、链表以及树

数组

回顾一下数组创建的方法:

// 字面量创建const arr = [];// Array构造函数const arr2 = new Array(3); // 如果参数只有一个值,那么表示的是长度const arr3 = new Array(1, 2, 3); // 如果参数是多个值,那么表示的是数组的元素// Array.of方法:ES6 新引入的方法// 解决 Array 构造函数参数只有一个的时候的怪异行为const arr4 = Array.of(3); // [3]const arr5 = Array.of(1, 2, 3); // [1, 2, 3]// Array.from方法:从一个类组数对象或者可迭代对象创建一个新的数组const arr6 = Array.from("abc"); // ['a', 'b', 'c']// 扩展运算符const a = [1, 2, 3];const b = [4, 5, 6];const arr7 = [...a, ...b];

严格意义来讲,JS 里面所提供的数组并非数据结构里面的数组:

int[] arr = new int[3];arr[0] = 100; // 合法arr[1] = 200; // 合法arr[2] = 300; // 合法arr[3] = 400; // 报错:数组越界

在 JS 中压根儿就没有数组越界这个概念

const arr = [];console.log(arr[10]); // undefinedarr[10] = 100;console.log(arr[10]); // 100

究其原因,是因为 JS 底部,数组实际上就是对象。

类似于:

const arr = {     0: 100,  1: 200,  2: 300,};console.log(arr[0]);

栈

  • FILO(first in last out):先进后出
  • LIFO(last in first out):后进先出
class Stack {     constructor(...args) {       this.stack = [...args];  }  // 返回栈中元素的数量  size() {       return this.stack.length;  }  // 检查栈是否为空  isEmpty() {       return this.size() === 0;  }  // 添加一个或者多个元素到栈顶  push(...items) {       return this.stack.push(...items);  }  // 移除栈顶元素,返回被移除的元素  pop() {       return this.stack.pop();  }  // 返回栈顶元素,但是不删除  peek() {       return this.isEmpty() ? undefined : this.stack[this.size() - 1];  }}const stack = new Stack();console.log(stack.isEmpty()); // truestack.push(1);stack.push(2);stack.push(3);stack.push(4, 5, 6);console.log(stack.size()); // 6// 访问栈顶的元素console.log(stack.peek

上一篇:网易密保卡使用详解及操作指南

下一篇:地铁逃生怎么下载安装?