🧑‍💻JavaScript数据结构与算法-HowieCong

务必要熟悉JavaScript使用再来学!

一、数组增删操作

  • 在了解栈和队列前,明确数组中的增删操作具有什么样的特性、对应的方法有哪些:

    • 灵活增删的数组

      • 数组增加元素的三种方法:

        1. unshift方法,添加元素到数组的头部
        const arr = [1,2]
        arr.unshift(0) // [0,1,2]
        1. push方法,添加元素到数组的尾部
        const arr = [1,2]
        arr.push(3) // [1,2,3]
        1. splice方法,添加元素到数组的任何位置,splice第一个入参是起始的索引值,第二个入参表示起始索引开始需要删除的元素个数,第三个位置开始的入参,代表需要添加到数组里的元素的值,下面的例子,指向arr[1]开始,删掉0个元素,在索引为1的地方新增了值为3的元素,把原来的arr[1]挤到后面去。
        const arr = [1,2]
        arr.splice(1,0,3) // [1,3,2]

        image.png

      • 数组中删除元素的三种方法:

        1. shift方法:删除数组头部的元素
        const arr = [1,2,3]
        arr.shift() // [2,3]
        1. pop方法:删除数组尾部的元素
        const arr = [1,2,3]
        arr.pop()// [2,3]
        1. splice方法:删除数组任意位置的元素,如上文

二、栈(Stack)

1. 定义

  • 只有pop和push完成增删的“数组”
  • 栈是一种后进先出(LIFO,Last In First Out)的数据结构
  • 类似小卖部的冰激凌柜,先放进去的雪糕,压在最下面,我也很难拿到底部放的雪糕,一般看到表面有啥喜欢吃的雪糕就拿了,老板越晚放进去的雪糕,就越先拿出来;越是先放进去的,越是最后被取出来

2. 特征

  • 只允许从尾部添加元素
  • 只允许从尾部取出元素
  • 对应数组的方法,就是pop和push,就可以认为在JavaScript里面,栈就是限制只能使用push来添加元素,同时只能用pop来删除元素的一种特殊数组

3. 栈的常用操作

  • 老板把雪糕放进冰激凌柜
// 初始化,栈为空
const stack = []
// 入栈过程(雪糕入冰激凌柜)
stack.push('巧乐兹')
stack.push('可爱多')
stack.push('奶转')
  • 老板卖雪糕
while(stack.length){
    // 访问栈的顶元素(不出栈)
    const top = stack[stack.length-1]
    console.log('现在取出的冰激凌是',top)
    // 将栈顶元素出栈
    stack.pop()
}

// 栈空
stack // []
  • 输出结果

image.png

三、队列(Queue)

1. 定义

  • 只用push和shift完成增删的“数组”
  • 队列是一种先进先出(FIFO,Fist In First Out)的数据结构
  • 类似我们去麦当劳点餐,先点餐的人先出餐,后点餐的人后出餐

2. 特征

  • 只允许从尾部添加元素
  • 只允许从头部移除元素
  • 对于数组来说,只涉及到了数组的push和shift方法;在栈元素出栈时,我们关心的是数组最后一个元素;队列元素出队,我们关心的是队伍头元素,即数组的第一个元素

3. 队列的常用操作

  • 在App点“穷鬼套餐”
// 初始化,队列为空
const queue = []
// 添加元素(点穷鬼套餐的人)
queue.push('HowieCong')
queue.push('吴彦祖')
queue.push('乔一鱼')
  • HowieCong取“穷鬼套餐”
while(queue.length){
    // 访问队列头部元素(不出队)
    const top = queue[0]
    console.log(top,'取餐')
    // 将队头元素出队
    queue.shift()
}

// 队空
queue // []
  • 输出结果

image.png

❓其他

1. 疑问与作者HowieCong声明

  • 如有疑问、出错的知识,请及时点击下方链接添加作者HowieCong的其中一种联系方式或发送邮件到下方邮箱告知作者HowieCong
  • 若想让作者更新哪些方面的技术文章或补充更多知识在这篇文章,请及时点击下方链接添加里面其中一种联系方式或发送邮件到下方邮箱告知作者HowieCong
  • 声明:作者HowieCong目前只是一个前端开发小菜鸟,写文章的初衷只是全面提高自身能力和见识;如果对此篇文章喜欢或能帮助到你,麻烦给作者HowieCong点个关注/给这篇文章点个赞/收藏这篇文章/在评论区留下你的想法吧,欢迎大家来交流!

2. 作者社交媒体/邮箱-HowieCong


HowieCong
2 声望0 粉丝

大前端开发 => AI 小菜鸡!虚心好学!欢迎一起交流!每篇文章尾部有HowieCong联系方式!(Wechat|Instagram|Feishu|Juejin|Segmentfault...)