数据结构与算法

目录

第一节 算法基础

流程图

第二节 数据结构基础

第三节 线性表

线性表的顺序存储(掌握不同操作的算法分析)

线性表的链式存储(掌握单链表基操)

 栈和队列(掌握特点)

第四节 树和二叉树

第五节 图

图的遍历!

图的应用

1.最短链接策略

​编辑 2、最近邻点策略

第六节 查找算法

二分查找

 第七节 数据排序算法

一、插入排序

1、直接插入排序

二、交换排序

1、冒泡排序

2、快速排序

三、选择排序

1、简单选择排序

第八节 程序基础


第一节 算法基础

考流程图

流程图

 三种基本结构

 

D

注意一下循环次数5次

判断次数是6次 

 B

p117

鸡:x 兔:y

x+y=35

2x+4y=94

算法特征:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出

问题求解方法:解析法、穷举法、递推法、递归法(要会区分)p107

算法的表示:自然语言、伪代码、流程图

算法分析:

·时间复杂度p117

T(n)=O(f(n))

最深层循环内的语句的执行次数:该语句的频度。

1、常数阶  O(1)

2、线性阶O(n)

3、平方阶O(n的平方)

4、对数阶O(logn)

第二节 数据结构基础

 2-7节很重要 21年新出的知识

1、数据逻辑结构

元素间固有关系(前驱后继),与在计算机中存储位置无关

也可分为线性结构和非线性结构 线性结构有且只有一个开始节点和一个终端节点 每个节点最多只有一个前驱和一个后继 线性结构也称为线性表

2、数据物理结构

不仅要存放各个数据元素,还要存放数据元素之间前驱和后继关系的信息。

 元素在计算机中存储方式

顺序存储结构 数据存放在地址连续的空间 数据间逻辑结构和物理结构一致

 链式存储结构 数据存放在任意的空间 借助指针查找下一个数据

以下关于数据结构的说法中,正确的是( )。

A.数据的逻辑结构独立于其存储结构

B.数据的存储结构独立于其逻辑结构

C.数据的逻辑结构与其存储结构一定相同

D.数据的逻辑结构与其存储结构一定不相同

数据的逻辑结构:元素间固有关系与计算机的存储无关。所以独立于存储结构

存储结构:存的就是一个个元素。

A√

任何一种逻辑结构 4种 可用任何一种存储结构来存2种 无必然关系 除了线性结构——顺序存储

链表是随机存储

顺序表是顺序存储,随机存取的结构; 链表是随机存储,顺序存取的结构

链表只能从头指针开始一步一步往后,所以它只能按顺序一步步的顺序存取,但是顺序表可以根据下标查找元素,所以可以随机存取

p123

·数据元素是数据的基本单位

一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。

例如学生基本信息表这种,数据元素由学号、姓名、性别、系别和年龄多个数据项组成。

·数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

例如整数数据对象是集合Z={0,+-1,+-2...}

·数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

数据结构包括三方面的内容:逻辑结构、物理结构和数据的运算。

第三节 线性表

线性表的顺序存储(掌握不同操作的算法分析)

 线性表的顺序存储又称为顺序表

线性表 把第1个数据元素存到数组下标为0的位置中

插入和删除要移动大量元素

获取表长:n=L.length  O(1)

·查找(按值查找):

最好情况 查找的元素在表头 仅比较一次 O(1)

最坏情况 在表尾(或者不存在) 需比较n次 O(n)

平均情况 O(n)

特点

3.取值:可直接推算(随机存取) O(1)

5.插入:移动n-i+1个元素(向后移)

(插入的位置i  最后一个元素即第n个元素开始依次向后移动一个元素 直至第i个元素)

最好情况:表尾插入 元素不需要后移 O(1)

最坏情况 :表头插入 所有元素后移 移动n次 O(n)

平均情况:O(n)

6.删除:移动n-i个元素(向前移)

最好情况:删除表尾元素 无须移动元素  O(1)

最坏情况:删除表头元素 需移动除第一个元素外的所有元素 O(n)

平均情况:O(n)

线性表的链式存储(掌握单链表基操)

(占任意空间)

线性表的链式存储又称为单链表

单链表结构: data next 数据域 指针域

可在单链表的第一个节点前附设一个节点:头节点

·初始化

生成新节点作为头节点,用头指针L指向头节点,头节点的指针域置空

·建立单链表:

头插法、尾插法p128

·获取表长:计算单链表中数据节点(不含头节点)的个数

 特点:

