公众号:尤而小屋
作者:Peter
编辑:Peter
大家好,我是Peter~
今天向大家介绍一本书:《我的第一本算法书》,一位日本作者撰写的。看过一些日本的技术书籍,《图解HTTP》、《图解机器学习》,《图解硬件》等,好像他们有个特点:喜欢用图形的表现方式来讲解一个知识点。
极好不过了,小编是比较容易接受的。后续会更新一些自己的笔记和相关延伸的知识点,更多细节请阅读原书籍。
什么是算法
来自书中的一段简短定义:
算法就是计算或者解决问题的步骤
什么是数据结构
数据存储在计算机的内存中,在这其中决定了数据的顺序和位置关系的便是“数据结构”,第一章中介绍了8种数据结构,本文先介绍其中的4种常见数据结构:
- 链表
- 数组
- 栈
- 队列
数据结构1:链表
- 链表中的数据呈线性排列
- 链表中每个数据都有一个指针,它指向下一个数据的内存地址
- 数据是分散的存储在内存中的
- 数据和添加和删除较为方便;访问耗时间
访问链表中的数据:从头开始访问,顺着指针的方向向下访问
链表中添加元素的过程:只需要改变添加前后的指针指向即可
其他链表形式:
- 循环链表(环形链表):没有头尾的概念
- 双向链表:有两个指针,分别指向前后的数据;缺点:(1)指针数量的增加会导致存储空间需求增加;(2)添加和删除数据需要更多的时间
数据结构2:数组
- 数据在数组中呈线性排列
- 数据是按照顺序存储在内存的连续空间中(内存地址通过数组下标算出)
- 访问简单,添加和删除元素较为复杂
- 访问:通过数组下标随机访问
数组中的随机访问:
删除数组中的元素:
链表和数组的比较:
数据结构3:栈
栈也是一种线性排列的数据结构。特点:只能访问最新添加的元素。
什么是入栈和出栈?(重要概念)遵循的规则:后进先出LIFO(Last In First Out)
在栈中,添加和删除数据的操作只能在一端进行,也只能访问栈顶的数据。想要访问中间的数据,就必须依次释放栈顶的数据,将目标数据取出
数据结构4:队列
- 队列也是呈线性排列的数据
- 队列中添加和删除数据可以在两端进行
入队操作:
出队操作:从最下面开始(最早入队的数据)
队列的这种最先进去的数据最先被取出来的规则,称之为“先进先出”,First In First Out(FIFO)