C语言数据结构

  • 格式:pdf
  • 大小:21.60 KB
  • 文档页数:10
page 1
一般情况下,如果要删除第i(1<=i<=n)个元素,则原来第i个元素之后的所有元 素都必须依次向前移动一个位置。 1.4.1栈和队列 *考点十栈及基本运算 栈是限定在一端进行插入与删除的线性表。栈顶元素总是最后插入的元素,也是 最先被删除的元素。按照“先进后出”(FILO-First In Last Out )的原则。由此可 以看出,栈有记忆作用。通常用top指针指向栈顶元素,用bottom指针指向栈底元素。
page 2
(2)深度为m的二叉树最多有2*m-1个结点。(1、2中*代表次幂) (3)在任意一棵二叉树中,度为0的结点总是比度为2的结点多一个。 (4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]取整数部分 (表示以2为底)。 注:(4)根据(2)得到 在满二叉树中,每一层上的结点都达到最大值,即在满二叉树的第k层上有2*(k -1)个结点,且深度为m的满二叉树有2*m-1个结点。注意:2的(k-1)次幂与2的m次幂 减一的区别。 完全二叉树指除最后一层外,每一层上的结点数均达到最大值;在最后一层上只 缺少右边的若干结点。 满二叉树是完全二叉树,而完全二叉树不一定是满二叉树。 考点17 二叉树的存储结构 与线性链表类似,二叉树通常采用链式存储结构。用于存储二叉树中各元素的存 储结点也由两部分组成:数据域与指针域。指针域有两个一个指向左子结点存储地址 ,称为左指针域,另一个为右指针域。 *考点18 二叉树的遍历 二叉树的遍历是指不重复地访问二叉树中的所有结点。 二叉树的遍历可以分三种: (1)前序遍历。若二叉树为空,则结束返回。否则:根结点、左子树、右子树。
本文由dongjinxiao贡献 您下载的该电子书来自:TXT书库 欢迎访问: www.txtsk.com 数据结构与算法 1.1算法 考点一 算法的基本概念 算法是指解题方案的准确而完整的描述。 算法的基本特征:可行性、确定性、有穷性和拥有足够的情报 算法的两要素:一是对数据对象的运算和操作(算术、逻辑、关系运算等),二 是算法的控制结构。算法的主要特征是着重于算法的动态执行。算法的控制结构不仅 决定了算法中各操作的执行顺序,而且也直接反映了算法的设计是否符合结构化原则 。 描述算法的工具有传统的流程图、N-S结构化流程图、算法描述语言等。 算法设计基本方法有列举法、归纳法、递推、递归、减半递推技术和回溯法。 *考点二 算法的复杂度 (1)时间复杂度。是指执行算法所需要的计算工作量。而算法的工作量用算法 所执行的基本运算次数来度量,基本运算次数与问题的规模有关。 对于一个固定的规模,算法所执行的基本运算次数还与特定的输入有关。如果算 法执行所需的基本运算次数取决于某一特定输入时,可用平均性态分析和讨论算法在 最坏情况下的时间复杂度来分析。 (2)空间复杂度。指算法所需要的内存空间(算法程序、输入的初始数据所占 的存储空间等)。 1.2数据结构的基本概念 考点三 什么是数据结构 数据结构是指相互关联的数据元素的集合。 数据的逻辑结构,反映数据元素之间逻辑关系的数据结构。 数据的存储结构,数据的逻辑结构在计算机存储空间中的存放形式。 考点四 数据结构的图形表示 数据结点。每一个数据元素用中间标有元素值的方框表示,称之为数据结点并简 称结点。为了进一步表示各数据元素之间的关系,用一条有向线段吧从前件结点指向 后件结点。 没有前件的结点成为根结点;没有后件的结点称为终端结点(叶子结点) *考点五 线性结构和非线性结构 线性结构: 如果一个非空的数据结构满足下列两个条件: 有且只有一个根结点(有且只有一个终端结点); 每一个结点最多有一个前件,也最多有一个后件。 则称该数据结构为线性结构。线性结构又称线性表。但特别需要说明的是,在一 个线性结构中插入或删除任何一个结点后还应该是线性结构。线性结构和非线性结构 都可以是空的数据结构。 矩阵、栈、队列都是线性表。(矩阵是较复杂的线性表,既可以把每一行看成一 个数据元素,也可以把每一列看成是一个数据元素) *考点七 线性表的顺序存储结构 线性表的顺序存储结构有以下两个基本特点: 线性表中所有元素所占的存储空间是连续的; 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 在用一位数组存放线性表时,该一维数组的长度通常要定义得比线性表的实际长 度大一些。 考点八 顺序表的插入运算 一般情况下,如果插入运算在第i(1<=i<=n)个元素之前进行,则原来第i个之 后(包括第i个元素)的所有元素都必须移动。 考点九 顺序表的删除运算
(2)中序遍历。左子树、根结点、右子树。 (3)后序遍历。左子树、右子树、根结点。 1.7 查找技术 *考点19 顺序查找 在进行顺序查找过程中,如果线性表中的第一个元素就是被查找元素,则只需做 一次比较便查找成功,查找效率最高;如果被查找的元素是线性表中的最后一个元素 ,或者被查元素不在线性表中,则需要与线性表中的所有元素进行比较,这是顺序查 找的最坏情况。在平均情况下,利用顺序查找法在线性表中查找一个元素,大约要与 线性表中的一半元素进行比较。 (在下列两种情况下只能采用顺序查找:一线性表为无序表即表中元素的排列是 无序的;二即使是有序线性表,如果采用链式存储结构,也只能采用顺序查找。) *考点20 二分法查找 二分法查找只适用于顺序存储的有序表。在此说的有序表是指线性表中的元素按 值非递减排列(即从小到大,但允许相邻元素值相等)。 对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较log2n次,而 顺序查找需要比较n次。 1.8排序技术 *考点21 交换类排序法 交换类排序法有:冒泡法、快速排序法 假设线性表的长度为n,在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫 描和n/2遍的从后往前的扫描,需要比较次数为n(n-1)/2。一般情况下要小于这个工作 量。 快速排序法的关键是对线性表进行分割,以及对各分割出的子表再进行分割。每 次只能对一个子表进行再分割,需要将暂时不分割的子表记忆起来,这就要用一个栈 来实现。 *考点22 插入类排序法 插入类排序法有:简单插入法、希尔排序法 插入排序是指将无序序列中的各元素依次插入到已经有序的线性表中。且在每一 次比较后最多移掉一个逆序,因此,与冒泡排序法相同,在最坏情况下,简单插入排 序法需要n(n-1)/2次比较。 希尔排序法的效率与所选取的增量序列有关。在最坏情况下,希尔排序法所需要 的比较次数为O(n*1.5)。n的1.5次幂
栈的三种基本运算:入栈运算、退栈运算和读栈运算。 (1)入栈运算是指在栈顶位置插入一个新元素。这个运算有两个基本操作:首 先将栈顶指针(top加一)进一,然后将新元素插入到栈顶指针指向的位置。 当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,再进行入栈 操作称为“上溢”错误。 (2)退栈运算。首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量 ,然后将栈顶指针退一(top减一)。 当栈顶指针为0时,说明栈空,不可能进行退栈操作。这种情况称为“下溢”错 误。 (3)读栈运算。读栈顶元素是指将栈顶元素赋给一个指定的变量。必须注意, 这个运算不删除栈顶元素,只是将它的值赋给一个变量,因此,在这个运算中,栈顶 指针不会改变。 *考点十 队列及基本运算 队列是指允许在一端(rear)进行插入,另一端进行(front)删除的线性表。 按照“先进先出”原则。 通常用rear指向队尾元素,用front指向排头元素的前一个位置。 入队运算,rear指针加一,front指针不变; 退队运算,front指针加一,rear指针不变。 1.5 线性链表 *考点12 线性链表的基本概念 补充:假设数据结构中的每一个数据结点对应于一个存储单元,这种存储单元称 为存储结点,简称结点。 在链式存储方式中,要求每个结点都由两部分组成:一部分用于存放数据元素值 ,称为数据域;另一部分用于存放指针,成为指针域。其中指针用于指向该结点的前 一个或后一个结点(即前件或后件)。 在链式存储结构中,存储数据结构的存储空间可以不连续,个数据结点的存储顺 序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来 确定的,链式存储方式既可以用于表示线性关系结构,也可用于表示非线性结构。 1.6树与二叉树 考点15 树的基本概念 树是一种简单的非线性结构。 在树结构中,每一个结点只有一个前件,称为父结点。没有前件的结点只有一个 ,称为树的根结点,简称树的根。 在树结构中,每一个结点可以有多个后件,它们都称为该结点的子结点。没有后 件的结点称为叶子结点。 在树的结构中,一个结点所拥有的后件个数称为该结点的度。所有结点中最大的 度称为树的度。 树是一种层次结构。树的最大层次称为树的深度。 *考点16 二叉树及基本性质 二叉树具有以下两个特点: (1)非空二叉树只有一个根结点; (2)每个结点最多有两棵子树,且分别称为该结点的左子树和右子树。 二叉树有以下性质: (1)在二叉树的第k层上,最多有2*(k-1)(k>=1)个结点。
pageቤተ መጻሕፍቲ ባይዱ3
*考点23 选择类排序法 简单选择排序法(扫描整个表找出最小元素交换到表的最前面)在最坏情况下需 要比较n(n-1)/2次。 堆排序的方法对于规模较小的线性表并不合适,但对于较大规模的线性表来说是 很有效率。在最坏情况下,堆排序需要比较的次数为O(nlog2n)。 习题一: 1.在深度为5的满二叉树中,叶子结点的个数为() 1.设树T的度为4,其中度为1,2,3,4的结点个数分别是4,2,1,1.则T中的叶 子结点数为() 1.设一棵完全二叉树共有700个结点,则在该二叉树中有()个叶子结点。 1.设一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历 结果为() 1.在一个容量为15的循环队列中,若头指针front=6,尾指针rear=9,则该循环 队列中共有()个元素。 答案:16,8,350,DEBFCA,3 注:完全二叉树中叶子结点书目是总结点的一半,偶数除2,奇数+1除2。 第二章 程序设计基础(占3%) 2.1 程序设计方法与风格 *考点1 程序设计方法与风格 程序设计风格会深刻影响软件的质量和可维护性,良好的程序设计风格可以使程 序结构清晰合理,使程序代码便于维护。程序设计风格应以“清晰第一,效率第二” 为原则。 要形成良好的程序设计风格,主要应该考虑下述一些因素。 源程序文档化(符号名的命名易于理解、正确的程序注释包括序言性注释和功能 性注释) 数据说明的方法(次序规范化、语句中变量安排有序化、使用注释说明复杂数据 的结构) 语言结构。一行内只写一条语句;清晰第一,效率第二;首先要保证程序正确, 然后才要求提高速度;避免使用临时变量而降低程序的可读性;避免不必要的转移; 尽可能使用库函数;避免复杂的条件语句;尽量减少使用否定条件的条件语句;数据 结构要有利于程序的简化;要模块化,使模块尽可能单一化;利用信息隐蔽,确保每 一个模块的独立性;从数据出发去构造程序;不要修补不好的程序,要重新编写。 输入和输出。对所有的输入数据都要检验数据的合法性;检查输入项的各种重要 组合的合理性;输入格式要简单,以使得输入的步骤和操作尽可能简单;输入数据时 ,应允许使用自由格式;应允许缺省值;输入一批数据时,最好使用输入结束标志。