当前位置: 首页 > article >正文

一. 初识数据结构和算法

数据结构与算法是一个达到高级程序员的敲门砖。当你脱离了语言的应用层面,去思考他的设计层面时,你就依旧已经开始初识数据结构与算法了

数据结构

什么是数据结构
对于数据结构的定义官方并没有统一的解释,在各个百科以及算法的书中,对于数据结构的定义有着不同的话术描述
在这里插入图片描述
为什么需要数据结构
假设这样三个场景:

  1. 在你的家里有一个书架
    这种情况的时候,我们对于书籍的摆放和整理也许并不太关系,只需简单放入书架即可,在我们需要的时候一扫书架就能找到我们想要的书籍。
  2. 你有一个专门存放书籍的书屋
    这种情况我们就不能像第一种场景一样随意摆放书籍了。我们可以按照书的名字按照字母顺序进行摆放,当我们需要找到某本书的时候,我们可以根据书名字母进行快速查找。
  3. 你有一个海量书籍的图书馆
    这种情况下,如果简单按照字母排序也会难以查找了。相同字母名称的书籍可能会有很多,这个时候我们可以根据书的类型进行分类摆放,在针对每个类型进行书名字母的摆放。

在上面场景中,每本书都可以看作一个数据点,不同的摆放形式查找起来会有不同效率。每种摆放形式就可以看作一种简单的数据结构。而查找的方法与过程就可以看着算法的实现。

常见的算法
队列(Queue),
树(Tree),
堆(Heap),
数组(Array),
栈(Stack),
链表(Linked List),
图(Graph),
散列表(Hash)

不同的数据结构对于不同的操作,性能上也大不相同。
有的查找很快,有的增加删除很快,有的不允许元素重复,有的允许元素重复。

记住:没有最好的数据结构,只有最合适的数据结构!

算法

什么是算法

算法必须具备以下特点:

  1. 明确定义:算法应该有确定的输入和输出,以及明确的计算步骤,使其在任何情况下都能产生正确的结果。
  2. 有限性:算法必须在有限的时间内完成运行,并且不能陷入无限循环。
  3. 可行性:算法应该是可行的,也就是说,它应该能够在现有的计算机系统上实际实现和执行。
  4. 通用性:算法应该是通用的,可适用于解决一类或多类问题,而不仅仅是特定的输入实例。

通俗来说,算法就是解决问题的步骤集合。

可能对于javascript来说,我们似乎很少接触到数据结构与算法,因为更多的时候我们都是api的使用者,并不在乎底层的实现。
例如我们经常在javascript里使用的数组,其实他并非真正的数组结构,而是模仿哈希列表出的一种数据结构而已,不了解数据结构你就永远不知道真相

了解真相才能获得真正的自由!
本系列很多内容会源自B站codewhy老师的主页视频


http://www.kler.cn/news/163158.html

相关文章:

  • StoneDB-8.0-V2.2.0 企业版正式发布!性能优化,稳定性提升,持续公测中!
  • 十七、FreeRTOS之FreeRTOS事件标志组
  • 麒麟系统进入救援模式或者是crtl D界面排查方法
  • Linux下通过find找文件---通过修改时间查找(-mtime)
  • 网络工程师【目录】
  • Python 潮流周刊#29:Rust 会比 Python 慢?!
  • 初识人工智能,一文读懂人工智能概论(1)
  • win10 笔记本卡顿优化
  • 二叉树的遍历之迭代遍历
  • 文献计量学方法与应用、主题确定、检索与数据采集、VOSviewer可视化绘图、Citespace可视化绘图、R语言文献计量学绘图分析
  • Python嗅探和解析网络数据包
  • 线性回归模型标准公式
  • 解决MySQL字段名与关键字冲突
  • 身份统一管理创新与优化 ——华为云OneAccess应用身份管理服务的2023年
  • cookie总结
  • 什么是自动化测试?什么情况下使用?
  • 【1day】泛微e-office OA系统xml.php 文件 SORT_ID 参数 SQL 注入漏洞学习
  • 计算机基础知识65
  • Linux文件系统与基础IO
  • 【hugging face】bitsandbytes中8 bit量化的理解
  • 在oracle的scn详细说明
  • Kotlin 中密封类、枚举类与密封接口的对比分析
  • Linux——基本指令(一)
  • Nginx按指定格式记录访问日志
  • 联邦多任务蒸馏助力多接入边缘计算下的个性化服务 | TPDS 2023
  • 【LeetCode】28. 找出字符串中第一个匹配项的下标 【字符串单模匹配:KMP算法】
  • Linux设备分类与设备号
  • Django讲课笔记01:初探Django框架
  • 面试宝典之自我介绍
  • 【嵌入式开发 Linux 常用命令系列 4.2 -- .repo 各个目录介绍】