1、算法与数据结构C语言版课后习题参考答案机械工业出版社1绪论习题详细答案第1章 概论 习题参考答案一、基础知识 题1.简述下列概念数据,数据元素,数据类型,数据结构,逻辑结构,存储结构,算法。【解答】数据是信息的载体,是描述客观事物的数、字符,以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据元素是数据的基本单位。在不同的条件下,数据元素又可称为元素、结点、顶点、记录等。数据类型是对数据的取值范围、 数据元素之间的结构以及允许施加操作的一种总体描述。每一种计算机程序设计语言都定义有自己的数据类型。“数据结构” 这一术语有两种含义, 一是作为一门课程的名称; 二是作为一个科学的概念
2、。作为科学概念,目前尚无公认定义,一般认为,讨论数据结构要包括三个方面,一是数据的逻辑结构, 二是数据的存储结构, 三是对数据进行的操作(运算)。而数据类型是值的集合和操作的集合, 可以看作是已实现了的数据结构,后者是前者的一种简化情况。数据的逻辑结构反映数据元素之间的逻辑关系(即数据元素之间的关联方式或“邻接关系”),数据的存储结构是数据结构在计算机中的表示,包括数据元素的表示及其关系的表示。 数据的运算是对数据定义的一组操作, 运算是定义在逻辑结构上的,和存储结构无关,而运算的实现则依赖于存储结构。数据结构在计算机中的表示称为物理结构, 又称存储结构。 是逻辑结构在存储器中的映像,包括数据
3、元素的表示和关系的表示。逻辑结构与计算机无关。算法是对特定问题求解步骤的一种描述, 是指令的有限序列。 其中每一条指令表示一个或多个操作。一个算法应该具有下列特性:有穷性、确定性、可行性、输入和输出。2.数据的逻辑结构分哪几种,为什么说逻辑结构是数据组织的主要方面?【解答】数据的逻辑结构分为线性结构和非线性结构。 (也可以分为集合、线性结构、树形结构和图形即网状结构)。逻辑结构是数据组织的某种“本质性”的东西:(1)逻辑结构与数据元素本身的形式、内容无关。(2)逻辑结构与数据元素的相对位置无关。(3)逻辑结构与所含数据元素的个数无关。3.试举一个数据结构的例子, 叙述其逻辑结构、 存储结构、运
4、算三方面的内容。【解答】如学生成绩表,逻辑结构是线性结构,可以顺序存储(也可以链式存储),运算可以有插入、删除、查询、等等。4.简述算法的五个特性,对算法设计的要求。【解答】算法的五个特性是:有穷性、确定性、可行性、零至多个输入和一至多个输出。1/11对算法设计的要求: 正确性,易读性,健壮性,和高的时空间效率 (运算速度快,存储空间小)。5.设 n 是正整数,求下列程序段中带 记号的语句的执行次数。(1)i=1;k=0;(2) i=1;j=0;while(in)while (i+jj)j+;elsei+; (3)x=y=0;(4)x=91;y=100;for (i=0;i0)for (j=0
5、;j100)x+;x=x-10; y-;for (k=0;kn;k+) y+;else x+;【解答】 (1)n-1(2)n为偶数时,均为 n div 2;你为奇数时,分别为: (n div 2)+1和 n div 2(3)n+1, n(n+1), n2,(n+1)n 2 , n 3(4)100, 10006.有实现同一功能的两个算法 A1和 A2,其中 A1 的时间复杂度为 Tl=O(2 n ) ,A2的时间复杂度为 T2=O(n2) ,仅就时间复杂度而言,请具体分析这两个算法哪一个好 ?【解答】对算法 A1 和 A2 的时间复杂度 T1 和 T2 取对数,得 nlog2 和 2logn 。
6、显然,当 n4 时,算法 A2 好于 A1。7. 选择题:算法分析的目的是( )A、找出数据结构的合理性 B 、研究算法中的输入和输出的关系C、分析算法的效率以求改进 D 、分析算法的易懂性和文档特点【解答】 C二、算法设计题8.已知输入 x,y,z 三个不相等的整数,设计一个“高效”算法,使得这三个数按从小到大输出。 “高效”的含义是用最少的元素比较次数、 元素移动次数和2/11输出次数。void Best() / 按序输出三个整数的优化算法 int a,b,c,t;scanf( “%d%d%d”,&a,&b,&c); if(ab)t=a; a=b; b=t: /a 和 b 已正序if(bc
7、)t=c; c=b; /c 已到位if(at) b=a; a=t; /a 和 b 已正序else b=t;/ifprintf( “%d,%d,%dn” ,a,b,c);/最佳 2 次比较,无移动;最差 3 次比较, 7 个赋值9在数组 An 中查找值为 k 的元素,若找到则输出其位置 i(1 i n) ,否则输出 0 作为标志。设计算法求解此问题,并分析在最坏情况下的时间复杂度【题目分析】 从后向前查找,若找到与 k 值相同的元素则返回其位置,否则返回 0。int Search(ElemType An+1, ElemType k)i=n;wile(i=1)&(Ai!=k) i-;if(i=1)
8、 return i;else return 0;当查找不成功时,总的比较次数为 n+1 次,所以最坏情况下时间复杂度为 O(n)。3/11第 2 章 线性表 习题参考答案一、基础知识题2.1 试述头指针、头结点、元素结点、首元结点的区别,说明头指针和头结点的作【解答】指向链表第一个结点(或为头结点或为首元结点)的指针称为头指针。“头指针”具有标识一个链表的作用,所以经常用头指针代表链表的名字,如链表L 既是指链表的名字是 L ,也是指链表的第一个结点的地址存储在指针变量L 中,头指针为“ NULL ”则表示一个空表。有时, 我们在整个线性链表的第一个元素结点之前加入一个结点,称为头结点, 它的
9、数据域可以不存储任何信息(也可以做监视哨或存放线性表的长度等附加信息),指针域中存放的是第一个数据结点的地址,空表时为空。“头结点”的加入,使插入和删除等操作方便统一。元素结点即是数据结点,至少包括元素自身信息和其后继元素的地址两个域。首元结点是指链表中第一个数据元素的结点;为了操作方便, 通常在链表的首元结点之前附设一个结点,称为头结点。2.2 分析顺序存储结构和链式存储结构的优缺点,说明何时应该利用何种结构。【解答】从空间上来看,当线性表的长度变化较大,难以估计其规模时,选用动态的链表作为存储结构比较合适, 但链表除了需要设置数据域外,还要额外设置指针域, 因此当线性表长度变化不大,易于事
10、先确定规模时,为了节约存储空间,宜采用顺序存储结构。从时间上看, 顺序表具有按元素序号随机访问的特点,在顺序表中按序号访问数据元素的时间复杂度为 O(1) ;而链表中按序号访问的时间复杂度为O(n) 。所以如果经常按序号访问数据元素,使用顺序表优于链表。在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此 n 较大时顺序表的插入和删除效率低。在链表中作插入、删除,虽然也要找插入位置,但操作主要是比较操作。从这个角度考虑显然链表优于顺序表。总之,两种存储结构各有长短,选择那一种存储结构,由实际问题中的主要因素决定。2.3 分析在顺序存储结构下插入和删除结点时平均需要移动多少个结点。【解答
11、】 平均移动表中大约一半的结点,插入操作平均移动个结点, 删除操作平均移动个结点。具体移动的次数取决于表长和插入、删除的结点的位置。2.4 为什么在单循环链表中常使用尾指针,若只设头指针,插入元素的时间复杂度如何?【解答】 单循环链表中无论设置尾指针还是头指针都可以遍历表中任一个结点。设置尾指针时,若在表尾进行插入元素或删除第一元素,操作可在O(1) 时间内完成;若只设置头指针,表尾进行插入或删除操作,需要遍历整个链表,时间复杂度为O(n) 。2.5 在单链表、双链表、单循环链表中,若知道指针p 指向某结点,能否删除该结点,时间复杂度如何?【解答:】以上三种链表中,若知道指针p 指向某结点,都
12、能删除该结点。双链表删除p 所指向的结点的时间复杂度为O(1) ,而单链表和单循环链表上删除p 所指向的结点的时间复杂度均为 O(n) 。2.6 下面算法的功能是什么?LinkedList Unknown(LinkedList la)LNode *q , *p;if(la & la-next)q=la; la=la-next; p=la;while(p-next) p=p-next;4/11p-next=q; q-next=null;return la;【解答】将首元结点删除并插入到表尾(设链表长度大于 1)。2.7 选择题:在循环双链表的 *p 结点之后插入 *s 结点的操作是( )la、
13、p-next=s; s-prior=p; p-next-prior=s; s-next=p-next;B、 p-next=s; p-next-prior=s; s-prior=p; s-next=p-next;lc、 s-prior=p; s-next=p-next; p-next:=s; p-next-prior=s;D、 s-prior=p; snext=pnext; pnext-prior =s; p-next=s;【解答】 D2.8 选择题: 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。la顺序表 B双链表 lc带头结点的双循环链表 D单循环链表【解答】 la二、算法设计题2.9 设 ha 和 hb 分别是两个带头结点的非递减有序单链表的头指针,试设计算法, 将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,表中无重复数据。【题目分析】 因为两链表已按元素值非递减次序
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1