在 前言 中,我根据自己的实际情况已经阐述了我的实际工作中数据结构与算法是一个什么样的状态,以及为什么现在又来 霍霍 数据结构和算法。同学们也可以找找自己的初心,相信之后理解数据结构和算法会事半功倍。我博客中的看法和理解,大家就当听故事一样就好,毕竟 一千个人心中有一千个哈姆雷特,希望能给大家带来一点共鸣。
为啥标题是数据结构,而不是数据结构和算法呢?因为算法是基于数据结构而设计出来的,只有了解了常用的数据结构的特性,你才知道应该使用哪些数据结构来实现你的算法。引用下机器之心优雅的句子:数据结构是算法的基石。如果把算法比喻成美丽灵动的舞者,那么数据结构就是舞者脚下广阔而坚实的舞台。
什么是数据结构
数据结构:是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。设计数据结构的目的是高效的访问和修改数据。
根据定义,我尝试的理解了下:逻辑关系、存储关系、操作
- 逻辑关系:目前还不明白… 我觉得是数据的逻辑关系,先进先出用队列,后进先出用栈
- 存储关系:线性存储(栈、队列)、非线性存储(树、图)
- 操作:查找、插入、删除、更新、排序
中华文字博大精深,所以果断 Google了一下 what is data structure, 其中integralist.co.uk 的解释我觉得最接地气。
A data structure is a collection of data type ‘values’ which are stored and organized in such a way that it allows for efficient access and modification. In some cases a data structure can become the underlying implementation for a particular data type.
尝试着翻译一下: 由数据类型的值(整型、字符、浮点型等)构成的一组数据,以一种 高效访问、高效修改的方式 组织在一起并保存,这就是数据结构。有时候,数据结构可以作为底层的一种数据类型被使用。(有更好的翻译请讨论)
数据类型与数据结构的区别
- 外文参考:integralist.co.uk
A data type is an attribute of data which tells the compiler (or interpreter) how the programmer intends to use the data.
尝试着翻译一下:
数据类型的值告诉编译器或者解释器编程人员的想用数据干啥。
说穿了就是,编译器或者解释器能识别基础数据类型。其实就算是再花里胡哨的代码,都会被编译解释成简单的数据类型和语法变成二进制指令,再执行。不同的语言定义的数据类型有些不一样,毕竟语言的编译器编译规则也不一样。
// int 就是数据类型
int a = 110;
// 数组 是一种数据结构
int n[3] = {1,2,3};
常见的数据结构
- 数组(Array)
- 链表(Linked list)
- 队列(Queue)
- 栈(stack)
- 树 (Tree)
- 哈希表-散列表(Hash Table)
- 图(Graph)