数据结构与算法(1)------数据结构的入门
一.数据结构的相关概念
数据的概念:数据是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。
数据元素的概念:组成数据的基本单位。
数据项:组成数据元素的最小单位。
数据对象:性质相同的数据元素的集合。任何一个数据对象都是数据的子集。![](https://s4.51cto.com/images/blog/202103/06/07d0528f0fbf6f4535c83dc10f7fd5b0.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
例子: 如上图所示,这个图标里的所有名字就是一组数据,每个人名就是数据元素,组成人名的字就是数据项。张三和张五因为都姓张,可以看成是数据对象。这里注意,分类的标准是user定的,我同样可以根据王五和张五的名都是five而把他俩看作数据对象。
OK,上面的概念只是热身一下,下面的才是重头戏。千万不要走神哦!
**结构**:数据元素之间的联系。(这个简单,比方说张三和张五是父子,那父子关系就是他俩的**结构**)。
**数据结构**:带结构的数据元素的集合。(这个也简单(捂头,这是末日前的曙光,所以还是别放松警惕(苦笑)))。
二.数据结构的层次
首先我们要知道数据结构的层次包含啥:逻辑结构,存储结构(或称物理结构),和一系列操作与运算。
**逻辑结构**:
数据元素之间的逻辑关系,与数据的存储无关,独立于计算机,是一种抽象模型。(啥意思呢,就是说张三和张五按中国话来说是父与子,但是按英语说呢就是father and son,这俩描述外表不一样,但表达的**意思**是一样的,那种**意思**就是逻辑结构,够抽象吧,哈哈)
**物理结构(存储结构)**:
数据元素及其关系在计算机存储器中的结构(存储方式),是数据结构在计算机中的表示(就是上文说的父与子,father and son,不同的存储器就相当于不同的语言了)
**逻辑结构与存储结构的关系**:
存储结构是逻辑关系的映像(表示)与元素本身的映像(表示),逻辑结构是数据结构的抽象,存储结构是数据结构的实现,两者综合起来建立了数据元素之间的结构关系。
三.两大结构的划分
1.**逻辑结构**
(1)划分方法一
线性结构:有且仅有一个开始和一个终端结点(其实就是元素,也经常被叫为记录),并且所有结点都最多只有一个直接前趋和直接后继。(还是那幅图,李明就是起点,张五就是终点,张三前面就一个王五,后面也就一个曹四)
非线性结构:有多个前趋和直接后继。(比方说一个族谱,可能一个老人下面有许多个子女,也就是说有许多个后继;又或者一个人上面有两条线,一条指向母亲,一条指向父亲,这就是有多个前趋)
(2) 划分方法二
集合结构:除了同属一个集合,无其他关系。
线性结构:不再赘述。
树形结构:一对多。
图状结构(也称网状机构):多对多。
2.**存储结构**
(1)顺序存储结构:用一组连续的存储单元依次存储数据元素,之间的逻辑关系由元素的存储位置表示。比如C语言的数组。
(2)链接存储结构:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系,用指针来表示。![](https://s4.51cto.com/images/blog/202103/06/6edf0fa1d4cc523c8251f69684f04a67.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
(3)索引存储结构:通过建立索引表,比如电话的通讯录按拼音排序。
(4)散列存储结构:根据结点的关键字(唯一表示一个结点的那些数据项)直接计算地址。
四.数据类型与抽象数据类型
数据类型:是一组性质相同的值的集合以及定义于这个值集合上的一切操作的总称。比方说,C语言中的int类型与其 - * / %的运算。
抽象数据类型:数据对象 逻辑结构 相关操作
1.抽象结构的形式定义
抽象数据类型名{
数据对象:<定义> 数据关系:<定义>
基本操作:<定义>
}
抽象数据类型名
2.基本操作的定义
参数表
初始条件(满足该条件的参数才可参与运算)
操作结果
五.小结
赞 (0)