1.1数据结构基本概念
- 数据(Data):
- 数据是人们利用文字符号、数字符号以及其他规定的符号对现实世界的事物及其活动所做的抽象描述;
- 数据的分类:数值性数据、非数值性数据、输入数据、输出数据、存储数据;
- 计算机软件 = 程序+文档+数据;
- 数据是指计算机程序执行所用的数据 。
- 数据元素(Data Element):
- 数据元素是数据j基本单位,在程序中通常作为一个整体来进行考虑和处理;
- 一个数据元素可由若干个数据项(Data Item)组成;
- 数据项是数据的不可分割的最小单位,数据项是对客观事物某一方面特性的数据描述。
- 数据对象(Data Object):
- 数据对象是性质相同数据元素的集合,是数据的一个子集。如字符集合C={‘A’,‘B’,‘C’…};
- 数据结构(Data Structure):
- 是指相互之间具有一定联系的数据元素的集合;
- 元素之间的相互联系称逻辑结构。
- 逻辑结构有四种基本类型
- 集合:结构中的数据元素除了“同属于一个集合”外,没用其它关系;
- 线性结构:数据中的数据元素之间存在一对一的关系;
- 树型结构:结构中的数据元素之间存在一对多的关系;
- 图状结构或网状结构:结构中的数据元素之间存在多对多的关系。
如下图(四类基本结构图)所示:
(ps:该图来自小甲鱼数据结构与算法学习视频,值得推荐!如有兴趣可以前往观看学习)
1.2数据结构的存储方式
数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系表示。
元素之间的的关系在计算机中有两种不同的表示方法:顺序表示和非顺序表示➡顺序存储结构和链式存储结构
- 顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构。
(ps:便于理解来说,顺序表可以理解为排队的方式,按照一个接着一个的方式一次往后排)
- 链式存储结构:在每一个数据元素中增加一个存放另一个地址的指针(pointer),用该指针来表示数据元素之间的逻辑结构。
(ps:便于理解来说,链表可以理解为吃饭时叫号排队,人们领取了自己的号码牌后可以在一旁等候也可以去逛一逛再过来,人们只需要听到叫自己前一号的时候再马上赶过来等候下一号即可,而号码牌相对于指针的作用)
- 顺序结构:数据元素存放的地址是连续的;
- 链式结构:数据元素存放的地址是否连续没有要求。
数据的逻辑结构和物理结构是密不可分的两个方面,算法的设计取决于所选定的逻辑结构,算法的实现依赖于所采用的存储结构。在C语言中,用一维数组表示顺序存储结构;用结构体类型表示链式存储结构。
1.3数据结构的三个组成部分:
- 逻辑结构:数据元素之间的逻辑关系的描述 D_S = (D, S);
- 存储结构:数据元素在计算机中的存储及其逻辑关系的表现称为数据的存储结构或物理结构。
- 数据操作:对数据要进行的运算。
逻辑结构所采用的存储结构如下图所示:
数据的逻辑结构图如下图所示:
1.4抽象数据类型
抽象数据类型(Abstract Data Type,简称ADT):
是指一个数学模型以及定义在该模型上的一组操作,ADT定义是一组逻辑特性描述,ADT形式化定义是三元组:ADT = (D, S, P);
D是数据对象,S是D上的关系集,P是对D的基本操作集。
1.5数据结构的运算
- 建立(Create)一个数据结构;
- 消除(Destroy)一个数据结构;
- 从一个数据结构中删除(Delete)一个数据元素;
- 把一个数据元素插入(Insert)到一个数据结构中;
- 对一个数据结构进行访问(Access)(遍历);
- 对一个数据结构(中的数据元素)进行修改;
- 对一个数据结构进行排序(Sort);
- ·对一个数据结构进行查找(Search)。