算法与数据结构c语言版PPT,C语言算法与数据结构.ppt

253b171540df25e1b84436cbe50dfc72.gifC语言算法与数据结构.ppt

第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解。历次试题分值在04分之间波动。,12.1.1 考点1 算法的定义,算法是对一个问题求解步骤的一种描述,是求解问题的方法,它是指令的有限序列,其中每条指令表示一个或者多个操作。一般来说,一个算法具有以下5个主要特性。 有穷性一个算法(对任何合法的输入)在执行有穷步后能够结束,并且在有限的时间内完成。 确定性算法中的每一步都有确切的含义。 可行性算法中的操作能够用已经实现的基本运算执行有限次来实现。 输入一个算法有零个或者多个输入,零个输入就是算法本身确定了初始条件。 输出一个算法有一个或者多个输出,以反映出数据加工的结果。,12.1.2 考点2算法复杂度,算法复杂度包括时间复杂度和空间复杂度,是衡量一个算法好坏的度量。 1、时间复杂度基本操作重复执行的次数的阶数 Tnofn 2、空间复杂度是算法所需空间的度量。 G(n) Ofn,例1NXN矩阵相乘 fori1;in;i forj1;jn;j cij0; fork1;kn;k cijcijaik*bkj; ,12.2 数据结构的定义,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查数据的逻辑结构和存储结构。历次试题分值在04分之间波动。,12.2.1考点1什么是数据结构,一、基本概念和术语 数据(data所有能输入到计算机中去的描述客观事物的符号 数据元素(data element)数据的基本单位,也称节点(node)或记录(record) 数据项(data item)有独立含义的数据最小单位,也称域field 数据结构(data structure数据元素和数据元素关系的集合,数据的逻辑结构只抽象反映数据元素的逻辑关系 数据的存储(物理)结构数据的逻辑结构在计算机存储器中的实现 存储结构分为 顺序存储结构借助元素在存储器中的相对位置来表示数据元素间的逻辑关系 链式存储结构借助指示元素存储地址的指针表示数据元素间的逻辑关系,1536,元素21400,元素11346,元素3,元素41345,h,链式存储h,12.2.2考点2数据结构的图形表示,根据数据元素之间关系的不同,通常有4种结构集合、线性结构、树型结构和图状结构。,12.3线性表,线性表一般和其他知识点结合起来出题。在每次所考的数据结构、栈、队列、链表、查找、排序等试题中,均涉及线性表的概念。,12.3.1考点1线性表,一、线性结构特点在数据元素的非空有限集中 存在唯一的一个被称作“第一个”的数据元素 存在唯一的一个被称作“最后一个”的数据元素 除第一个外,集合中的每个数据元素均只有一个前驱 除最后一个外,集合中的每个数据元素均只有一个后继,二、线性表的逻辑结构 定义一个线性表是n个数据元素的有限序列,例 英文字母表(A,B,C,Z是一个线性表,特征 元素个数n表长度,n0空表 1in时 ai的直接前驱是ai-1,a1无直接前驱 ai的直接后继是ai1,an无直接后继,12.3.2考点2线性表的顺序存储结构 它用一组地址连续的存储单元来存储线性表的元素。 线性表中第i1个元素的存储位置locai1和第i个元素的存储位置loc(ai)满足以下关系 Locai1locaiS其中 S一个元素占用的存储单元个数 LOCai线性表第i个元素的地址 特点 实现逻辑上相邻物理地址相邻 实现随机存取 实现可用C语言的一维数组实现,12.3.2考点2线性表的顺序存储结构,线性表的第i个元素的存储位置为 Locailoca1i-1s 其中,loca1表示第1个数据元素的存储位置,一般被称为线性表的基地址。,12.3.3考点3线性表的插入和删除操作,线性表的插入操作是指在线性表的第i个元素与第i1个元素之间插入一个新的数据元素a,使长度为n的线性表 (a1,ai,ai1an) 变成长度为n1的线性表 (a1,ai,a,ai1an) 算法时间复杂度Tn 在长度为n的线性表中插入一个元素时,所需移动的元素的平均次数为n/2,12.3.3考点3线性表的插入和删除操作,删除操作是在线性表中删除一个元素ai,使长度为n的线性表 (a1,ai,ai1an) 变成长度为n-1的线性表 (a1,ai-1,ai1an) 算法时间复杂度Tn 在长度为n的线性表中删除一个元素所需移动的元素的平均次数为n-1/2,12.4栈,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查栈的定义、存储结构及基本运算。历次试题分值在02分之间波动。,12.4.1 考点1什么是栈,栈是限定仅在表尾进行插入和删除操作的线性表。 允许插入和删除的一端叫做栈顶,另一端叫做栈底。 不含有元素的栈叫做空栈。,12.4.2 考点2栈的顺序存储结构,栈的顺序存储结构是利用一组连续地址的存储单元来存储从栈底到栈顶的数据元素,同时附设一个指针top指示栈顶元素在顺序栈中的位置,一个指针base指示栈底元素的位置。,12.4.3 考点3栈的插入和删除运算,栈的插入和删除运算只能在栈顶进行。,12.5队列,该节知识点占试题比重为12,属于一般考查对象,主要考查队列的定义、存储结构及基本运算。从历次试题来看,队列还没有单独出过试题,一般以和其他知识点结合起来的试题形式出现。历次试题分值在02分之间波动。,12.5.1 考点1什么是队列,队列是限定了插入和删除操作的线性表。它只允许在表的一端进行插入操作,而在另外一端进行删除操作。队列中,允许插入元素的一端称为队尾,允许删除元素的一端称为队头。,12.5.2 考点2队列的顺序存储结构,与顺序栈类似,队列的顺序存储结构是利用一组连续地址的存储单元来存储从队头到队尾的数据元素,同时附设一个指针front指示队头元素在队列中的位置,一个指针rear指示队尾元素的位置。当插入新的队列元素时,rear增1;当删除队头元素时,front增1。,12.5.3 考点3队列的插入和删除运算,队列只允许在表的一端进行插入,而在表的另外一端进行删除,和我们生活中的队列一样是按照先进先出的原则,所以队列又称为先进先出的线性表。,12.6 线性单链表、双向链表与循环链表,该节知识点占试题比重为3,属于非重点考查对象,主要考查线性单链表、双向链表与循环链表的结构及基本运算。,12.7树,该节知识点所占试题比重为31,属于重点考查对象,每次必考,主要考查二叉树的定义、存储结构及3种遍历算法。,12.7.1 考点1树的定义,树型结构是一类重要的非线性数据结构。 树是n(n0)个结点的有限集。在任意一棵非空树中有且仅有一个特定的称为根的结点;当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2Tm,其中每一个集合本身又是一棵树,称为子树。,第六章 树和二叉树,树是一类重要的非线性数据结构,以分支关系描述数据元素之间的层次结构 6.1 树 定义树tree是nn 0个结点的有限集合T,其中 有且仅有一个特殊的结点,称为树的根结点root 当n1时,除根结点之外的其余结点可分为mm0个互不相交的有限集合T1,T2,Tm,其中每一个集合本身又是一棵树,称为根的子树subtree 特点 树中至少有一个结点根结点 树中各子树是互不相交的集合根,子树T1B,E,F,K,LT2C,GT3D,H,I.J.M,TA,TA,B,C,D,M,树的特点 1.树的根结点没有前驱结点,除根之外的所有结点都有且只有一个前驱结点; 2.树中所有的结点可以有0个或多个后继结点。 下图所示结构均不是树结构,基本术语 结点node表示树中的数据元素,包括数据项及若干指向其子树的分支 结点的度degree结点拥有的子树个数 树的度树中所有结点的度的最大值 叶子leaf结点度为0的结点 分支结点除叶子结点外的所有结点 孩子child结点子树的根称为该结点的孩子 双亲parents孩子结点的上层结点叫该结点的双亲,基本术语 兄弟sibling具有同一双亲的孩子结点 结点的层次level从根结点算起,根为第一层,它的孩子为第二层 深度depth树中结点的最大层次数 有序树树中各结点的子树按照从左到右的次序安排 无序树与上一情况相反 森林forestmm0棵互不相交的树的集合,结点A的度3 结点B的度2 结点M的度0,叶子K,L,F,G,M,I,J,结点A的孩子B,C,D 结点B的孩子E,F,结点I的双亲D 结点L的双亲E,结点B,C,D为兄弟 结点K,L为兄弟,树的度3,结点A的层次1 结点M的层次4,树的深度4,A,D,H是M的祖先 I是A,D的子孙,6.2 二叉树 定义 定义二叉树是nn0个结点的有限集,它或为空树n0,或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成 特点 每个结点至多有二棵子树即不存在度大于2的结点 二叉树的子树有左、右之分,且其次序不能任意颠倒,基本形态,二叉树性质 性质1 在二叉树的第i层上至多有2i1结点 i2,i1时,只有一个根结点,2i1201是对的。 假设对所有j1ji命题成立,即第j层上至多有2j1个结点。那么,第i-1层至多有 2i2 个结点。 又二叉树每个结点的度至多为2 第i层上最大结点数是第i-1层的2倍,即22i22i1 故命题得证,证明用归纳法证明之,二叉树性质,证明由性质1,可得深度为k 的二叉树最大结点数是,性质2深度为k的二叉树至多有2k1 个结点k1,性质3对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0n21,证明n1为二叉树T中度为1的结点数 因为二叉树中所有结点的度均小于或等于2 所以其结点总数nn0n1n2 又二叉树中,除根结点外,其余结点都只有一个 分支进入 设B为分支总数,则nB1 又分支由度为1和度为2的结点发出, Bn12n2 于是,nB1n12n21n0n1n2 n0n21,几种特殊形式的二叉树 满二叉树 定义一棵深度为k且有2k1 个结点的二 叉,特点每一层上的结点数都是最大结点数树称为满二叉树。,几种特殊形式的二叉树,完全二叉树 定义深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为 特点 叶子结点只可能在层次最大的两层上出现 对任一结点,若其右分支下子孙的最大层次为l,则其左分支下子孙的最大层次必为l 或l1,证明设所求完全二叉树的深度为k,由完全二叉树定义及性质2可得2k-1-1n2k-1 或 2k-1n2k 取对数后有k-1log2nk,即log2nklog2n1 又k必为整数, klog2n1,性质4 具有n个结点的完全二叉树的深度为,log2n1,性质5如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i1in,有 1 如果i1,则结点i是二叉树的根,无双 亲;如果i1,则其双亲是i/2 2 如果2in,则结点i无左孩子;如果 2in,则其左孩子是2i 3 如果2i1n,则结点i无右孩子;如果 2i1n,则其右孩子是2i1,二叉树的存储结构 顺序存储结构 实现按满二叉树的结点层次编号,依次存放二叉树中的数据元素 特点 结点间关系蕴含在其存储位置中 浪费空间,适于存满二叉树和完全二叉树,链式存储结构 二叉链表,typedef struct node datatype data; struct node *lchild, *rchild; JD;,在n个结点的二叉链表中,有n1个空指针域,12.7.5 考点5二叉树的遍历,遍历按照一定次序访问树中的所有结点, 且每个结点仅被访问一次的过程。,遍历二叉树的方法 先序遍历先访问根结点,然后分别先序遍历左子树、右子树 中序遍历先中序遍历左子树,然后访问根结点,最后中序遍历右子树 后序遍历先后序遍历左、右子树,然后访问根结点 按层次遍历从上到下、从左到右访问各结点,D L R,先序遍历序列A B D C,先序遍历,若二叉树为空,遍历结束。否则 (1)访问根结点; (2)先序遍历根结点的左子树; (3)先序遍历根结点的右子树。,L D R,中序遍历序列B D A C,中序遍历若二叉树为空,遍历结束。否则 (1)中序遍历根结点的左子树; (2)访问根结点; (3)中序遍历根结点的右子树。,L R D,后序遍历序列 D B C A,后序遍历,若二叉树为空,遍历结束。否则 (1)后序遍历根结点的左子树; (2)后序遍历根结点的右子树; (3)访问根结点。,先序遍历,中序遍历,后序遍历,层次遍历,-,,a,*,b,-,c,d,/,e,f,-,,a,*,b,-,c,d,/,e,f,-,,a,*,b,-,c,d,/,e,f,-,,a,*,b,-,c,d,/,e,f,12.8 查找算法,该节知识点占试题比重为9,属于一般考查对象,主要考查顺序查找和二分查找。历次试题分值在02分之间波动。,12.8 查找算法,查找表由同一类型的数据元素(或记录)构成的集合 关键字是数据元素中某个数据项的值,它可以标识一个数据元素 查找也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素,12.8 查找算法,查找方法评价 时间复杂度 空间复杂度 平均查找长度ASLAverage Search Length为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的,12.8.1 考点1 顺序查找 查找过程从表的一端开始逐个进行记录的关键字和给定值的比较,64,监视哨,比较次数5,比较次数 查找第n个元素 1 查找第n-1个元素2 . 查找第1个元素 n 查找第i个元素 n1-i 查找失败 n1顺序查找方法的ASL12.8.2 考点2二分查找 查找过程每次将待查记录所在区间缩小一半 适用条件采用顺序存储结构的有序表 算法实现 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low1,highn,midlowhigh/2 让k与mid指向的记录比较 若krmid.key,查找成功 若krmid.key,则lowmid1 重复上述操作,直至lowhigh时,查找失败算法描述12.9排序算法,该节知识点所占试题比重为9,属于一般考查对象,主要考查交换类排序、选择类排序及插入类排序。从历次试题来看,以选择题和填空题的形式出现,分值有波动,如图2-28所示。,12.9.1 考点1排序概述,10.1概述 排序将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫 排序分类 按待排序记录所在位置 内部排序待排序记录存放在内存 外部排序排序过程中需对外存进行访问的排序 按排序依据原则 插入排序直接插入排序、折半插入排序、希尔排序 交换排序冒泡排序、快速排序 选择排序简单选择排序、堆排序 归并排序2-路归并排序 基数排序,12.9.2 考点2插入类排序,直接插入排序 基本思想顺序地把待排序列中的各个记录按其关键字的大小,插入到已排序序列中的适当位置 排序过程整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序 直接插入排序方法是稳定的。,例,49 38 65 97 76 13 27,i2 38 38 49 65 97 76 13 27,i3 65 38 49 65 97 76 13 27,i4 97 38 49 65 97 76 13 27,i5 76 38 49 65 76 97 13 27,i6 13 13 38 49 65 76 97 27,i1 ,i7 13 38 49 65 76 97 27,27,97,76,65,49,38,27,10.3 交换排序 起泡排序(Bubble Sort) 基本思想通过相邻元素之间的比较和交换,使关键字较小的元素逐渐从底部移向顶部。 排序过程 将第一个记录的关键字与第二个记录的关键字进行比较,若为逆序r1.keyr2.key,则交换;然后比较第二个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止第一趟起泡排序,结果关键字最大的记录被安置在最后一个记录上 对前n-1个记录进行第二趟起泡排序,结果使关键字次大的记录被安置在第n-1个记录位置 重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止,例,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,10.4 选择排序 基本思想不断从待排序列中选取关键字最小的记录放到已排序列的最后一个记录后面,直到序列中所有记录都已排序为止。 简单选择排序 排序过程 首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换 再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换 重复上述操作,共进行n-1趟排序后,排序结束,例初始 49 38 65 97 76 13 27 ,i1,13,49,一趟 13 38 65 97 76 49 27 ,i2,27,38,六趟 13 27 38 49 65 76 97 ,排序结束 13 27 38 49 65 76 97,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 应用自动重启,Android 应用崩溃后自动重启的方法

public class HKApplication extends Application {private List activityList new ArrayList();Overridepublic void onCreate() {super.onCreate();// 以下用来捕获程序崩溃异常if (!Config.debug) {Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃…

android+自定义版本号,Android打包版本号设置方法

之前没有设置过打包的命名,每次打包都是默认的"app-realease.apk",之后手动修改名字来显示出它是一个新版本。晚上学习了如何配置打包名称,很简单,修改build.gradle里的代码就行。详细记录如下:1、打开app这…

android工程师饱和,Android开发是否饱和了?你所不了解的Android开发

原标题:Android开发是否饱和了?你所不了解的Android开发Android开发是否饱和了?是很多人关心的问题,对于想要从事Android开发的人更是头等大事。如今,就业难成横亘在求职者面前的难题,而与 之相反是互联网行业的高薪多…

android的读取xml配置文件,android中XMl文件的读取

废话不多说了直接上代码:新建一个Xml文件用于读取:test.xmljavaEclipseSwiftXcodeC#Visual Studio后台:import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Log;import android.widget.TextView…

android 获取wifi的加密类型,wifi加密类型

最近开发wifi方面的功能,需要根据wifi加密类型来展现UI。遇到了一个比较蛋疼的问题:如何判断wifi加密类型wifi的管理需要通过WifiManager来操作WifiManager mWifiManager (WifiManager) context.getSystemService(Context.WIFI_SERVICE);开启和关闭wifi…

android编译的tool版本有多少,macOS Mojave(10.14.2)系统上编译LunarG/VulkanTools工程的Android版本...

$ cd ~$ git clone https://github.com/LunarG/VulkanTools.git$ cd VulkanTools$ cd build-android$ export ANDROID_SDK_HOME~/Library/Android/sdk$ export ANDROID_NDK_HOME~/Library/Android/sdk/ndk-bundle# 当前的版本需要Android SDK 23.0.0,但是需要Java 11以下版本的…

android底部导航栏软件,三步搞定android应用底部导航栏

很多android应用底部都有一个底部导航栏,方便用户在使用过程中随意切换。目前常用的做法有三种:一种是使用自定义tabHost,一种是使用activityGroup,一种是结合FrameLayout实现。笔者再做了多款应用后,为了节约开发周期&#xff0c…

html列表滑动字母索引,js实现做通讯录的索引滑动显示效果和滑动显示锚点效果...

只做实现。。完全没考虑性能优化。所以我实现了以后特别卡。第一个是在通讯录右边的索引条上进行滑动,滑动到相应字母就跳转到相应字母的锚点上。思路:监听touchmove事件,获取clientX和clientY,传入到elementFromPoint&#xff0c…

html一行中怎么写空格,html – 用一行填写空格

如何创建一个下划线,填充文本行末尾和DIV宽度结束之间的空白区域.我正在尝试以下方法:我希望当屏幕变小时,产品线会中断.我希望价格保持在右边,并加下划线.最后一个单词(Mayo)和价格之间的空格必须自动填充下划线.大屏幕:老奶酪 – 沙拉,牛油果,鸡蛋,草药…

android 屏幕飘动,Android自定义View实现飘动的叶子效果(三)

上一篇对自定义View及一些方法有所了解,下面做一个简单的叶子飘动的例子主要技术点1、添加背景图片canvas.drawBitmap()2、Matrix动画类3、Matrix添加到画布上步骤1、添加黄色背景颜色public LeafView(Context context, AttributeSet attrs) {super(context, attrs)…

html加入购物车的动画,vue实现加入购物车动画

预备基础整体思路定义商品列表,设置点击的元素(点击后触发加入购物车的函数addToShopCart)注:这里要把$event传递过去,方便得到target定义一个component用来放购物车和运动的小球定义一个component用来放运动的小球,里面包含多个b…

html 美化input file,Input[type=”file”] 显示效果美化方法 | 智慧宫

Html中input可以作为上传图片代码如下但是演示非常不好看,下面做一番美化处理,效果如下:文件上传美化前后对比美化方法隐藏 input 标签使用 label 标签在input标签位置显示;用js获取 input 中上传的文件名称,并在 labl…

html 进入效果,用css3实现简单的进入效果

这是一个比较简单的小例子,实现如图效果仅仅用css3就可以达到这种效果,代码如下:.div {position: relative;top: 20px;height: 300px;width: 200px;margin: 0 auto;background: blue;float: left;margin-left: 20px;}.div2 {position: relati…

计算机专业中agp是什么意思,计算机中AGP是什么意思及其特性介绍

AGP (Accelerated Graphic Ports 或者 Advanced Graphic Ports) 是当前已经被淘汰的图形系统接口。这项技术始于十四年以前,当时的3D图形加速技术开始流行并且迅速普及,为了使系统和图形加速卡之间的数据传输获得比PCI总线更高的带宽,AGP便应…

统计应用计算机基础,计算机基础应用试题及答案参考

计算机基础应用试题及答案参考计算机技术与通信技术的结合,使计算机网络得到发展。信息服务业的兴起使社会信息资源得到更广泛的利用。下面是小编为大家搜索整理的计算机应用基础训练题,希望能给大家带来帮助!1、计算机病毒是(B)。A.计算机系统自生的B.一…

计算机目标导学方法,计算机教学计划

计算机教学计划信息技术课程是一门特殊比较的学科,操作性较强,大部分学生对此相当感兴趣。 以下是为大家整理的计算机教学计划,希望对你们有所帮助!篇一:计算机教学计划本学期我任教11级护理班的计算机应用基础课程教学…

java 网络编程connection timed out是什么意思_什么?听说这四个概念,很多 Java 老手都说不清...

Java 是很多人一直在用的编程语言,但是有些 Java 概念是非常难以理解的,哪怕是一些多年的老手,对某些 Java 概念也存在一些混淆和困惑。所以,在这篇文章里,会介绍四个 Java 中最难理解的四个概念,去帮助开发…

计算机相近专业有哪些,计算机相关的专业有哪些

计算机、会计及相关专业计算机及相关专业04015700 教育信息技术04034200 现代信息技术教育05034300 出版与电脑编辑技术05049300 互联网广告设计05047900 电脑艺术设计07010200 信息与计算科学07014100 计算数学及其应用软件07014200 信息科学07120100 电子信息科学与技术07120…

assembly 输出ab中所有数_.NET Core中批量注入Grpc服务

(给DotNet加星标,提升.Net技能)转自:张子浩cnblogs.com/ZaraNet/p/12167517.htmlGRPC 是谷歌发布的一个开源、高性能、通用RPC服务,尽管大部分 RPC 框架都使用 TCP 协议,但其实 UDP 也可以,而 gRPC 干脆就用了 HTTP2。…

福建高职计算机知识点,2013福建高职单招 计算机类专业 知识试题

2013福建高职单招 计算机类专业 知识试题计算机类专业基础知识试题第Ⅰ卷一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确的字母标号填涂在答题卡相应在位置上,每小题3分,共120分)1、 世界上第一台计算机(ENI…