持续更新中...
数据结构
内核:根基
我们到底干什么:研究
数据的逻辑结构 和 存储结构以及相关结构上的操作
数据
各种信息 (10学生信息 10000人信息 部门管理图 火车路线构建图)
逻辑结构
无结构 集合
1对1 线性结构
1对多 树形结构
多对多 图形结构
存储结构
顺序存储
连式存储
索引存储
相关结构上的操作
各种信息 [按照] 线性结构 [在内存] 顺序存储 就是 数组
10学生信息 [按照] 线性结构 [在内存] 顺序存储 就是 数组
1000000学生信息 [按照] 线性结构 [在内存] 连式存储 就是 链表
上面的学生
读取
查找
插入
删除
这些操作都是算法
第一节:什么是数据结构
总体大纲
模块一
线性结构
顺序存储[数组]
链式存储[链表]
线性结构的常见应用之一 栈
线性结构的常见应用之二 队列
专题:递归
1.求1+2+3+...+100和
2.求阶乘
3.汉诺塔
4.走迷宫
模块一
非线性结构
树
图
模块三
查找
排序
数据 是什么
数据 说白了 就是信息 信息最常用不就是字符串和数字么 你看嘛像是报纸书籍不都是字加上小数 什么魂斗罗战力多少
那数据结构是什么 关键就在结构这个词上面 类比下结构的出现词
人体结构 是不是结构就有味道了
人体结构就是头了 腿了什么的
那数据结构有什么部位块呢
也就是数据的分类总结 像是数组类似双臂 像是集合类似双腿 就像是人体图片一样 将零散的块 正好在一起成为图 这个图就是数据结构
数据结构:
把现实中大量而复杂的数据类型和特定存储结构保存在存储器(内存)中.以及再次基础上实现的某个功能(比如 查找 删除 排序)
而完成的这些操作的功能的过程就是算法
总的来说:就是把个体和个体之间关系 存放到内存当中
第二节:算法
算法一句话: 完成某个功能的步骤(过程)
解释:
完成泡一杯龙井茶的算法(过程)
第一步:准备 茶杯
第二步:放入茶叶
第三步:导入开水
第四步:等待浸泡
第五步:完成
算法的衡量
1.时间复杂度-----------就是程序执行的次数
2.空间复杂度-----------占用的最大内存
3.难易程度 ------------是否常人理解
4.健壮性 ------------对于非法输入依然可以正常运行不崩溃
时间复杂度:不是指时间 是次数
常数时间复杂度(O(1)):无论输入规模如何增大,算法执行的时间都不会改变,例如对一个数组进行访问操作,无论数组元素的个数还是位置如何改变,读取操作的时间都是不变的。
线性时间复杂度(O(n)):算法的执行时间与输入大小呈正比,例如对一个有n个元素的数组进行遍历操作,算法需要执行n次。
对数时间复杂度(O(log n)):算法执行时间随着输入规模n的增加而稍微增加,例如二分查找算法。
平方时间复杂度(O(n^2)):如果算法执行步骤为n^2,则它的时间复杂度为O(n^2)。常见的例子是双重循环嵌套。
立方时间复杂度(O(n^3)):如果算法执行步骤为n^3,则它的时间复杂度为O(n^3) 比如三层for循环。
时间复杂度举例:
有数组如下 0123是下标
张三 | 李四 | 王五 | 娃哈哈 |
---|---|---|---|
0 | 1 | 2 | 3 |
操作有:
读取
读取只需要给定下标就能获取值 操作无论怎么变 只执行一次
那么时间复杂度就是 1
查询:
判断是否存在 该操作和数组每个都匹配
可能提前找到 最坏就是所有找了一遍发现没有
那么 有几个元素n 据需要执行几次 n
随着数量增加而增加
最终时间复杂度就是 n
插入:
找到要插入的位置
然后通过移动把值进去
最好的情况就是在末未插入 七七
张三 | 李四 | 王五 | 娃哈哈 | 七七 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
只要一步
最坏在0下标插入
全部右移动 腾出0位置
第一步
张三 | 李四 | 王五 | 娃哈哈 | |
---|---|---|---|---|
0 | 1 | 2 | 4 |
第二步
张三 | 李四 | 王五 | 娃哈哈 | |
---|---|---|---|---|
0 | 1 | 3 | 4 |
第三步
张三 | 李四 | 王五 | 娃哈哈 | |
---|---|---|---|---|
0 | 2 | 3 | 4 |
第四步
张三 | 李四 | 王五 | 娃哈哈 | |
---|---|---|---|---|
1 | 2 | 3 | 4 |
第五步 插入
七七 | 张三 | 李四 | 王五 | 娃哈哈 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
我们发现 最坏情况 有几(n)个元素就需要移动几(n)次
还需要一(1)次插入
时间复杂度 n+1
删除:
删除和插入相反操作
最坏就是删除第一个
第一步删除第一个
第二步第三步…第n步 把后面的前移
需要 n+1
时间复杂度 n+1