简书 賈小強
转载请注明原创出处,谢谢!
什么是数据结构?可能很多人看到这个问题的第一反应是大学课本上那些诸如线性,树形,图形数据结构等,但这未免太僵硬,有些死板,这篇文章将更深入谈谈什么是数据结构
经典的数据结构
int,double,char,String,Array算最基本的语言基础,比如java,其他的高级数据结构都可以由它们构造出来,有的语言直接就提供了高级的数据结构比如Python
如下面一张图包括了一些经典的数据结构,它们中的一些程序员每天都在使用,可以说现今世界上的所有程序都是建立在这些基础元素之上的
Classic2.png复合的数据结构
面对复杂的世界,实际上数据结构千变万化,尤其是复合型数据结构,典型的如JSON,它本质上也是一种数据结构
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
灵活的数据结构
某一个变量可以可以代表各种含义,而组织在一起有某种规律的数据也可以代表某种现实的东西,在到底映射到什么真实问题上面程序员就是上帝
- 比如变量a=1,这个1可以代表各种东西
- 比如可以用数组来显示一个Bag,也可以用链表来实现一个Bag
- 比如下面的代码代表了一张图(每个数字代表一个顶点)
int[][] edges = { { 0, 5 }, { 4, 3 }, { 0, 1 }, { 9, 12 }, { 6, 4 }, { 5, 4 }, { 0, 2 }, { 11, 12 }, { 9, 10 },
{ 0, 6 }, { 7, 8 }, { 9, 11 }, { 5, 3 } };
而下面不同的数据组织形式代表的是同一张图
0 : 6 2 1 5
1 : 0
2 : 0
3 : 5 4
4 : 5 6 3
5 : 3 4 0
6 : 0 4
7 : 8
8 : 7
9 : 11 10 12
10 : 9
11 : 9 12
12 : 11 9
可以发现数据结构是相当灵活的,一方面根据程序员定义,可以出现针对问题的相应数据结构,另一方面同一个问题可能有多种不同形式的数据结构
结论
当写一个程序解决一个问题,首先找到一种甚至多种数据结构来映射问题,然后就可以写相关算法解决问题了,而数据结构和算法之间相辅相成。可以先选一种直观的,然后暴力解决,然后再考虑优化做相应的改进,而怎么改进哪种好,这些问题就可以通过学习研究经典算法来估算分析
学习经典不拘泥经典,在实际情况中勇于构建数据结构,编写针对的算法,然后结合经典寻找改进,在学习经典的过程中,之所以敬畏是因为那些经典并不是任何一个人发明的,而是全世界中很多最优秀的人经过很多年才发明出来,当然可以先了解不同经典数据结构或者算法的API,思路,优劣,然后再逐步深入了解如何实现
Happy learning !!
网友评论