数据结构与算法.docx
- 文档编号:5163270
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:13
- 大小:77.91KB
数据结构与算法.docx
《数据结构与算法.docx》由会员分享,可在线阅读,更多相关《数据结构与算法.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构与算法
数据结构与算法
1.1知识结构图
本章知识结构如图1-1所示。
图1-1第1章知识结构图
1.2知识要点
1.2.1算法
1.算法基本概念
算法是解决某个特定问题求解的一种描述,它是指令的有限序列。
算法不等于程序,也不等于计算机方法,程序的编制不可能优于算法的设计。
2.算法的基本特征
(1)有穷性:
一个算法总是在执行了有穷步的运算后终止,即该算法是可达的。
(2)确定性:
算法中每一步骤都必须有明确定义,不允许有模棱两可的解释,不允许有多义性。
(3)可行性:
要求算法中有待实现的运算都是基本的、能够实现的。
(4)输入:
一个算法有0个或多个输入。
(5)输出:
作为算法运算的结果,一个算法产生一个或多个输出。
3.算法设计的基本方法
(1)列举法;
(2)归纳法;
(3)递推;
(4)递归;
(5)减半递推技术;
(6)回溯法。
4.算法复杂度
算法复杂度主要包括算法时间复杂度和算法空间复杂度。
(1)算法时间复杂度:
是指执行算法所需要的计算工作量。
例1.1交换i和j的内容。
Temp=i;
i=j;
j=temp;
时间复杂度T(n)=O
(1)。
例1.2变量计数之一。
X=0;y=0;
For(k=1;k<=n;k++)
X++;
For(i=1;i<=n;i++)
For(j=1;j<=n;j++)
y++;
时间复杂度T(n)=O(n2)。
(2)算法空间复杂度:
是指执行这个算法所需要的内存空间。
1.2.2数据结构
1.数据结构基本概念
数据结构是指相互有关联的数据元素的集合。
研究的三个方面:
数据集合中和数据元素之间所固有的逻辑关系,即数据的逻辑结构;在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;对各种数据结构进行的运算。
2.数据的逻辑结构
数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。
包含两方面:
表示数据元素的信息;表示各数据元素之间的前后件关系。
3.数据的存储结构
数据的存储结构是指数据结构在计算机存储空间中的存放形式。
常见的存储结构有两种:
顺序存储结构,特点是借助于数据元素的相对存储位置来表示数据元素之间的逻辑结构;链式存储结构,特点是借助于指示数据元素地址的指针表示数据元素之间的逻辑结构。
4.数据结构分类
数据结构可分类为线性结构和非线性结构。
(1)线性结构:
有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。
(2)非线性结构:
不满足线性结构条件的数据结构。
1.2.3线性表
1.线性表概念
线性表是由n(n0)个数据元素al,a2,a3,…组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。
即线性表或是一个空表,或可以表示为(a1,a2,…,ai,…,an)。
线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。
在复杂线性表中,由若干数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。
2.非空线性表的结构特征
有且只有一个根结点a1,它无前件;有且只有一个终端结点an,它无后件;除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。
结点个数n称为线性表的长度,当n=0时,称为空表。
3.线性表的顺序存储结构
顺序存储具有基本特点:
线性表中所有元素所占的存储空间是连续的、按逻辑顺序依次存放的;线性表中存储密度小、数据元素可以随机查找。
顺序表的运算包括查找、插入、删除。
4.线性表的链式存储结构
链式存储的特点是:
∙线性表中元素所占的空间可以不连续;
∙线性表插入、删除操作方便;
∙可以不必事先估计线性表长度。
链式存储可分为单链表、双链表、单循环链表、双循环链表。
数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。
结点由两部分组成:
一是用于存储数据元素值,称为数据域;二是用于存放指针,称为指针域,用于指向前一个或后一个结点。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
链式存储方式既可用于表示线性结构,也可用于表示非线性结构。
线性链表中,head称为头指针,head=NULL(或0)称为空表,如果是两指针:
左指针(Llink)指向前件结点,右指针(Rlink)指向后件结点。
线性链表的基本运算包括查找、插入、删除。
1.2.4栈和队列
1.栈
栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。
栈的存储:
顺序存储,栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。
用top表示栈顶位置,用bottom表示栈底。
栈的基本运算:
插入元素称为入栈运算;删除元素称为退栈运算;读栈顶元素是将栈顶元素给一个指定的变量,此时指针无变化。
2.队列
队列的概念:
是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。
rear指针指向队尾,front指针指向队头。
队列的存储:
队列是“先进先出”(FIFO)或“后进后出”(LILO)的线性表。
队列的运算:
入队运算。
从队尾插入一个元素,退队运算,从队头删除一个元素。
1.2.5树与二叉树
1.树和二叉树的概念
树是一种简单的非线性结构,所有元素之间具有明显的层次特性,如图1-2所示。
图1-2二叉树
二叉树:
在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。
树的最大层次数称为树的深度。
2.术语
根结点:
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称为树的根。
叶子结点:
在树结构中,每一个结点可以有多个后件,它们都称为该结点的子结点。
没有后件的结点称为叶子结点。
度:
在树结构中,一个结点所拥有的后件个数称为该结点的度。
孩子、双亲、兄弟:
在树中,以某结点的一个子结点为根构成的树称为该结点的一棵子树。
树中某个结点的子树之根称为该结点的孩子,相应的,该结点称为孩子的双亲或父亲。
3.二叉树的基本性质
性质1:
在二叉树的第k层上,最多有2k–1个结点。
性质2:
深度为k的二叉树最多有2k–1个结点。
性质3:
在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,即n0=n2+1。
性质4:
具有n个结点的二叉树,其深度至少为log2n+1。
二叉树如图1-3所示。
图1-3二叉树
满二叉树:
除最后一层外,每一层上的所有结点都有两个子结点。
这就是说,在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k–1个结点,且深度为k的满二叉树有2k–1个结点。
完全二叉树:
除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点,如图1-4所示。
性质5:
具有n个结点的完全二叉树的深度为log2n+l。
性质6:
设完全二叉树共有n个结点。
如果从根结点开始,按层序(每一层从左到右)用自然数1,2,…,n给结点进行编号(k=1,2,…,n),有以下结论:
①若k=1,则结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2);
②若2k ③若2k+1 图1-4完全二叉树 根据完全二叉树的这个性质,如果按从上到下、从左到右顺序存储完全二叉树的各结点,则很容易确定每一个结点的父结点、左子结点和右子结点的位置。 4.二叉树的存储 (1)二叉树的顺序存储: 这种存储结构适用于完全二叉树。 其存储形式为: 用一组连续的存储单元按照完全二叉树的每个结点编号的顺序存放结点内容,如图1-5所示。 图1-5二叉树顺序存储 (2)二叉树的链式存储: 在计算机中,二叉树通常采用链式存储结构。 与线性链表类似,用于存储二叉树中各元素的存储结点也由两部分组成: 数据域与指针域,存储结构如图1-6和图1-7所示。 lchild Value rchild L(i) data R(i) 图1-6二叉树的存储结构 二叉树二叉树链式存储 图1-7二叉树及链式存储 5.二叉树的遍历 (1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。 (2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。 (3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。 1.2.6查找技术 1.顺序查找 顺序查找又称顺序搜索,顺序查找一般是指在线性表中查找指定的元素。 以下两种情况只能采用顺序查找: (1)如果线性表为无序表(即表中元素的排列是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找。 (2)即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。 2.二分法查找 二分法查找只适用于顺序存储的有序表,在此所说的有序表是指线性表中的元素按值非递减排列(即从小到大,但允许相邻元素值相等)。 二分法查找的效率要比顺序查找高得多。 对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较log2n次,而顺序查找需要比较n次。 1.2.7排序技术 1.排序概念 所谓排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。 排序的方法有很多,根据待排序序列的规模以及对数据处理的要求,可以采用不同的排序方法。 2.排序方法 (1)交换类排序法: 冒泡排序法和快速排序法,最后情况需要比较的次数均为n(n–1)/2。 (2)插入类排序法: 简单插入排序法,最坏情况需要n(n–1)/2次比较;希尔排序法,最坏情况需要O(n)次比较。 (3)选择类排序法: 简单选择排序法,最坏情况需要n(n–1)/2次比较;堆排序法,最坏情况需要O(nlog2n)次比较。 1.3同步练习 一、选择题 1.下面叙述中正确的是()。 A.算法的执行效率与数据的存储结构无关 B.算法的空间复杂度是指算法程序中指令(或语句)的条数 C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 D.以上三种描述都不对 2.以下数据结构中不属于线性数据结构的是()。 A.队列B.线性表C.二叉树D.栈 3.在一棵二叉树上第5层的结点数最多是()。 A.8B.16C.32D.15 4.算法的时间复杂度是指()。 A.执行算法程序所需要的时间 B.算法程序的长度 C.算法执行过程中所需要的基本运算次数 D.算法程序中的指令条数 5.算法的空间复杂度是指()。 A.算法程序的长度B.算法程序中的指令条数 C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 6.下列叙述中正确的是()。 A.线性表是线性结构B.栈与队列是非线性结构 C.线性链表是非线性结构D.二叉树是线性结构 7.设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为()。 A.349B.350C.255D.351 8.下列关于栈的叙述正确的是()。 A.在栈中只能插入数据B.在栈中只能删除数据 C.栈是先进先出的线性表D.栈是先进后出的线性表 9.在深度为5的满二叉树中,叶子结点的个数为()。 A.32B.31C.16D.15 10.如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是()。 A.e3,e1,e4,e2B.e2,e4,e3,e1 C.e3,e4,e1,e2D.任意序列 11.数据结构中,与所使用的计算机无关的是数据的()。 A.存储结构B.物理结构 C.逻辑结构D.物理和存储结构 12.算法一般都可以用哪几种控制结构组合而成()。 A.循环、分支、递归B.顺序、循环、嵌套 C.循环、递归、选择D.顺序、选择、循环 13.数据的存储结构是指()。 A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示 C.数据在计算机中的顺序存储方式D.存储在外存中的数据 14.二叉树的先序遍历和中序遍历如下: 先序遍历: EFHIGJK,中序遍历: HFIEJKG。 该二叉树根的右子树的根是()。 A.EB.FC.GD.H 15.在下列选项中,()不是一个算法一般应该具有的基本特征。 A.确定性B.可行性 C.无穷性D.拥有足够的情报 16.下列关于队列的叙述中正确的是()。 A.在队列中只能插入数据B.队列可在任意位置删除和插入 C.队列是先进先出的线性表D.队列是先进后出的线性表 17.对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A.N+1B.NC.(N+1)/2D.N/2 18.在计算机中,算法是指()。 A.查询方法B.加工方法 C.解题方案的准确而完整的描述D.排序方法 19.栈和队列的共同点是()。 A.都是先进后出B.都是先进先出 C.只允许在端点处插入和删除元素D.没有共同点 20.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是()。 A.cedbaB.acbedC.decabD.deabc 21.在下列几种排序方法中,要求内存量最大的是()。 A.插入排序B.选择排序C.快速排序D.归并排序 22.数据结构中,与所使用的计算机无关的是数据的()。 A.存储结构B.物理结构 C.逻辑结构D.物理和存储结构 23.栈底至栈顶依次存放元素A、B、C、D,在第5个元素E入栈前,栈中元素可以出栈,则出栈序列可能是()。 A.ABCEDB.DBCEAC.CDABED.DCBEA 24.线性表的顺序存储结构和线性表的链式存储结构分别是()。 A.顺序存取的存储结构、顺序存取的存储结构 B.随机存取的存储结构、顺序存取的存储结构 C.随机存取的存储结构、随机存取的存储结构 D.顺序存取的存储结构、随机存取的存储结构 25.在单链表中,增加头结点的目的是()。 A.方便运算的实现B.使单链表至少有一个结点 C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现 26.算法分析的目的是()。 A.找出数据结构的合理性B.找出算法中输入和输出之间的关系 C.分析算法的易懂性和可靠性D.分析算法的效率以求改进 27.n个顶点的强连通图的边数至少有()条。 A.n–1B.n(n–1)C.nD.n+1 28.已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是()。 A.堆排序B.直接插入排序 C.快速排序D.直接选择排序 29.用链表表示线性表的优点是()。 A.便于插入和删除操作B.数据元素的物理顺序与逻辑顺序相同 C.花费的存储空间较顺序存储少D.便于随机存取 30.希尔排序法属于()类型的排序法。 A.交换类排序法B.插入类排序法C.选择类排序法D.堆排序法 31.数据的不可分割的单位是()。 A.元素B.结点C.数据类型D.数据项 32.下列关于数据结构的叙述中正确的是()。 A.数组是同类型值的集合 B.递归算法的程序结构比迭代算法的程序结构精炼 C.树是一种线性结构 D.用一维数组存储二叉数,总是以先序遍历的顺序存储各结点 33.链表不具有的特点是()。 A.不必事先估计存储空间B.可随机访问任意元素 C.插入删除不需要移动元素D.所需空间与线性表长度成正比 34.树是结点的集合,它的根结点数目是()。 A.有且只有1B.1或多余1C.0或1D.至少2 35.非空的循环单链表head的尾结点(由p所指向),满足()。 A.p–>next=NULLB.p=NULLC.p–>next=headD.p=head 二、填空题 1.算法的复杂度主要包括________复杂度和空间复杂度。 2.在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为3种: 前序遍历、________遍历和后序遍历。 3.设一棵完全二叉树共有500个结点,则在该二叉树中有________个叶子结点。 4.在最坏情况下,冒泡排序的时间复杂度为________。 5.栈的基本运算有3种: 入栈、退栈和________。 6.数据结构包括数据的逻辑结构、数据的________以及对数据的操作运算。 7.算法的基本特征是可行性、确定性、________和拥有足够的情报。 8.顺序存储方法是把逻辑上相邻的结点存储在物理位置________的存储单元中。 9.在最坏情况下,堆排序需要比较的次数为________。 10.若串s="Program",则其子串的数目是________。 11.数据结构包括数据的________结构和数据的存储结构。 12.实现算法所需的存储单元多少和算法的工作量大小分别称为算法的________。 13.从逻辑结构讲,数据结构主要分两大类,它们是________和________。 14.算法的5个重要特性是: 输入、输出、正确性、确定性和________。 15.线性表的链式存储结构主要包括单链表、________和________3种形式。 16.顺序存储方法是把逻辑上相邻的结点存储在物理位置________的存储单元中。 17.用链表表示线性表的突出优点是________。 1.4参考答案 一、选择题 1.C2.C3.B4.C5.D 6.A7.B8.D9.C10.B 11.C12.D13.B14.C15.C 16.C17.B18.C19.C20.A 21.D22.C23.D24.B25.A 26.D27.C28.B29.A30.B 31.D32.C33.B34.A35.C 二、填空题 1.时间2.中序3.25 4.n(n–1)/2n(n–1)/20(n(n–1)/2)0(n(n–1)/2) 5.读栈顶元素读栈顶的元素读出栈顶元素 6.存储结构7.有穷性 8.相邻9.O(nlog2n) 10.2911.逻辑 12.空间复杂度和时间复杂度13.线性结构,非线性结构 14.有穷性15.双链表,循环链表 16.相邻17.插入、删除方便
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法