《数据结构算法及应用C语言描述习题答案doc》由会员分享,可在线阅读,更多相关《数据结构算法及应用C语言描述习题答案doc(32页珍藏版)》请在金锄头文库上搜索。
1、-第1章 概 论1.数据、数据元素、数据构造、数据类型的含义分别是什么?数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。数据元素:数据的根本单位,在计算机程序常作为一个整体考虑。数据构造:数据元素之间的关系+运算,是以数据为成员的构造,是带构造的数据元素的集合,数据元素之间存在着一种或多种特定的关系。数据类型:数据类型是用来区分不同的数据;由于数据在存储时所需要的容量各不一样,不同的数据就必须要分配不同大小的存空间来存储,所有就要将数据划分成不同的数据类型。数据类型包含取值围和根本运算等概念。2.什么是数据的逻辑构造?什么是数据的物理构造?数据
2、的逻辑构造与物理构造的区别和联系是什么?逻辑构造:数据的逻辑构造定义了数据构造中数据元素之间的相互逻辑关系。数据的逻辑构造包含下面两个方面的信息: 数据元素的信息; 各数据元素之间的关系。物理构造:也叫储存构造,是指逻辑构造的存储表示,即数据的逻辑构造在计算机存储空间中的存放形式,包括结点的数据和结点间关系的存储表示。数据的逻辑构造和存储构造是密不可分的,一个操作算法的设计取决于所选定的逻辑构造,而算法的实现依赖于所采与的存储构造。采用不同的存储构造,其数据处理的效率是不同的。因此,在进展数据处理时,针对不同问题,选择合理的逻辑构造和存储构造非常重要。3.数据构造的主要操作包括哪些?对于各种数
3、据构造而言,他们在根本操作上是相似的,最常用的操作有:l 创立:建立一个数据构造;l 去除:去除一个数据构造;l 插入:在数据构造中增加新的结点;l 删除:把指定的结点从数据构造中删除;l 访问:对数据构造中的结点进展访问;l 更新:改变指定结点的值或改变指定的*些结点之间的关系;l 查找:在数据构造中查找满足一定条件的结点;l 排序:对数据构造中各个结点按指定数据项的值,以升序或降序重新排列。4.什么是抽象数据类型?如何定义抽象数据类型?抽象数据类型Abstract Data Type 简称ADT是指一个数学模型以及定义在此数学模型上的一组操作。ADT是与具体的物理存储无关的数据类型,因此,
4、不管ADT的部构造如何变化,只要其数据构造的特性不变,都不影响其外部使用。对抽象数据类型的描述一般用D,R,P)三元组表示,抽象数据类型的定义格式为:ADT数据对象D:数据关系R:根本操作P:ADT其中,D是数据对象,R是D上的关系集,P是对D的根本操作集。数据对象和数据关系的定义用伪代码来描述。根本操作的定义格式为:根本操作名参数表初始条件:操作结果:初始条件说明操作执行之前数据构造和参数应满足的条件;操作结果说明操作完成后,数据构造的变化状况和应返回的结果。5.什么是算法?算法的根本特征是什么?算法:是在有限的步骤解决数学问题的过程,是以一步接一步的方式来详细描述计算机如何将输入转化为所要
5、求的输出的过程,即算法是对计算机上执行的计算过程的具体描述。一个有效的算法必须满足的五个重要特性: 有穷性:算法必须能在有限的时间做完,即在任何情况下,算法必须能在执行有限个步骤之后终止,都不能陷入无穷循环中。确定性:算法中的每一个步骤,必须经过明确的定义,并且能够被计算机所理解和执行,而不能是抽象和模糊的概念,更不允许有二义性。输入:算法有0个或多个输入值,来描述算法开场前运算对象的初始情况,这是算法执行的起点或是依据。0个输入是指算法本身给出了运算对象的初始条件。 输出:算法至少有1个或多个输出值,反映对运算对象的处理结果,没有输出的算法没有任何意义。 可行性:算法中要做的运算都是根本运算
6、,能够被准确地进展。即算法中执行的任何计算都可以被分解为根本的运算步,每个根本的运算步都可以在有限的时间完成。6.什么是算法分析?算法分析主要考虑哪几方面的容?算法的研究与实际问题直接相关,用来解一个问题可以有很多不同的算法,他们之间的效果可能会有很大差异。算法设计者最关心的就是什么是有效的算法,如何评价一个算法的优劣,如何从多种算法中选择好的算法。除了要首先考虑算法的正确性外,还要分析和评价算法的性能。分析和评价算法的性能主要要考虑以下两个方面:时间代价:执行算法所消耗的时间。一个好的算法首先应该比其他算法的运行时间代价要小。算法的时间代价的大小用算法的时间复杂度来度量。空间代价:执行算法所
7、消耗的存储空间,主要是辅助空间。算法运行所需的空间消耗是衡量算法优劣的另一个重要因素。算法的空间代价的大小用算法的空间复杂度来度量。7.分析下面算法的时间复杂度。1答:时间复杂度为n22时间复杂度:n3时间复杂度:4时间复杂度:n25时间复杂度:O(log2n)8.算法设计中的递归、穷举、递推和迭代等算法的根本思想是什么?递推法:是利用问题本身所具有的一种递推关系求解问题的一种方法。它把问题求解分成假设干步,找出相邻几步的关系,从而到达求解问题的目的。具有如下性质的问题可以采用递推法:当得到问题规模为i-1的解后,由问题的递推性质,能构造出问题规模为i的解。因此,程序可以从i=0或i=1出发,
8、由i-1规模的解,通过递推,获得问题规模为i的解,直至得到问题规模为n的解。递归法:递归策略是利用函数直接或间接地调用自身来完成*个计算过程。能采用递归描述的算法通常有这样的特征:为求解规模为n的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出更大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出较大规模问题的解。穷举法:穷举搜索法也称穷举法或搜索法是对可能是解的众多候选解按*种顺序进展 逐一枚举和检验,并从中找出那些符合要求的候选解作为问题的解。迭代法:数值分析过从一个初始估计出发寻找一系列近似解来解决问题一般是
9、解方程或者方程组的过程,为实现这一过程所使用的方法统称为迭代法。9.算法设计中的分治策略、贪心策略、动态规划策略、回溯策略以及分支定界策略的根本思想是什么?分治策略的根本思想是把一个规模为n的问题划分为假设干个规模较小、且与原问题相似的子问题,然后分别求解这些子问题,最后把各子结果合并得到整个问题的解。分解的子问题通常与原问题相似,所以可以递归地使用分治策略来求解。贪心策略的根本思想是把一个整体最优问题分解为一系列的最优选择问题,决策一旦做出,就不能再更改。它是通过假设干次的贪心选择而得出最优解或较优解的一种解题策略。动态规划策略与贪心策略类似,将一个问题划分为重复的子问题,通过对一样子问题的
10、求解来解决较大问题,即将一个问题的解决方案视为一系列决策的结果。不同的是,在贪心策略中,每采用一次贪心准则便做出一个不可撤回的决策,可能得不到问题的最优解。而在动态规划中,处理要按照*种规则进展选择,还要考察每个最优决策序列中是否包含一个最优子序列,目的是得到问题的最优解。回溯策略也叫试探法,它的根本思想是:在一些问题求解进程中,先选择*一种可能情况向前探索,当发现所选用的试探性操作不是最正确选择,需退回一步,重新选择继续进展试探,直到找到问题的解或者证明问题无解。分支定界策略也经常被称为分支限界策略,它的根本思想是:首先确定目标值的上下界,然后一边搜索一边剪掉空间树的*些不可能产生最优解的分
11、支,提高搜索效率。. z.-第二章 线性表1具有什么特征的数据构造被称为线性表?线性表是一种最常用、最简单的典型线性数据构造,应用非常广泛。线性表是由nn0个数据元素组成的一个有限序列,线性表中数据元素的个数n称为线性表的长度。当n=0时,称为空表。对于非空线性表,数据元素之间存在一对一的关系,具体特性如下:第一个数据元素没有前驱;最后一个数据元素没有后继外;其他数据元素都是首尾相接、有且只有一个前驱和后继。2如何实现线性表的顺序存储构造?把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里就构成了线性表的顺序存储,采用顺序存储构造的线性表简称顺序表。线性表的顺序存储构造有如下特点:l
12、线性表中所有元素所占的存储空间是连续的;l 线性表的逻辑顺序与物理顺序一致;l 数组中的每一个元素的位置可以用公式来确定。假设线性表中的第一个数据元素的存储地址指第一个字节的地址,即首地址为 LOC(e1),每一个数据元素占k个字节,则线性表中第i个元素ei在计算机存储空间中的存储地址为:LOC(ei)=LOC(e1)+(i-1)k3如何实现线性表的4种链式存储构造?数据构造中的每一个数据元素对应于一个存储单元,这种存储单元称为存储结点,简称结点。每个结点分为两局部:一局部用于存放数据元素的值,称为数据域;另一局部是指针,用于指向与该结点在逻辑上相连的其他结点,称为指针域。对于线性表,指针域用
13、于指向该结点的前一个或后一个结点即前驱结点或后继结点。通过结点的指针域将n个结点按其逻辑构造连接在一起的数据存储构造,称为链式存储构造。单向链表:在线性链表中,用一个专门的指针指向线性表中第一个结点,每一个结点的指针都指向它的下一个逻辑结点,线性链表的最后一个结点的指针为空用NULL或0表示,表示链表终止,这样的线性链表称为单向链表。下列图是单向链表示意图。firste1e2 ei en NULLNULL NULL线性表的单向链式存储循环链表:将单向链表最后一个结点的指针指向头结点,这样整个链表就构成一个循环,这种链式存储构造称为单向循环链表,简称循环链表。头结点的指针域指向线性表的第一个元素
14、的结点;循环链表中最后一个结点的指针域不再是NULL,而是指向头结点。只有头结点的循环链表称为空循环链表。下列图是带头结点的非空循环链表和空循环链表示意图。e1headen 头结点head头结点a带头结点的非空循环链表 b带头结点的空循环链表带头结点的循环链表双向链表:双向链表的每个结点含有两个指针域,一个指针指向其前驱结点;另一个指针指向其后继结点。双向链表结点的构造下列图a所示。e2enb双向链表e1e2enc双向循环链表prev data ne*ta双向链表结点构造firstfirste1end双向循环链表:如果将双向链表第一个结点的prev指针指向最后一个结点,将最后一个结点的ne*t指针与指向第一个结点,就构成了双向循环链表。下列图b和c是双向链表和双向循环表的逻辑构造示意图。图双向链表结点构造及双向链表4顺序表和线性链表分别有哪些优点和缺点?线性表的顺序存储与链式存储比拟比拟容顺序存储链式存储结点存储空间少不需要为表示结点的逻辑关系增加开销多需要增加指针域来表示结点之间的逻辑关系空间利用率低采用数组,按表的最大长度静态分配存储空间高根据表的实际长度动态分配存储空间插入、删除操作慢需要大量移动元素快仅更改指针指向,不需要移动元素访问元素快直接访问慢通过指针移动才