0
点赞
收藏
分享

微信扫一扫

前端数据结构


目录

  • ​​1. 数组​​
  • ​​1.1 数组创建​​
  • ​​1.2 数组遍历​​
  • ​​1.3 二维数组​​
  • ​​1.4 增加元素的方法​​
  • ​​1.5 删除元素的方法​​
  • ​​2. 栈​​
  • ​​3. 队列​​
  • ​​4. 链表​​
  • ​​4.1 链表节点创建​​
  • ​​4.2 添加链表元素​​
  • ​​4.3 删除链表元素​​
  • ​​5. 树​​
  • ​​5.1 创建二叉树​​


我们需要掌握的数据结构主要有:

数组、栈、队列、链表、树,下面就一一来总结这几种数据结构。

1. 数组

1.1 数组创建

我们经常创建数组的方式是:

const arr =[1,2,3]

不过我们在创建数组时,有时不知道内部情况,就可以用构造函数方式来创建数组:

const arr = new Array()   // 等价于 const arr = []
//我们可以给它传一个参数,作为数组长度
const arr1 = new Array(10)

1.2 数组遍历

(1)for循环
注意:​​​for​​​循环的效率最高,能用​​for​​​循环就用​​for​​循环。

const len =arr.length
for (let i = 0; i<len; i++){
console.log(i,arr[i])
}

(2)forEach方法

arr.forEach((item,index)=>{
console.log(index,item)
}

(3)map方法

注意:​​map​​​方法会返回一个全新的数组,不会改变原数组。所以​​map​​方法的作用就不仅仅是遍历数组,而是在遍历的基础上对数组进行处理。

const newArr = arr.map((item,index)=>{
console.log(index,item)
return item*2 //所有元素乘以2
}

1.3 二维数组

(1)二维数组:

const arr = [
[1,2,3],
[1,2,3],
[1,2,3]
]

(2)二维数组初始化

const len = arr.length
for(let i=0;i<len;i++) {
arr[i] = []
}

(3)二维数组访问

// 缓存外部数组的长度
const len1 = arr.length
for(let i=0; i<len1; i++) {
const len2 = arr[i].length
for(let j=0; j<len2; j++) {
console.log(i,j,arr[i][j]) //输出二维数组的索引值和数组值
}
}

1.4 增加元素的方法

(1)​​unshift​​ 方法:添加元素到数组的头部

const arr = [1,2]
arr.unshift(0) // [0,1,2]

(2)​​push​​ 方法:添加元素到数组的尾部

const arr = [1,2]
arr.push(3) // [1,2,3]

(3)​​splice​​ 方法:添加元素到数组的任何位置

注意:第一个参数为开始删除元素的其实位置,第二个参数是删除元素个数,第三个参数是要替换元素。

const arr = [1,2] 
arr.splice(1,0,3) // [1,3,2]

1.5 删除元素的方法

(1)​​shift​​ 方法:删除数组头部的元素

const arr = [1,2,3]
arr.shift() // [2,3]

(2)​​pop​​ 方法:删除数组尾部的元素

const arr = [1,2,3]
arr.pop() // [1,2]

(3)​​splice​​ 方法:删除数组任意位置的元素

const arr = [1,2,3] 
arr.splice(1,2) // [1]

2. 栈

  • 在JavaScript中,栈和队列的实现一般会依赖数组,可以看做是一种特殊的数组。
  • 栈是一种后进先出的数据结构,只能从尾部添加和删除元素,添加元素使用​​push​​​方法,删除元素使用​​pop​​方法。
  • 面试题经常有关于取栈顶元素的操作:

const stack = []
stack.push(1)
stack.push(2)
stack.push(3)

while (stack.length){
const top = stack[stack.length-1]
console.log(top) // 栈顶元素
stack.pop() // 删除栈顶元素,该方法返回删除的元素
}

3. 队列

  • 队列是一种先进先出的数据结构,只能从尾部添加元素,在头部删除数据。添加元素使用​​shift​​​方法,删除数据使用​​push​​方法。

const queue = []  
queue.push(1)
queue.push(2)
queue.push(3)

while(queue.length) {
const top = queue[0]
console.log(top) //队头元素
queue.shift() // 删除队头元素,该方法返回删除的元素
}

4. 链表

链表是线性结构,是一种有序的列表。在链表中,每个节点都有数据域指针域,JavaScript中的链表是以嵌套对象的形式来实现的。

{
// 数据域
val: 1,
// 指针域,指向下一个结点
next: {
val:2,
next: {
val:3,
}
}
}

4.1 链表节点创建

我们用构造函数来创建列表的节点:

function ListNode(val) {
this.val = val;
this.next = null;
}

//创建节点
const node = new ListNode(1)
node.next = new ListNode(2)

4.2 添加链表元素

链表添加元素主要是操作元素的指针域​​next​​:

//原来链表是1->2, 我们在它们之间添加3,即:1->3->2
const node3 = new ListNode(3)
node3.next = node1.next
node1.next =

4.3 删除链表元素

链表删除元素主要也是操作元素的指针域​​next​​:

//原来链表1->3->2,我们删除3,即:1->2
node1.next = node3.next

5. 树

这里我们主要来说树中的二叉树,二叉树要满足以下两个要求:

  • 如果一个二叉树没有根节点,则该树为空树
  • 如果不是空树,就要有根节点,左子树,右子树,并且左右子树都是二叉树

在JavaScript中,二叉树使用对象来表示,它主要有三部分:数据域左子树根节点的引用右子树根节点的引用

5.1 创建二叉树

function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}

// 创建节点
const node = new TreeNode(1) // 创建出来一个左右子树为null,值为1的节点


举报

相关推荐

0 条评论