浅谈数据结构

什么是数据结构?可能很多人看到这个问题的第一反应是大学课本上那些诸如线性,树形,图形数据结构等,但这未免太僵硬,有些死板,这篇文章将更深入谈谈什么是数据结构

经典的数据结构

int,double,char,String,Array算最基本的语言基础,比如java,其他的高级数据结构都可以由它们构造出来,有的语言直接就提供了高级的数据结构比如Python

如下面一张图包括了一些经典的数据结构,它们中的一些程序员每天都在使用,可以说现今世界上的所有程序都是建立在这些基础元素之上的

浅谈数据结构_第1张图片

复合的数据结构

面对复杂的世界,实际上数据结构千变万化,尤其是复合型数据结构,典型的如JSON,它本质上也是一种数据结构

{
"employees": [
    { "firstName":"Bill" , "lastName":"Gates" },
    { "firstName":"George" , "lastName":"Bush" },
    { "firstName":"Thomas" , "lastName":"Carter" }
 ]
}

灵活的数据结构

某一个变量可以可以代表各种含义,而组织在一起有某种规律的数据也可以代表某种现实的东西,在到底映射到什么真实问题上面程序员就是上帝

  1. 比如变量a=1,这个1可以代表各种东西
  2. 比如可以用数组来显示一个Bag,也可以用链表来实现一个Bag
  3. 比如下面的代码代表了一张图(每个数字代表一个顶点)
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 !!

你可能感兴趣的:(数据结构,链表)