数据结构学习笔记

本文详细探讨了数据结构中的逻辑结构、运算以及物理结构,涉及集合、线性结构、树形结构和图结构。重点讲解了算法的定义、描述、时间和空间复杂度分析,包括线性表(顺序表与链表)的实现与操作,以及C/C++中结构类型比较。
摘要由CSDN通过智能技术生成

1.绪论:

数据结构强调的是数据元素之间一定要有某种关系

数据对象强调的是数据元素之间只要有相同的性质

2.数据结构的三要素:

1.逻辑结构:

1.集合

2.线性结构(一对一)

前驱与后继的定义

3.树形结构(一对多)

4.图结构(多对多)

2.数据的运算:

定义:结合逻辑结构、实际需求来定义基本运算

3.物理结构(存储结构):

  • 顺序存储:利用相邻顺序
  • 链式存储:利用指针
  • 索引存储:利用索引表
  • 散列存储(哈希存储)

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

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

4.数据类型、抽象数据类型:

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

1.原子类型:其值不可再分的数据类型

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

抽象数据类型(ADT):是抽象数据组织及与之相关的操作,(逻辑结构+数据的运算)

2.算法及其描述:

程序  =  数据结构  +  算法

1.算法的特性:

  • 有穷性
  • 确定性
  • 可行性
  • 输入
  • 输出

2.算法设计的目标:

  • 正确性
  • 可使用性
  • 可读性
  • 健壮性
  • 高效率与低存储量需求

3.算法效率的度量:

1.算法时间复杂度:

只需要保留阶数最高的一项,并且系数变为1

T1(n) = O(n)

结论1:顺序执行的代码只会影响常数项

结论2:只需挑循环中的一个基本操作分析它的执行次数与n的关系即可(只考虑循环次数)

结论3:如果有多层嵌套循环,只需关注最深层循环循环了几次

求时间复杂度的三类题型及其解法:

1.一层循环:

解题步骤:

1.列出循环次数t及每轮循环i的变化值

2.找到t与i的关系

3.确定循环停止条件

4.联立两式,解方程

2.二层循环:

1.列出外层循环中i的变化值

2.列出内层语句中的执行次数

3.求和,写结果

口诀:常对幂指阶

2.算法空间复杂度:

如果一个算法所需要的内存空间和问题规模n没有关系,即空间复杂度为常数阶,那么我们可以称这种算法原地工作

4.线性表:

1.存储结构:

  • 顺序表
  • 链表

2.顺序表:

1.顺序表的实现

1.静态分配:数组 

2.动态分配:指针

用malloc和free函数来动态申请和释放内存空间                           

3.顺序表特点:

  • 随机访问,即可以在O(1)时间内找到第i个元素
  • 存储密度高,每个节点只存储数据元素
  • 拓展容量不方便(即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高)
  • 插入删除操作不方便

2.顺序表的基本操作:

  • 插入
  • 删除
  • 按值查找
  • 按位查找

注:c语言中结构类型的比较,不能简单的使用==来比较,需要依次对比各个分量来判断两个结构体是否相等。c++中常用运算符重载来进行比较。

3.;链表:

1.单链表:

  • 定义
  • 插入
  • 删除
  • 查找
1.插入与删除:

2.查找:

3.定义:

2.双链表:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值