前端数据结构

后进先出,数据结构类似于蜂窝煤,js中可以用数组push()  pop() 来模拟栈

应用场景

  • 十进制转二进制
  • 有效的括号(Leetcode20)
  • 函数执行栈中
var isValid = function(s) {
     let stack=[];
     for(let i=0;i<s.length;i++){
         if(s[i]==="("||s[i]==="["||s[i]==="{"){
             stack.push(s[i])
         }else{
             if(stack[stack.length-1]==="("&&s[i]===")"||
                stack[stack.length-1]==="{"&&s[i]==="}"||
                stack[stack.length-1]==="["&&s[i]==="]"){
                stack.pop() 
             }else{
                 return false;
             }
         }
     }
    return stack.length===0
 }

队列

后进先出,数据结构类似于排队,js中可以用数组push()  shift() 来模拟队列

应用场景

  • 食堂排队
  • js异步中的任务队列
  • 计算最近请求次数leetcode993

 链表

多个元素组成的链表,元素存储不连续,用next指针连在一起,js中可以用对象来模拟链表 

应用场景

  • leetcode237删除链表 
  • leetcode206反转链表
  • leetcode2两数相加
  • leetcode83删除排序链表中的重复元素
  • leetcode141环形链表
  • 前端与链表:js中的原型链,原型链的本质是链表,原型链通过__proto__链接
  • 使用链表指针获取JSON的节点值
const a={val:"a"}
const b={val:"b"}
const c={val:"c"}
const d={val:"d"}
a.next=b
b.next=c
c,next=d
//遍历
let p=a;
while(p){
   console.log(a.val)
   p=p.next       
}
//插入
let e={val:"e"}
b.next=e
e.next=c
//删除
b.next=c

 集合

一种无序且唯一的数据结构Set

使用方法:new has delete add size 遍历 keys values entries 有迭代器

应用场景

  • 去重 
  • 判断某元素是否在集合中
  • 求交集
  • leetcode349两个数组的交集
//去重
let arr=[1,1,2,3]
[...new Set(arr)]

//元素在集合中
let set=new Set(arr)
set.has(3)

//求交集
let arr2=[3,4,5]
let set2=new Set(arr2)
[...new Set(arr)].filter((item)=>{set2.has(item)})
原文地址:https://www.cnblogs.com/kangxinzhi/p/14948140.html