你也许会觉得数据结构和算法,是脱离实际工作的知识!认为除了面试,这辈子也用不着。但事实真的是这样吗?
数据结构是一种抽象的封装。
说简单点就是,把一堆基本的数据,按照某种顺序给揉成一坨。
比如做一道菜需要放各种调料,如盐、味精,还有肉等,把它们混在一起就做成了一道菜。
如果我们抽象来展示:
struct 水煮肉片 {
牛肉 = []
葱 = []
姜 = []
盐 = []
花椒 = []
植物油 = []
}
我们完全可以将上述这个结构体当成一个自定义的数据结构,将很多种不同的东西融合在一起;而计算机中的数据结构,则是把一些基本的数据类型,融合成一些复杂的数据结构,如map、队列。
哪怕只写过几行代码的人都会发现,编程基本上就是在跟数据打交道。计算机程序总是在接收数据、操作数据或返回数据。不管是求两数之和的小程序,还是管理公司的企业级软件,都运行在数据之上。
数据结构不只是用于组织数据,它还极大地影响着代码的运行速度。因为数据结构不同,程序的运行速度可能相差多个数量级。如果你写的程序要处理大量的数据,或者要让数千人同时使用,那么你采用何种数据结构,将决定它是能够运行,还是会因为不堪重负而崩溃。
一旦对各种数据结构有了深刻的理解,并明白它们对程序性能方面的影响,你就能写出快速而优雅的代码,从而使软件运行得快速且流畅。当然,你的编程技能也会更上一层楼。
Data Structures Easy to Advanced Course 中:什么是数据结构?
数组是最简单、也是使用最广泛的数据结构。栈、队列等其他数据结构均可由数组演变而来。下图是一个包含元素(1,2,3 和 4)的简单数组,数组长度为4。
每个数据元素都关联一个正数值,我们称之为索引,它表明数组中每个元素所在的位置。大部分语言将初始索引定义为零。
以下是数组的两种类型:
- 一维数组(如上所示)
- 多维数组(数组的数组)
数组的基本操作
- Insert——在指定索引位置插入一个元素
- Get——返回指定索引位置的元素
- Delete——删除指定索引位置的元素
- Size——得到数组所有元素的数量
面试中关于数组的常见问题
- 寻找数组中第二小的元素
- 找到数组中第一个不重复出现的整数
- 合并两个有序数组
- 重新排列数组中的正值和负值
现在,我们给出一系列的关于数组的学习视频:
接下来,我们完成其他常见数据结构的学习:
数据结构 | 难度 |
---|---|
链表 | |
双向链表 | |
队列 | |
栈 | |
哈希表 | |
堆 | |
优先队列 | |
字典树 | |
树 | |
二叉查找树 | |
AVL 树 | |
红黑树 | |
树状数组 | |
图 | |
并查集 | |
布隆过滤器 |