文章目录
数据结构
数据结构概述
定位
我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到内存储器(内存)中,以及在此基础上为实现某个功能(ps:查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫算法。
数据结构 = 个体的存储 + 个体的关系存储
算法 = 对存储数据的操作(狭义的算法)(泛型 广义的算法)
算法
解题的方法和步骤
衡量算法的标准
- 时间复杂度: 大概要执行的次数,而非执行的时间
- 空间复杂度: 算法执行过程中,大概所占用的最大内存
- 难易程度(应用到应用程序中 最关键)
- 健壮性
数据结构的地位
数据结构是软件中最核心的课程
程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言(程序 = 算法 + 数据结构)
预备知识
指针
- 指针的重要性:指针是C语言的灵魂
- 定位:地址
- 内存单元的编号
- 从0开始的非负整数 范围(0—FFFFFFFF
- 指针 指针就是地址,地址就是指针
指针变量的存放单元地址的变量
指针的本质是一个操作首先的非负整数
指针变量也是变量,只不过他存放的不能是内存单元的内容,只能存放内存单元的地址 - 分类
1.基本类型的指针
结构体
- 为什么会出现结构体
结构体是用户根据实际需求,自己定义的复杂数据类型 - 如何使用结构体
struct Student st = {1000,“sdasda”,20}
struct Student pst =&st;
1.st.sid
2.pst->sid
pst 所指向的结构体变量中的sid这个成员 - 注意事项:结构体变量不能加减乘除,但是可 以赋值,普通结构体变量和结构体指针变量作为函数传参的问题
动态内存的分配和释放
模块1 线性结构(把所有的节点用一条直线穿起来)
连续存储(数组)
1.什么叫做数组
元素类型相同,大小相等
2.数组的优缺点
离散存储(链表)
-
定义:
n个节点离散分配
彼此通过指针相连
每个节点只有一个前驱节点,每个节点只有一个后续节点
首节点没有前驱节点,尾结点没有后续节点- 专业术语:
首节点:第一个有效的节点
尾节点:最后一个有效的节点
头结点:头结点的数据类型和首节点类型一样
第一个有效之前的那个节点
头结点并不存放有效数据
加头结点的目的主要是为了方便对链表的操作
头指针:指向头结点的指针变量
尾指针:指向尾节点的指针变量
- 专业术语:
-
确定链表的几个参数(如果希望通过函数对链表进行处理,我们至少需要接受链表的哪些参数):
只需要一个参数:头指针
因为我们通过头指针可以推算出链表的其他所有信息 -
分类;
-
算法;
-
优缺点: