学习数据结构主要源于以下原因:
在工作中我是用meteor在做项目,前后台都要写,服务端是用的node。之前有和同事做过一个邮箱功能,性能测试时并发量一高就发送失败。我认为处理并发量的问题应该需要数据结构与算法和设计模式这三点来优化。这是往大了说,细说就是工作中,功能每次都是加班超快赶,在多人合作下,如果代码结构与逻辑混乱,后期维护困难,功能不好扩展。由于我们组都是前端人员接下这个项目,对于数据库的设计经验缺乏,才一再出现性能问题,所以我认为学习数据结构与算法尤为重要。本人也是正在学习中,有问题欢迎大家指正。
第一篇笔记先说说数据结构的基础:
一·术语:
1.数据:描述客观事物的符号,是计算机中可以操作的对象,能被计算机识别,并输入给计算机处理的符号集号。个人理解就好像变量一样。
2.数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。比如人类的数据元素是人。重点在于整体
3.数据项:一个数据元素可以由若干个数据项组成,重点在于单个,是不可分割的最小单位。比如:一个person集合(数据元素)由'name','age'(数据项)来组成。
4.数据结构:不同数据元素之间不是独立的,相互之间存在一种或多种特定关系的数据元素的集合。
二.数据的逻辑结构与物理结构:
1.逻辑结构分为集合结构,线性结构,树形结构,图形结构
(1)集合结构:数据元素除了同属一个集合外,没有其他关系,元素之间是'平等'关系。
集合结构示例图
(2)线性结构:线性结构中的元素存在一对一的关系
线性结构示例图
(3) 树形结构:树形结构中的数据存在一对多的层次关系,我们常用的二叉树结构就是树形结构中的一种
树形结构示例图
(4)图形结构:图形结构的数据元素是多对多的关系
图形结构示例图
注:一般在设计一个数据结构时,我们习惯将数据元素看做一个结点,用圆表示。元素之间的逻辑关系用连线表示,如果有方向的,可以用带箭头的连线表示。
2.物理结构:是指数据的逻辑结构在计算机中的存储形式。这里主要指内存,像硬盘,软盘主要用文件结结来描述。
(1)顺序存储:把数据元素存在地址连续的存储单元里
顺序存储结构示例图
(2)链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据在哪没关系,只要指针存放相应的地址知道下一个就到你了就行。
链式存储结构示例图
三.抽象数据类型
1.数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。比如在javascript中有number,string,boolean,null,undefined,object
2.抽象数据类型:是指一个数学模型及定义在该模型上的一组操作。比如在数学的坐标轴中,有(x,y)也有(x,y,z),那么我们可以定义一个轴象数据类型point。
总结:本篇主要介绍数据结构中的一些术语,虽然都是些概念,不是很好理解,但在之后的学习中结合一些练习与应用,会帮助我们理解。下一篇将介绍一下算法的基础知识,数据结构的学习离不开算法。两者相结合才能体现彼此的优点,发挥正真的作用。我的学习主要参考《大话数据结构》《算法》《数据结构》,大家可以去了解。