4.取值:从头依次找(顺序存取

最好:查找第一个位置的节点 O(1)

最坏:最后一个位置 O(n)

6.插入:移动2个指针即可

p131注意下核心操作

7.删除:移动1个指针即可

p132

·双链表:

prior next两个指针

插入、删除 O(1)

核心操作p133

·循环链表

循环单链表:

表中最后一个节点的指针不是NULL,而改为指向头节点。

判空条件:表尾节点r是否等于头指针

·循环双链表

头节点的prior指针指向表尾节点

 栈和队列(掌握特点)

1、栈

特点1:只有一端开口,允许插入和删除,称为栈顶(top)。插入称为入栈,删除称为出栈

特点2:另一端封闭,不能进行插入和删除,称为栈底(bottom)

特点3:先进后出(后进先出)

特点4:栈顶的具体位置不唯一。

·栈的顺序存储 :

初始状态 S.top=-1

进栈:栈顶指针先加1,再送值到栈顶元素

出栈:先取出栈顶元素,再减1

·栈的链式存储:

链栈 单链表 所有操作都在表头进行 没有头节点

2、队列

特殊的线性结构(有唯一的前趋和后趋)

 特点1:允许删除的一端称为队头(front)

特点2:允许插入的一端称为队尾(rear)

特点3:先进先出(后进后出)

特点4:队头和队尾的具体位置不唯一。

·队列的顺序存储

1、顺序队列

2、循环队列

初始状态 Q.front=Q.rear=0

队尾指针进1:Q.front=(Q.front+1)%MaxSize

队头指针进1:Q.rear=(Q.rear+1)%MaxSize

?

·队列的链式存储

链队列

队头指针 队尾指针

 1、B

2、C

3、B

第四节 树和二叉树

二叉树遍历是重点 二叉树概念性质 记忆   

·树

树中一个节点的孩子个数称为该节点的度,树中节点的最大度数称为树的度。

例子p139

度大于0的节点:分支节点

度=0的节点:叶子节点

有相同双亲的节点称为兄弟,双亲在同一层的节点互为堂兄弟。

节点的深度是从根节点开始自顶向下逐层累加的。

树的深度是树中节点的最大层次。

同一双亲的两个孩子之间不存在路径

·二叉树

每个节点至多只有两棵子树 二叉树中不存在度大于2的节点 二叉树的子树有左右之分

即使树中节点只有一颗子树,也要区分它是左子树还是右子树。

·特殊的二叉树

满二叉树:所有分支节点都存在左子树和右子树 所有叶子都在同一层上

完全二叉树

·二叉树性质
1. 非空二叉树的第k层上至多有 个节点:2^(k-1)(k>=1)

2. 深度为h的二叉树至多 个节点:2^h -1(h>=1)

3. 具有n个节点的完全二叉树的深度:log2(n+1) 或log2n +1

4.非空二叉树上叶子节点数=度为2的节点数+1   即n0=n2+1

·二叉树存储结构:

顺序存储结构

链式存储结构:基本结构 lchild data rchild

应用:

·哈夫曼树和哈夫曼编码p148

哈夫曼树又称最优二叉树 是带权路径长度最短的树

带权路径长度=权值乘以路径长度

·哈夫曼树的构造

p150例题

·哈夫曼树编码

左分支赋予0

右分支赋予1

例题p150

1、先序遍历

根、左、右

 ABDGHCEIF

p144

2.中序遍历

左、根、右

GDHBAEICF

3.后序遍历

左、右、 根

GHDBIEFC

4.层遍历

从上到下,从左到右

ABCDEFGHI

 C

树和二叉树的应用:

·二叉排序树(二叉查找树)

若左子树非空,则左子树上所有节点的值均小于根节点的值

若右子树非空,则右子树上所有节点的值均大于根节点的值

左、右子树也分别为二叉排序树

·查找

插入

删除

p147

第五节 图

·图的基本概念

图由顶点集V和边集E组成 记作G=(V,E)

·有向图

有向边(弧)E={<1,2>,<2,1>} 

无向图

无向边(边)E={<1,2>,<1.3>}

·无向完全图:无向图中,任意两个顶点之间都存在边

有向完全图:有向图中,任意两个顶点之间都存在方向互为相反的两条弧

·有向图

顶点的度=入度+出度

全部顶点的入度之和=出度之和

·无向图

全部顶点的度的和=边数的两倍

·无向图 任意两顶点都是连通的,则为连通图 否则非连通图

n个顶点 边数小于n-1 此图必为非连通图

极大连通图称为连通分量

例图p154

·有向图

v1到v2和v2到v1 都有路径存在 则v1和v2是强连通的

任意一对顶点都是强连通的 则强连通图

极大强联通子图称为强联通分量

·带权的图称为网

·图的存储

1、邻接矩阵p155

图 0 1表示

网 无穷 权表示

2、邻接表??

图的遍历!

深度:走迷宫

广度:找相邻的所有顶点

1、深度优先遍历

类似树的先序遍历,从任意顶点出发,沿一个方向遍历相邻顶点,然后回溯

p157

ABCDEFGHI

也可

ABCIDGFEH 

2.广度优先遍历

类似树的遍历,从任意顶点出发,先遍历完该顶点所有相邻顶点,再遍历下一层

ABFCIGEDH

 

 D深度

图的应用

旅行商问题(TSP)

从一个城市出发,需要经过所有城市一次并且仅一次之后, 回到出发城市。

要求总路程最短。

两种解决方法(贪心)

最短链接策略【关注的是边】

最近邻点策略【关注的是顶点】

1.最短链接策略

关注的是边

 2、最近邻点策略

关注的是顶点

 两个方法会一个就行

 C 5+7+6+8+10

p159

第六节 查找算法

·顺序查找

线性表

二分查找

 A

 第七节 数据排序算法

一、插入排序

1、直接插入排序

2、希尔排序

常见的增量取值d/2

p164

二、交换排序

1、冒泡排序

 

9个值 排8趟 

n个值 排n-1趟

2、快速排序

 ①找枢纽(第1个值)

②基准值vs相反最远

③小 枢纽 大

p167

 B

三、选择排序

1、简单选择排序

 p170

简单选择排序

2、堆排序

?p171

性能总结:

背!

快排 递归

p171

冒泡两两比较

快速排序 最好情况 左右两边数量对称  

不稳定:两相同值的相对位置变了

 D

四、归并排序

p173

第八节 程序基础

计算机语言:

机器语言是低级语言 二进制代码表示的一种机器指令的集合 计算机可以直接识别和执行 不需要进行任何的解释和翻译

汇编语言(符号语言) 用英文字母或符号串 

高级语言 

用高级语言编写的程序称为源程序 计算机不能够直接识别和运行 必须通过编译程序或解释程序将高级语言程序转换为机器语言程序方可执行

编译程序也称编译器 把源程序翻译成目标程序(机器语言)编译程序只具翻译功能 

解释程序又称直译程序 解释程序边翻译边执行

面向对象程序设计 基本特征:封装性 继承性 多态性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值