数据结构与算法
绪论
数据结构的基本概念
数据: 是信息的载体, 分整数型与非整数型数据
数据项: 构成数据元素的最小不可分割单位, 如学生的成绩
数据元素: 数据的基本单位, 作为一个整体存储, 如每个学生的信息
数据类型: 具有相同性质的计算机数据的集合, 以及在这个集合上的一系列操作, 比如int、str、数组、类等, 分为简单类型(原子类型)和构造类型(结构类型), int、float等为简单类型, 数组、类等为构造类型
数据结构的定义: 按照某种逻辑关系组织起来的一组数据, 按一定的存储方式存储在计算机的存储器中, 并在这些数据上定义了一组运算的集合
数据结构的组成:
- 逻辑关系
- 集合
- 线性关系
- 树结构
- 图结构
- 存储方式
- 顺序存储
- 链式存储
- 对数据的操作
算法的基本概念
算法分析
算法的五个要素:
- 输入
- 输出
- 有穷性
- 确定性
- 可行性
描述算法的方法:
- 自然语言
- 流程图
- 伪代码
- 程序设计语言
评价算法的方法:时间复杂度、空间复杂度、鲁棒性.....
时间复杂度
算法的频度:每条代码执行的次数
算法的时间耗费:各条代码执行的总次数
时间复杂度O( ): 括号中为对时间耗费影响最大的因子,可以为
NP问题
P问题(多项式时间问题): 能找到一个能在多项式的时间里解决它的算法的问题, 这种算法叫多项式时间算法。另一类为指数时间算法, 其时间复杂度不能用多项式函数界定
NP问题: 不确定能否在多项式时间内找到一个解, 但能在多项式时间内验证一个解(也就是说不一定存在一个多项式解决算法, 但存在多项式检查算法)
NP完全问题(NPC问题): 每一个可能解都可以在多项式时间内验证的NP问题
线性表
概述
逻辑结构
定义
零个或多个相同类型的数据元素构成的有限序列
数学表示
逻辑表示
只有一个头结点与一个尾节点, 每一个中间节点有且只有一个直接前驱, 只有一个直接后继
操作
- 插入
- 删除
- 求长度
- 按位置取值
- 按值搜索
- 打印
存储结构
- 顺序结构: 顺序表
- 链式结构: 链表
- 单链表
- 循环链表
- 双链表
顺序表
用一段连续的存储空间依次存储数据元素
实现
C++数组 + 模板类
二叉树的性质
- 一颗非空二叉树的第i层上最多
个结点 - 深度为h的二叉树最多有
个结点 - 一颗二叉树,若其叶结点数
,度为2的结点数 ,则 - 具有n个结点的完全二叉树的深度为
- 对n个结点的完全二叉树,如果按从上到下,从左到右的顺序(从1开始)编号,则
- 若i>1,则其双亲结点序号为[
] - 若2i>n,则结点i无左孩子,否则其左孩子为2i
- 若2i+1>n,则结点i无右孩子,否则其右孩子为2i+1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix