JS-数据结构

1、常见的数据结构:

  1. 数组(Array):一组连续存储的数据元素,可以通过索引访问。数组的插入、删除操作较为低效,但查找操作具有较高的性能。

  2. 链表(Linked List):由一系列节点组成的数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。链表支持快速的插入和删除操作,但查找操作需要遍历链表。

  3. 栈(Stack):一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。常用于表达式求值、括号匹配等场景。

  4. 队列(Queue):一种先进先出(FIFO)的数据结构,允许在队尾插入元素,在队头删除元素。常用于任务调度、广度优先搜索等场景。

  5. 树(Tree):一种分层的数据结构,由节点和边组成,每个节点最多有一个父节点和多个子节点。常见的树包括二叉树、二叉搜索树、平衡二叉树等。

  6. 图(Graph):由顶点和边组成的数据结构,顶点之间通过边相连。图可以是有向图或无向图,可以是带权图或不带权图。

  7. 堆(Heap):一种特殊的树形数据结构,通常用来实现优先队列。堆分为最大堆和最小堆,具有高效的插入和删除操作。

  8. 哈希表(Hash Table):通过哈希函数将键映射到存储位置的数据结构。哈希表支持常数时间复杂度的插入、删除和查找操作,适用于大数据量的快速检索。

  9. 集合(Set):一种不包含重复元素的数据结构,常用于去重和集合运算。

  10. 字典(Dictionary):一种由键值对组成的数据结构,可以根据键快速查找值。

2、数据结构在js中的实现

  1. 数组(Array)
    let array = [1, 2, 3, 4, 5];
    
  2. 栈(Stack)
    class Stack {
      constructor() {
        this.items = [];
      }
      
      push(element) {
        this.items.push(element);
      }
      
      pop() {
        if (this.items.length === 0) return null;
        return this.items.pop();
      }
      
      peek() {
        return this.items[this.items.length - 1];
      }
      
      isEmpty() {
        return this.items.length === 0;
      }
      
      size() {
        return this.items.length;
      }
    }
    
  3. 队列(Queue)
    class Queue {
      constructor() {
        this.items = [];
      }
      
      enqueue(element) {
        this.items.push(element);
      }
      
      dequeue() {
        if (this.items.length === 0) return null;
        return this.items.shift();
      }
      
      front() {
        return this.items[0];
      }
      
      isEmpty() {
        return this.items.length === 0;
      }
      
      size() {
        return this.items.length;
      }
    }
    
  4. 链表(Linked List)
    class ListNode {
      constructor(val) {
        this.val = val;
        this.next = null;
      }
    }
    
    class LinkedList {
      constructor() {
        this.head = null;
      }
      
      append(val) {
        let newNode = new ListNode(val);
        if (!this.head) {
          this.head = newNode;
        } else {
          let current = this.head;
          while (current.next) {
            current = current.next;
          }
          current.next = newNode;
        }
      }
    }
    
  5. 集合(Set)
    let set = new Set();
    set.add(1);
    set.add(2);
    set.add(3);
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值