没有合适的资源?快使用搜索试试~ 我知道了~
首页C++数据结构知识点与经典算法整理
一、数据结构知识点总结整理 3 2.数据结构的定义: 4 3.数据结构的知识: 9 二、数据结构的实现 16 1、二叉树三种遍历的非递归算法 16 1.先序遍非递归算法 16 2.中序遍历非递归算法 17 3.后序遍历非递归算法 18 4.层次遍历算法 19 2、线性表 20 4、串 23 5、多维数组和广义表 24 6、树与二叉树 24 7、图 26 8、查找(search) 27 9、内部排序 28 2、排序算法的稳定性 29 3、C/C++实现 31 4、对排序算法的总结 41 11、数组和链表的优缺点 42 12、C++操作符优先级: 43 13、B树、B-树、B+树、B*树、红黑树和trie树 44 14、最小生成树算法之Prim算法(C++实现) 49 15、最小生成树之kruskal算法 58 16、单源最短路径 62 三、算法部分 65 1、算法简介 65 2、实际算法 67 3、常用算法 73 四、算法分析与设计 102 1.常用的算法设计方法: 102 1.1 迭代法: 102 1.2 穷举搜索法: 103 1.3 递推法: 104 1.4 递归法 106 1.5 贪婪法 111 1.6 分治法 113 1.7 动态规划法 115 1.8 回溯法 119 1.9 分支定界法: 120 2.几个重要的算法程序 121 2.1 堆排序 121 2.2 归并排序 122
资源详情
资源评论
资源推荐

2.数据结构的定义:....................................................................................................... 3
3.数据结构的知识:........................................................................................................... 7
二、数据结构的实现.................................................................................................................. 13
1、二叉树三种遍历的非递归算法.....................................................................................13
1. 先 序 遍 非 递 归 算 法 #dene maxsize 100 typedef struct { Bitree Elem[maxsize]; int
top; }SqStack;........................................................................................................................ 13
4.层次遍历算法............................................................................................................ 16
2、线性表........................................................................................................................... 17
4、串................................................................................................................................... 19
5、多维数组和广义表........................................................................................................ 20
7、图................................................................................................................................... 21
8、查找(search)............................................................................................................. 22
2、排序算法的稳定性................................................................................................. 24
3、C/C++实现............................................................................................................... 25
4、对排序算法的总结................................................................................................. 33
11、数组和链表的优缺点................................................................................................... 34
12、C++操作符优先级:....................................................................................................... 35
13、B 树、B-树、B+树、B*树、红黑树和 trie 树.............................................................36
14、最小生成树算法之 Prim 算法(C++实现).....................................................................40
15、最小生成树之 kruskal 算法......................................................................................... 47
16、单源最短路径.............................................................................................................. 51
三、算法部分.............................................................................................................................. 53
1、算法简介........................................................................................................................ 53
2、实际算法........................................................................................................................ 55
3、常用算法........................................................................................................................ 61
四、算法分析与设计.................................................................................................................. 90
1.常用的算法设计方法:................................................................................................. 90
1.1 迭代法:................................................................................................................ 91
1.2 穷举搜索法:......................................................................................................... 92
1.3 递推法:................................................................................................................ 93
1.4 递归法.................................................................................................................... 94
1.5 贪婪法.................................................................................................................... 99
1.6 分治法.................................................................................................................. 102
1.7 动态规划法........................................................................................................... 104
1.8 回溯法.................................................................................................................. 108
1.9 分支定界法:....................................................................................................... 109
2.几个重要的算法程序................................................................................................... 109
2.1 堆排序.................................................................................................................. 109
2.2 归并排序.............................................................................................................. 110
一、数据结构知识点总结整理
1.数据结构的简介:

