目录
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
总结:学习数据结构主要学习数据元素集合的逻辑结构、物理结构以及对数据元素集合的运算操作。
数据结构三要素:
1. 逻辑结构
2. 物理结构(计算机:物理:真实存在)
3. 运算操作
1、基本概念
数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
数据元素:数据元素是组成数据且有一定意义的基本单位,在计算机中通常作为整体处理。又被称为节点。(人)
节点这个词一定要熟悉,在链表中会大量出现。
数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。()
数据对象:是性质相同的数据元素/节点的集合,是数据的子集。
代码中用结构体类型定义的变量叫数据元素,用该数据类型定义的数组叫数据对象,每一个字段叫数据项。
数据元素(节点):从第二行开始每一行就是一个数据元素。(节点)
数据项:对于某数据元素来说,它的编号、书名、作者以及出版社等为数据项。
数据对象:该表格除去第一行结构体定义外,剩下的整体就相当于一个结构体数组。
2、逻辑结构
数据对象中 数据元素/节点 之间的相互关系。
逻辑结构通常分为以下几种:
2.1、集合结构
数据元素/节点 除了同属于一个集合外,他们之间没有其他关系。
同班同学
2.2、线性结构
数据元素/节点 是一对一的关系。
排队
2.3、树形结构(层次结构)
数据元素/节点 之间存在一种一对多的关系。
族谱(单传例外)
2.4、图形结构(网状结构)
人际关系网
3、物理结构
3.1、顺序存储结构
把 数据元素/节点 存放在地址连续的存储单元里,这样的存储成为顺序存储结构。(数组、列表)
特点:
1、内存连续
2、相对于链式存储结构每个元素占用的空间少。
3.2、链式存储结构
把 数据元素/节点 存放在任意的内存单元里。数据元素/节点 之间的逻辑关系通过附设的指针域来表示,由此得到的存储表示成为链式存储结构。
特点:
1、内存不连续
2、通过指针连接
传统的数据类型:int char short float ->数据项
自己构造的数据类型:struct linklist
问题:环境-》温度、湿度、PM2.5、雾霾等
typedef char datatype
struct linklist
{
datatype data;
struct linklist *next;
}
struct linklist A = {996,NULL};
struct linklist B;
B.next = NULL;
B.data = 520;
A.next = &B;
996 520
# 定义一个类
class Node:
def __init__(self, data):
self.data = data
self.next = None
# 实例化对象
A = Node('A')
B = Node('B')
C = Node('C')
D = Node('D')
# 节点之间建立联系
A.next = B
B.next = C
C.next = D
# 测试链表打印结果
current = A
while current:
print(current.data)
current = current.next
3.3、索引存储结构
在存储数据的同时,建立一个附加的索引表,即索引存储结构 = 数据文件 + 索引表。
电话号码查询问题:为提高查询速度,在存储用户数据文件的同时建立一张姓氏索引表,如下所示:
查找一个人的电话就可以先查索引表,再查相应的数据文件,加快了查询速度。
特点:
检索速度快。
多了一张索引表,故占用内存多。
删除数据文件时要及时更改索引表。
3.4、散列存储结构
过构造相应散列函数,由散列函数的值来确定 数据元素/节点 存放的地址。
特点:
存的时候按照对应关系存。
取的时候按照对应关系取。
蜂巢、外卖
逻辑结构是面向问题的,物理结构是面向计算机的。其基本目标就是将数据及其逻辑关系存储到计算机的内存中。
4、运算操作
增、删、改、查
5、回顾