美文网首页
数据结构与算法

数据结构与算法

作者: niko_f697 | 来源:发表于2019-10-25 13:31 被阅读0次

概述

程序 = 数据结构 + 算法,数据结构和算法与语言无关,数据结构是管理和存储数据的方法,算法是解决问题的方法。

常用数据结构

  • 数组
  • 队列
  • 链表
  • 散列表(hash)

1.数组

数组是一种很灵活的数据结构,可以从数组头部shift、unshift,也可以从数组尾部push、pop,从数组的任意位置插入元素array[index] = a,可以删除任意位置的元素,array.splice(index, 1) 并且操作过程中,数组会自动维护元素的索引以及自身的长度。比如下图,删除元素2,那么2后面的元素3、4、5会自动更新索引,数组的长度也会自动更新为4.(这也是为什么数组头部删除元素(unshift)比数组尾部删除元素(pop)性能要差不少的原因。unshift操作的开销更大)


数组.png

2.栈

栈相对于数组而言就是一种限制性比较强的数据结构。只能从栈顶入栈和出栈,并且要遵循后进先出(LIFO)的原则,如下图无法直接删除元素3,必须先删除元素4才能删除元素3.因为4比3先入栈,根据LIFO原则,4必须必3出栈。


栈.png

下面我们使用数组来实现一个简单的栈模型

class Stack {
  constructor () {
    this._items = []
  }
  // 入栈
  push (item) {
    this._items.push(item)
  }
  // 出栈
  pop () {
    return this._items.pop()
  }
  // 取栈顶元素
  peek () {
    return this._items[this._items.length - 1]
  }
  // 判断是否为空
  isEmpty () {
    return this._items.length === 0
  }
  // 得到栈的大小
  getSize () {
    return this._items.length
  }
}

然后我们利用这个栈模型做一个小小的实践,把10进制的数据转成2进制。原理就是除2取余把结果拼到一起然后倒序。比如把57转为2进制
57 / 2 = 28 余 1
28 / 2 = 19 余 0
19 / 2 = 9 余 1
9 / 2 = 4 余 1
4 / 2 = 2 余 0
2 / 2 = 1 余 0
1 / 2 = 0 余 1
结果拼起来1011001,倒序之后拿到最终结果为1001101,下面使用代码来实现

function decimalToBinary (decimal){
  let stack = new Stack()
  let str = ''
  while (decimal > 0) {
    let redecimal = decimal % 2
    stack.push(redecimal)
    decimal = Math.floor(decimal / 2)
  }
  while (!stack.isEmpty()) {
     str += stack.pop()
  }
  return str
}
// 调用
decimalToBinary(57) // 1001101

3.队列

队列跟栈的不同在于队列是元素从队尾入栈,从队首出栈。先入先出(FIFO)如下图


队列.png
                                   **未完待续**

相关文章

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 数据结构与算法 - 树形结构

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构 目录 ...

  • 最新完整数据结构与算法

    最新完整数据结构与算法 P11_课程介绍 P22_数据结构与算法概述_数据结构 P33_数据结构与算法概述_算法 ...

  • 数据结构与算法

    数据结构与算法之美 数据结构与算法之美1--如何学数据结构与算法之美2--复杂度分析(上)数据结构与算法之美3--...

  • 算法与数据结构(1),List

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 习惯了,深夜更新博客...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 算法与数据结构(3),并发结构

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 本来已经合上电脑了,...

  • 算法与数据结构(2),Map

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 睡了不到六个小时,被...

  • 数据结构与算法

    参考链接:算法 数据结构与算法 iOS数据结构 和 算法 上 算法 1、数据结构: 集合结构: 线性结构: 树形结...

网友评论

      本文标题:数据结构与算法

      本文链接:https://www.haomeiwen.com/subject/wpksvctx.html