数据结构是计算机软件的一门基础课程,计算机科学各个领域及有关的应用软件都要用到各种数据结构。
语言编译要使用栈、散列表及语法树;操作系统中用队列、存储管理表及目录树等;数据库系统运用线性
表、多链表及索引树等进行数据管理;而在人工智能领域,依求解问题性质的差异将涉及到各种不同的数
据结构,如广义表、集合、搜索树及各种有向图等等。学习数据结构目的是要熟悉一些最常用的数据结构,
明确数据结构内在的逻辑关系,知道它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各
种操作时的动态性质及实际的执行算法,进一步提高软件计和编程水平。通过对不同存储结构和相应算法
的对比,增强我们根据求解问题的性质选择合理的数据结构,并将问题求解算法的空间、时间及复杂性控
制在一定范围的能力。
软件设计师考试大纲对数据结构部分的要求是熟练掌握常用数据结构和常用算法,因此,本专题从数
据结构的概述出发,对基本的概念引出常用的数据结构类型的介绍和讲解,同时在讲解各种数据结构中间
采用算法与数据结构相结合的方式,在算法步骤中使用数据结构,对数据结构的重点、难点进行了分析,
最后讲解了与数据结构紧密相关的排序和查找算法,以及一些以往考试题的分析。
数据结构概述:
数据结构研究了计算机需要处理的数据对象和对象之间的关系;刻画了应用中涉及到的数据的逻辑组
织;也描述了数据在计算机中如何存储、传送、转换。
学习数据结构注意的问题:
系统掌握基本数据结构的特点及其不同实现。
了解并掌握各种数据结构上主要操作的实现及其性能(时间、空间)的分析。
掌握各种数据结构的使用特性,在算法设计中能够进行选择。
掌握常用的递归、回溯、迭代、递推等方法的设计
掌握自顶向下、逐步求精的程序设计方法。
掌握自顶向下、逐步求精的程序设计方法。
在学习数据结构的知识之前,我们要了解一下数据结构中的基本概念。
数据:对客观事物的符号表示,在计算机中就是指所有能输入到计算机中并被计算机程序所处理的符
号的总称。
数据项: 是数据的不可分割的最小单位;
数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行处理;一个数据元素可由若干
个数据项组成。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
数据结构上的基本操作:1.插入操作 2.删除操作 3.更新操作 4.查找操作 5.排序操作
数据结构是指数据对象及相互关系和构造方法,一个数据结构 B 形式上可以用一个二元组表示为
B=(A,R)。其中,A 是数据结构中的数据(称为结点)的非空有限集合,R 是定义在 A 上的关系的非
空有限集合。
根据数据元素之间的关系的不同特性,通常有下列 4 类基本结构。
集合——结构中的数据元素除了“同属于一个集合”的关系外,别无其他关系。
线性结构——结构中的数据元素之间存在一个对一个的关系。
树形结构——结构中的元素之间存在一个对多个的关系。
图状结构或网状结构——结构中的元素之间存在多个对多个的关系。
数据结构中,结点与结点间的相互关系是数据的逻辑结构。数据结构在计算机中的表示(又称为映
象)称为数据的物理结构,也称存储结构。
数据元素之间的关系在计算机中有两种不同的表示方式:顺序映象和非顺序映象,并由此得到两种不
同的存储结构:顺序存储结构和链式存储结构。
任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。
数据的逻辑结构分为两类:

线性结构:线性表、栈、队列和串。
非线性结构:树、图
数据的存储方法有四类:
1.顺序存储方法;
2.链接存储方法;
3.索引存储方法;
4.散列存储方法。
2.数据结构的定义:
数据在计算机中的组织。包括逻辑结构,存储结构,数据运算。
逻辑结构:与具体的计算机无关。
一、顺序表:
线性表(a1,a2…,an)有唯一的第一个和最后一个元素(n≥0)。其余的有唯一
的前驱和后继。
顺序表定义:用一组地址连续的存储单元依次存放的数据元素。
在顺序表的第 i 个位置前插入一个数据元素,需要向后移动 n - i +1 个元素,删除
第 i 个位置的元素需要向前移动 n- i 个元素。
二、栈和队列
1.栈:允许在表的一端插入和删除的线性表。栈底,不允许操作,栈顶,允许操作。
栈的操作原则:LIFO 后进先出
【例】设进栈顺序是(a,b,c,d),不可能的出栈序列是:( C )
A. (a,b,c,d) B.(a,c,b,d) C. (a,d,b,c) D.
(d,c,b,a)
2.队列:允许在表的一端插入,另一端删除的线性表
队尾:插入端 队首:删除端
队列的操作原则:FIFO 先进先出
三、数组:
1.数组的定义:
A.一维数组:具有相同特性的元素集合。A[4] 数组元素下标 A[0] A[1] A[2] A[3]
B.二维数组 矩阵 A= {a11 a12
a21 a22
a31 a32}
C 语言 A = {a[0][0] a[0][1]
a[1][0] a[1][1]
a[2][0] a[2][1]}
矩阵下界为 1。C 语言中二维数组下界为 0。如 A[3][2] 指 3 行 2 列。
C. 存储方式:行优先次序(行主)
设一个数据元素占 S 个存储单元
二维数组寻址公式:a[m][n]
LOC(a[i][j])= LOC(a[0][0])+(i×n+j)×s
a[i][ j]指存放相应元素的首地址

