[数据结构] - 入门
序
这一篇文章是数据结构入门第一篇文章,但是忘记写了,前几天写了数据结构 - 数组,其实应该还要写一篇 数据结构 - 入门,今天给补上。数据结构这个栏目会连载常用的数据结构 (代码为Java),欢迎大家给我留言讨论。
1.什么是数据结构
1.1 数据
数据是描述客观事物的数字,字符以及所有能输入到计算机中并且能为计算机接受的的各种符号集合统称为数据(data),数据是程序的处理对象,例如学生管理程序处理的是学生数据,包括姓名,年龄,学号等。随着科技的进步,数据格式越来越多,如视频和声音信号,经过采集转换后都能存储到计算机中形成可接受和处理的数据。
表示一个事物的一组数据称为 数据元素(data element)数据元素是数据的基本单位,构成数据元素的数据称为该元素的数据项(data item)
1.2 数据类型
类型是同一组值的集合,数据类型(dataType)是指一个类型和定义在该类型上的操作集合,数据类型定义了数据的性质。取值范围以及对数据所能进行的各种操作。
1.3 抽象数据类型
抽象数据类型(Abstract dataType)是指一个逻辑概念上的类型和该类型的操作集合。没有定义具体数据类型的元素称为抽象数据元素。数据类型和抽象数据类型定义基本相同,不同在于,数据类型指的是高级语言的基本类型(int,char,byte,float,double,long...),而抽象数据类型指的是在基本数据类型支持下用户新设计的数据类型,(表,栈,队列,数组,图,二叉树。。。)
1.4 数据结构
计算机处理的数据不是杂乱无章的,而是有着内在联系的,只有分析清楚他们的内在联系,对大量的,复杂的数据才能进行合理的组织和有效的处理。对一个数据元素集合来说。如果在数据之间存在一种或者多种特定的关系。则被称为数据结构(data structure) 因此 结构就是指数据元素之间存在的关系。数据结构和数据类型是2个不同的概念:
数据类型是研究每一类数据的共有特性,关注的是数据集合是怎样的。该数据集合上允许进行哪些操作
数据结构研究的是相互关联的数据间的关系,数据结构关注数据间的关系是怎样,(顺序关系,层级关系)
2. 数据的逻辑结构
数据逻辑结构是对数据元素之间逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系来表示,数据的逻辑结构经常被简化成数据结构
1.线性结构
除了第一个和最后一个元素外,每个元素只有一个前置元素和一个后置元素,第一个元素没前置元素,最后一个元素没有后置元素
2.树结构
除了根节点外,每个元素只有一个前置元素,可以有零个或者多个后置元素。根节点没有前置元素
3.图结构
每个数据元素可有零个或若干个前驱数据元素,零个或若干个后继数据元素
3. 数据的存储结构
任何需要计算机进行管理和处理的数据元素都必须按照某种方式存储在计算机上,数据元素在计算机中存储方式称为数据的的存储结构 ,也成为物理结构,数据的存储结构要能正常的表示出数据的逻辑关系,数据的逻辑结构是从数据的逻辑关系角度来观察,他与数据存储无关,是独立计算机的,而数据的存储结构是逻辑结构在计算机中的实现,它是依赖计算机的。
在顺序存储结构中,所有的存储空间都被数据占了,而链式存储结构中,每个节点除了要保存数据元素外,还要保存指向后继节点的链接信息,因此每个节点至少有2个部分组成 数据域--保存数据元素 链----指向后置节点
3.1 顺序结构
顺序存储结构是把数据存储在一块连续的地址空间中,逻辑上相邻的数据在物理上也相邻,数据间的逻辑关系表现在数据元素的存储关系上。比如说一般高级语言中的数组就是顺序结构。
3.2链式存储结构
指针是指向物理存储单元地址的变量,由数据元素域和指针域组成一个整体称为一个节点(node)链式存储结构是使用指针把相互之间关联的节点(直接前置节点和后置节点)连起来,逻辑上相邻的元素 物理上 不一定相连,数据间逻辑关系表现在节点的链接关系上。
3.3存储密度
如果所有的存储空间都用来存储数据,则这种存储结构是紧凑的,否则是非紧凑结构,显然,顺序存储结构是紧凑结构,链式存储结构是非紧凑的结构。
结构的存储密度定义为数据本身所占的存储量和整个结构所占的存储量之比。
紧凑结构存储密度为1,非紧凑结构存储密度小于1,存储密度越大,则存储空间的利用率越高,但是非紧凑的数据结构存储附加的信息会带来操作上的方便,所以如何舍去,在做项目的时候需要视情况而定。
比如说一个线性表,当不需要频繁插入删掉的时候我们可以用顺序存储结构,这时候存储密度大,占用空间少,而当插入和删除操作很频繁的时候,就需要采用链式存储结构,因为这个时候虽然占用空间多,存储密度小,但节省了操作时间,用空间换时间,
4. 数据的操作
对一组数据类型的数据进行某种处理称为数据的操作,对一种数据类型进行所有的操作称为数据的操作集合。
数据的操作是定义在数据的逻辑结构上的,每种逻辑结构都有一个操作集合,不同逻辑结构有不同操作,操作的具体实现和存储结构有关。
下面是常用的几个操作:
- 初始化。
- 判断是否空状态。
- 存取,指获得、设置指定元素值。
- 统计数据元素个数。
- 遍历(traverse),指按照某种次序访问一个数据结构中的所有元素,并且每个数据元素只被访问一次。遍历一种数据结构,将得到一个所有数据元素的线性序列。
- 插入(insert)、删除(remove)指定元素。
- 查找(search),指在数据结构中寻找满足给定条件的数据元素。
- 排序(sort),指对数据元素按照指定关键字值的大小递增(或递减)次序重新排列。
最后我们认识下一些常用的数据集合:
- 线性表表示可重复的无序集合,元素间具有前驱、后继次序关系;不同元素的关键字可重复,采用序号能够识别关键字重复的数据元素。
- 排序线性表表示可重复的排序集合,元素按关键字大小次序排序。
- 散列表表示不可重复的无序集合,元素关键字不重复,元素间没有次序,不排序。
- 二叉排序树表示不可重复的排序集合,元素关键字不重复,元素按关键字升/降序排序。