数据结构 —— 研究数据与数据之间的关系
怎么学习?
1.数据结构 --- 特点 --- 抽象
--- 数据的操作
--- (指针)
代码实现?
2.学习
建议 画图 (让抽象关系可以清晰明了)
3.c语言:
1.语法
2.基本编程思维
3.处理单个或几个变量的数据
处理批量数据
(我们通常用数组+结构体)
4.数据规模更大
研究
数据与数据之间的关系 (数据结构)
再
结合处理数据的思路 (算法)
最终实现好的编程效果
4. 优秀程序员的基本功:
一门编程语言+数据结构和算法
(好的)程序设计 = (好) 算法 + (合适的)数据结构
一、数据结构的内容
1)术语
1.数据:是描述客观事物的符号,是计算机中可以操作的对象
2.数据元素:是组成数据的、有一定意义的基本单位,通常作为整体出现(人)
3.数据项:一个数据元素可以由若干个数据项组成(器官)
(数据项是数据不可分割的最小单位。)
4.数据对象:是性质相同的数据元素的集合,是数据的子集(人这样的类型)
5.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。(小红和小明 之间的关系)
2)逻辑关系
逻辑关系 —— 反应的是数据与数据之间的对应关系(我们认为的一种关系)
1.集合:
元素与元素之间同属一类 (无其他对应关系)
2.线性:
元素与元素之间一对一的
除了:
起始元素和结尾元素
线性关系中每个元素都有自己的一个前驱节点和后继节点
3.树形:
有层次,一对多
班主任
班长
副 班 学 纪
班 委 委 委
4.图形:
元素与元素之间多对多
应用场景:
地图
抢票软件
3)存储结构
存储结构(内存上怎么存储):
1)顺序的存储结构
存储一组整数数据
0123456789//学号
具有线性逻辑关系的一组数据
intsno[10] ={0,1,2,3,4,5,6,7,8,9} ;
顺序存储(数组):
缺点:
增
删
优点:
随机访问方便
2)链式的存储结构
链---"铁链 狗链
优点:
增
删除
缺点:
访问需要遍历
3)索引结构
看书 —— index(目录-索引)
专门维护一个索引表
4)散列(哈希)结构 --- 哈希查找
哈希表
值 <-->
散 <--哈希函数--> 位置 (通过这个函数一下就能找到 O(1) 的时间复杂度)
另:
同一个逻辑关系的数据 可以用不同的存储结构
因为不同存储结构有自己的优缺点 -- 需要结合实际问题选择
二、数据结构与算法
算法是解决特定问题求解步骤的描述
在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作
算法——就是解决问题的步骤
(是解决问题思路的 - 具体描述)
算法特性--写一个算法需要考虑的方面:
1.输入
2.输出
3.有穷性
4.确定性
5.可行性
好算法:
1.正确性
2.可读性
3.健壮性(鲁棒性)
4.时间效率和存储量低
(时间复杂度和空间复杂度)
内存
GPU
CPU
三、顺序表
可以解决线性的逻辑关系
顺序存储:c语言,c++,java,python
C语言中:
数组(顺序表)
算法:
1.创建int a[10];
2.增
3.删
4.改
5.查
6.销毁
创建:
int a[10];
int *p = malloc(sizeof(int)*10);
增加数据:
inputArray
insertArray(插入数据)
删除数据:
deleteArray
改:
modifyArray//找到修改
查:
findArray
销毁:
堆区
数据销毁
空间销毁
四、链式表
可以解决线性的逻辑关系
实现:
链表的元素特点描述:
节点(结点)
包含:
a.数据
b.下一个节点的地址
1)创建:
一般创建一个空链表
数据结构中 --- 要带头节点的链表
1.1 空链表:
只有头节点
而且头节点指针域为NULL
1.2 首节点:
第一个有效数据的节点
1.3 尾节点
最后一个有效数据的节点(zhizhenyu为 NULL )
2)增:
1.头插
2.尾插
3)打印数据(遍历变量)
4)查找
5)修改
6)删除
1.头删
2.尾删
3.删任意位置