【例】二维数组 A[4][3],首地址 A[0][0]是 SA,每个元素占 2 个存储单元,按行优
先次序,求 A[3][2]与 A[2][1]存放地址。
解: A[3][2]:SA+(3×3+2)×2 = SA+22 A[2][1]: SA+(2×3+
1)×2=SA+14
2.下三角矩阵压缩存储方法:(下三角是非 0 元素,其余为 0。)
A = { a11 0
a21 a22 0
a31 a32 a33 0
a41 a42 a43 a44 0}
n 阶下三角矩阵元素个数:(n+1)n/2
n 阶下三角矩阵压缩存储于一维数组 F(m) ,则 m=(n+1)n/2
F 数组
A11 A21 A22 A31 A32 A33 A41 A42 A43 A44
0 1 2 3 4 5 6 7 8 9
3.稀疏矩阵的三元组表示: 非 0 元素相对较少,且无规律。
A = { 3 0 1 0
0 0 2 0
0 0 0 0
0 1 0 0
0 0 0 1}
描述一个非零元素的(r 行 c 列 v 值)三元组
稀疏矩阵的三元组表:按行优先次序进行转换
r c v
5 4 5
1 1 3
1 3 1
2 3 2
4 2 1
5 4 1
转置矩阵
A-= {3 0 0 0 0
0 0 0 1 0
1 2 0 0 0
0 0 0 0 1}
R C V
4 5 5
1 1 3
2 4 1
3 1 1
3 2 2
4 5 1
四、树和二叉树
1.树的定义和术语
n≥0 个结点的有限集合。

n>0 有且只有一个根结点,其余结点分为 m≥0 个互不相交的有限集 T1~Tm 。
每个集合 Ti 又是一棵树。称为根的子树。
双亲,子女,祖先,子孙。
兄弟:同一个双亲的子女互为兄弟。
结点的度: 结点的子树数目。
树的度:结点度的最大值
叶结点: 度为 0 的节点
分支结点:度不为 0 的节点
结点的层次:根结点在第一层。其它结点层次=双亲层次+1
树高度(深度):树的叶子的最大层次
例: 设在树中结点 X 是结点 y 的双亲时,用(x,y)表示树中的边。边的集合是
{(a,b),(a,c), (a,d) , (b,e) ,(b,f) ,(c,g) ,
(d,h), (d,i) ,(d,j) },用树形表示法画出此树。
2.二叉树
性质:
1.二叉树中 i 层(i>=1)上最多有 2 i—1 个结点
2.高度为 k 的二叉树最多有 2 k –1 个结点
3.满二叉树,高度为 k 的二叉树具有 2 k–1 个结点
4.完全二叉树
层次编号: 满二叉树按自顶向下,从左到右的次序进行编号。
n 个结点的完全二叉树结点的排列顺序与满二叉树的层次编号次序一一对应(满二叉
树是完全二叉树的子集)
完全二叉树的特点:
①除最高层可以不满外,其余层都充满结点,每一层结点的个数是上一层结点个数的
两倍。最高层上的结点集中在左部。
②完全二叉树中,如果一个结点没有左子女,就一定是叶结点
③高度为 k 的完全二叉树最少有 2 k-1 个结点。
④层次编号为 i 的结点:
双亲:若 i =1 为根,无双亲。否则双亲为 [i/2] 。
[i/2]指不≥i/2 的最大整数。下取等。
左子女:若 2i>n 则无左子女,否则左子女是 2i。
右子女:若 2i+1>n 则无右子女,否则右子女是 2i+1。
5.二叉树的遍历
先序遍历:根,左,右
中序遍历:左,根,右
后序遍历:左,右,根
层次遍历:访问根,再从左到右访问第 i 层上的结点。
先序序列:ABDFICEJGH
中序序列:DBFIAEJCHG
后序序列:DIFBJEHGCA
层次序列:ABCDFEGIJH
6.树与二叉树的转换
树转换成二叉树:
1.加线:从左子女起,沿右子女之间加线。
剩余63页未读,继续阅读














安全验证
文档复制为VIP权益,开通VIP直接复制

评论5