13 数据结构与算法.doc_第1页
13 数据结构与算法.doc_第2页
13 数据结构与算法.doc_第3页
13 数据结构与算法.doc_第4页
13 数据结构与算法.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉三维教育C语言考试研究中心网址:第一章数据结构与算法第1页共5页第一章数据结构与算法考点一:算法算法:是指解题方案的准确而完整的描述。算法的基本特征:(1)可行性:程序必须得到满意的结果,所以要考虑算法的可行性;(2)确定性:算法中每一步都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;(3)有穷性:算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;(4)拥有足够的情报。算法的基本要素:(1)算法的控制结构。(2)对数据对象的运算和操作;基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。算法的3种基本控制结构:顺序结构、选择结构、循环结构。算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。算法复杂度:(1)时间复杂度:指执行算法所需要的计算工作量;(2)空间复杂度:指执行这个算法所需要的内存空间;指令系统:一个计算机系统能执行的所有指令的集合;考点二:逻辑结构和存储结构1数据结构的基本概念(1)数据结构:指相互有关联的数据元素的集合。(2)数据结构研究的3个方面:数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;对各种数据结构进行的运算。2逻辑结构数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成:B=(D,R)其中B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。例如,如果把一年四季看作一个数据结构,则可表示成B=(D,R)D=春季,夏季,秋季,冬季R=(春季,夏季),(夏季,秋季),(秋季,冬季)3.存储结构数据的存储结构是指数据的逻辑结构在计算机中的表示。一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。有序线性表既可以采用顺序存储结构,也可以采用链式存储结构。考点三:线性结构与非线性结构武汉三维教育C语言考试研究中心网址:第一章数据结构与算法第2页共5页根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。(1)线性结构必须满足的两个两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。线性结构又称线性表。在一个线性结构中插入或删除任何一个结点后还应是线性结构。(2)栈、队列、串等都线性结构。非线性结构:数据结构不是线性结构,则称之为非线性结构。数组、广义表、树和图等数据结构都是非线性结构。(3)线性表的顺序存储结构具有以下两个基本特点:线性表中所有元素所占的存储空间是连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。元素ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。线性表是由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。(4)顺序表的运算:查找、插入、删除。考点四:栈和队列栈:形象的比喻小学课本上讲乌鸦喝水用的杯子。限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。栈是支持子程序调用的数据结构。队列:形象比喻在食堂里打饭时排的长队,先来先服务指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。Rear指针指向队尾,front指针指向队头。当表中没有元素时称为空队列。队列是“先进先出”(FIFO)或“后进后出”(LILO)的线性表。队列运算包括:(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。循环队列:队列的头指针指向队列的尾指针,循环队列是队列的顺序存储结构。考点五:链表在链式存储方式中,要求每个结点由两部分组成:(1)用于存放数据元素值,称为数据域,(2)用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。链式存储方式既可用于表示线性结构,也可用于表示非线性结构。1)线性链表线性表的链式存储结构称为线性链表。武汉三维教育C语言考试研究中心网址:第一章数据结构与算法第3页共5页在某些应用中,对线性链表中的每个结点设置两个指针,一个称为左指针,用以指向其前件结点;另一个称为右指针,用以指向其后件结点。这样的表称为双向链表。在线性链表中,各数据元素结点的存储空间可以是不连续的,且各数据元素的存储顺序与逻辑顺序可以不一致。在线性链表中进行插入与删除,不需要移动链表中的元素。线性单链表中,HEAD称为头指针,HEAD=NULL(或0)称为空表。如果是双向链表的两指针:左指针(Llink)指向前件结点,右指针(Rlink)指向后件结点。线性链表的基本运算:查找、插入、删除。2)带链的栈栈也是线性表,也可以采用链式存储结构。带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈。考点六:二叉树及其基本性质1)二叉树及其基本概念树是一种简单的非线性结构,所有元素之间具有明显的层次特性。具有以下两个特点:非空二叉树只有一个根结点;每一个结点最多有两棵子树,且分别称为该结点的左子树和右子树。度:结点的左右子树的个数,每一个结点的度最大为2,即所有子树(左子树或右子树)也均为二叉树,在二叉树中,一个结点可以只有左子树而没有右子树,也可以只有右子树而没有左子树。树的度即为二叉树中最大的度的数。叶子结点:既没有左子树也没有右子树的结点。例如,一个家族中的族谱关系如图1-1所示:A有后代B,C;B有后代D,E;C有后代F;典型的二叉树如图1-1所示:父结点(根)在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个称为树的根结点。例如上图,结点A是树的根结点。子结点和叶子结点在树的结构中,每一个节点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。例如上图,结点D、E、F都为叶子结点。度在树结构中,一个结点拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。例如上图,根结点A和结点B的度为2,结点C的度为1,叶子结点D、E、F的度为0。所以,树的度为2。深度定义一棵树的根结点所在的层次为1,其他结点所在的层次等于它的父结点所在的层次加1。树的最大层次称为树的深度。例如上图,根结点A在第1层,结点B、C在第2层,结点D、E、F在第3层。该树的深度为3。子树在树中,以某结点的一个子结点为根构成的树称为该结点的一棵子树。ABCDEF武汉三维教育C语言考试研究中心网址:第一章数据结构与算法第4页共5页1)二叉树基本性质二叉树具有以下几个性质:性质1:在二叉树的第k层上,最多有2k-1(k1)个结点;性质2:深度为m的二叉树最多有2m-1个结点;性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。性质4:具有n个结点的二叉树,其深度至少为log2n+1,其中log2n表示取log2n的整数部分。1)满二叉树与完全二叉树满二叉树:除最后一层外,每一层上的所有结点都有两个子结点完全二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。2)二叉树的遍历二叉树的遍历:(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;并且,在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。例如,对图1-1中的二叉树进行前序遍历的结果(或称为该二叉树的前序序列)为:A,B,D,E,C,F。(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。例如,对图1-1中的二叉树进行中序遍历的结果(或称为该二叉树的中序序列)为:D,B,E,A,C,F。(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点;并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。例如,对图1-1中的二叉树进行后序遍历的结果(或称为该二叉树的后序序列)为:D,E,B,F,C,A。考点七:顺序查找查找是指在一个给定的数据结构中查找某个指定的元素。从线性表的第一个元素开始,依次将线性表中的元素与被查找的元素相比较,若相等则表示查找成功;若线性表中所有的元素都与被查找元素进行了比较但都不相等,则表示查找失败。例如,在一维数组21,46,24,99,57,77,86中,查找数据元素98,首先从第1个元素21开始进行比较,与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,所以查找成功。如果查找数据元素100,则整个线性表扫描完毕,仍未找到与100相等的元素,表示线性表中没有要查找的元素。在下列两种情况下也只能采用顺序查找:(1)如果线性表为无序表,则不管是顺序存储结构还是链式存储结构,只能用顺序查找。(2)即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。(有序表,存储的数据从小到大有规律存放)考点八:二分法查找二分法查找,也称拆半查找,是一种高效的查找方法。能使用二分法查找的线性表必须满足两个条件:用顺序存储结构;线性表是有序表。二分法查找只适用于顺序存储的有序表。例如,长度为8的线性表关键码序列为:6,13,27,30,38,46,47,70,被查元素为38,首先将与线性表的中间项比较,即与第4个数据元素30相比较,38大于中间项30的值,则在线性表38,46,47,70继续查找;接着与中间项比较,即与第2个元素46相比较,38小于46,则在线性表38继续查找,最后一次比较相等,查找成功。顺序查找法每一次比较,只将查找范围减少1,而二分法查找,每比较一次,可将查找范围减少为原来的一半,效率大大提高。武汉三维教育C语言考试研究中心网址:第一章数据结构与算法第5页共5页对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次,而顺序查找需要比较n次。考点九:排序技术(1)交换类排序法冒泡排序法首先,从表头开始往后扫描线性表,逐次比较相邻两个元素的大小,若前面的元素大于后面的元素,则将它们互换,不断地将两个相邻元素中的大者往后移动,最后最大者到了线性表的最后。然后,从后到前扫描剩下的线性表,逐次比较相邻两个元素的大小,若后面的元素小于前面的元素,则将它们互换,不断地将两个相邻元素中的小者往前移动,最后最小者到了线性表的最前面。对剩下的线性表重复上述过程,直到剩下的线性表变空为止,此时已经排好序。在最坏的情况下,冒泡排序需要比较次数为n(n-1)/2。快速排序法任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论