数据结构的基本概念

简介: 数据结构的基本概念

数据:

数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合(简单的说就是二级制0和1),数据是计算机程序加工的原料。


数据元素,数据项:

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。


举例:

对于下面的这个账号来说,这个账号就是一个数据元素,而其中包含的昵称,简历等信息就是不同的数据项。

而对于生日这个数据项,它是由年月日组成的,因此可被称为组合项。

数据结构,数据对象:

数据结构是相互之间存在一种或多种特定关系元素的集合,数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

下面我们用图示解释:


数据结构的三要素:逻辑结构,物理结构(存储结构),数据的运算

逻辑结构:

集合,线性结构,树形结构,图状结构(网状结构)

集合:各个元素属于同一个集合,但没有任何其他关系。

比如:一盘水果拼盘里的不同种水果,他们只是存在于同一个盘子,但没有其他关系。

线性结构:数据元素之间是一对一的关系,除了第一个元素,剩下的所有元素都有唯一的前驱,除了最后一个元素,剩下的所有元素都有唯一的后继。


比如:一个烤串上的各种食物,他们之间的关系就是线性结构。

树形结构:数据元素之间是一对多的关系

比如,一棵树上的不同分支之间就是树形结构。

图状结构:数据元素之间是多对多的关系

例如:你的部分微信好友之间可能就存在这样的图状结构关系。

数据的存储结构:顺序存储,链式存储,索引存储,散列存储

以最简单的逻辑结构中的线性结构进行举例:


顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

如下图所示:


链式存储:逻辑上相邻的元素在物理位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。

如下图所示:

用指针表示下一个数据元素的存储地址。


索引存储:在存储元素信息的同时,还建立附加的索引表,索引表中的每项称为索引项,索引项的一般形式是(关键字,地址)

如下图所示:

散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希存储。
总结:

1:如果顺序存储,则各个数据元素在物理上必须是连续的,若采用非顺序存储,则各个数据元素在物理上可以是离散的。

如下所示,在售票大厅,人们排队由于要按照一定的顺序,这就相当于顺序存储。

如下所示,在等餐,人们可以根据实际情况选择空位坐下等餐,这就相当于非顺序存储。


2:数据的存储结构会影响存储空间分配的方便程度。

假设现在来了一个VIP,那么它要优先进行购票或者买饭。

对于售票厅这种(顺序存储),我们需要将后面的人全部后移一位,这显然很麻烦,但是对于餐厅等餐这种(非顺序存储),我们只需要给它更小的号码牌即可。

3:数据的存储结构会影响对数据运算的速度。

假设现在我们想要寻找号码为11的人。

对于售票厅这种(顺序存储),我们只需要数到第11个人即可,但是对于餐厅等餐这种(非顺序存储),我们需要一个个找或者一个个问,这显然没有顺序存储方便。

数据的运算:施加在数据上的运算包括运算的定义和实现。

运算的定义是针对逻辑结构的,指出运算的功能。

举例:逻辑结构—线性结构(队列)

如下图所示,为银行服务大厅,每个人手中持有的号码牌组成一个队列,当各个窗口叫号之后,就会有一个号码的人离开这个队列,去办理业务,而此后,也会有持新号码的人加入这个队列。

运算的实现是针对存储结构的,指出运算的具体操作步骤。

假设还是上面这个实例,这些数据元素的存储方式是顺序存储,现在持有新号码的人要入队,那么他需要找到该队列的最后一个人。

但如果是下面这种非顺序存储,持有新号码的人要入队,它找任意的位置即可。

数据类型,抽象数据类型:

数据类型是一个值的集合和定义在此集合上的一组操作的总称。

1:原子类型:该值不可再分的数据类型。

举例:

2:结构类型:其值可以再分解为若干成分(分量)的数据类型。

举例:

定义一个具体的结构体类型,表示排队顾客信息,根据具体业务需求来确定值的范围,可进行的操作。

struct Customer{
    int num;//号码数
    int people;//人数
    ...//其他的信息
}
//值的范围:num(1-9999),people(1-12)
//可进行的操作:如“拼桌”/"打折”等等。

抽象数据类型(abstract data type ):是抽象数据组织及相关的操作。

也就是说,用数学化的语言定义数据的逻辑结构,定义运算,与具体的实现没有关系,因此,它并不关心数据的存储结构。

分析某一种数据结构的步骤:

1:定义逻辑结构(数据元素之间的关系)

2:定义数据运算(针对现实需求,分析应该对这种逻辑结构进行什么样的运算)

3:确定某种存储结构,实现数据结构,并实现一些对数据结构的基本运算。

相关文章
|
3月前
|
存储 算法 Linux
数据结构 | 二叉树的概念及前中后序遍历(一)
数据结构 | 二叉树的概念及前中后序遍历(一)
|
3月前
|
存储 算法 C语言
数据结构——二叉树的基本概念及顺序存储(堆)
数据结构——二叉树的基本概念及顺序存储(堆)
45 0
|
30天前
|
存储 算法 搜索推荐
数据结构-概念版(七)
数据结构-概念版
49 0
|
30天前
|
存储 算法 Serverless
数据结构-概念版(六)
数据结构-概念版
38 0
|
30天前
|
存储 机器学习/深度学习 算法
数据结构-概念版(二)
数据结构-概念版
32 0
|
存储
【树和二叉树】数据结构二叉树和树的概念认识
【树和二叉树】数据结构二叉树和树的概念认识
|
1月前
|
搜索推荐 算法 Shell
【数据结构】手撕排序(排序的概念及意义、直接插入和希尔排序的实现及分析)
【数据结构】手撕排序(排序的概念及意义、直接插入和希尔排序的实现及分析)
|
2月前
|
存储 机器学习/深度学习 算法
【数据结构入门精讲 | 第二篇】考研408、企业面试基础概念习题
【数据结构入门精讲 | 第二篇】考研408、企业面试基础概念习题
51 0
|
3月前
|
存储 缓存 索引
数据结构——顺序表的概念和基本操作(超全超详细)
数据结构——顺序表的概念和基本操作(超全超详细)
|
3月前
|
Java
数据结构 AVL树概念以及实现插入的功能(含Java代码实现)
数据结构 AVL树概念以及实现插入的功能(含Java代码实现)
54 0