数据结构讨论小课堂和习题解答(共53页).doc





《数据结构讨论小课堂和习题解答(共53页).doc》由会员分享,可在线阅读,更多相关《数据结构讨论小课堂和习题解答(共53页).doc(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上讨论小课堂 1数据结构课程主要讨论哪三个方面?1.2.存储结构3.数据操作1.算法和程序的区别是什么呢?【参考答案】:算法的含义与程序十分相似,但又有区别。一个程序不一定满足有穷性。例如,操作系统,只要整个系统不遭破坏,它将永远不会停止,即使没有作业需要处理,它仍处于动态等待中。因此,操作系统不是一个算法。另一方面,程序中的指令必须是机器可执行的,而算法中的指令则无此限制。算法代表了对问题的解,而程序则是算法在计算机上的特定的实现。一个算法若用程序设计语言来描述,则它就是一个程序。算法与数据结构是相辅相承的。解决某一特定类型问题的算法可以选定不同的数据结构,而且选择恰
2、当与否直接影响算法的效率。反之,一种数据结构的优劣由各种算法的执行来体现。要设计一个好的算法通常要考虑以下的要求。正确。算法的执行结果应当满足预先规定的功能和性能要求。可读。一个算法应当思路清晰、层次分明、简单明了、易读易懂。健壮。当输入不合法数据时,应能作适当处理,不至引起严重后果。高效。有效使用存储空间和有较高的时间效率。2,你认为应该如何评估一个数据结构或算法的有效性。【参考答案】:前提之一是算法的正确性;其二还必须考虑执行算法所耗费的时间和执行算法所耗费的空间(主要是只指辅助空间),以及算法是否易读、易编码和易于调试。3,讨论数据结构的重要性。【参考答案】:如今计算机的应用已深入到社会
3、生活 的各个领域,计算机处理的对象由单纯的数值 发展到字符、图象、声音等,表示这些对象的数据成分往往不是单一的,而是多成分且形成一定的结构。因此,在程序设计中,除了应精心设计算法外 ,还应精心组织数据(包括原始数据、中间结果 、最终结果),使之形成一定的组织形式(数据结构 ),以便让计算机尽可能高效率地处理。在实际程序设计的实践中 ,数据结构和算法是不同的但又是互相联系的两个方面。我们甚至还可以说 ,问题的算法往往取决于选定的数据结构 。 所以N.Wirth 教授认为 程序设计=算法+数据结构。我们已经初步地学习了高级语言(例如pascal)的程序设,掌握了一些程序设计方法与技巧 。然而,这些
4、方法与技巧对于现实的程序设计工作来说 ,是远远不够的。以下举几个例子加以说明 。例1 求真分数117/29 的值,求到小数点后50位例2 求真分数 7/27 的值,精确到小数点后50 位。1. 输出 117 /29的值。2. a 余数。b293. aa * 10 。4. 输出 a/b 的商。5. a余数。6. 如未达要求,转 3 ,否则结束。例3 从键盘输入若干个数 ,并将其排序输出。相同的数,只输出一个。本例似乎不难 ,可以采取的策略之一:用一个数组来存放输入的数,然后排序输出。策略之二:边输入边排序。我们注意到:输出只能是不同的数 ,因而这是一个搜索加排序的问题。所以,不论采取那一种策略
5、,用数组这一种结构不是最佳的结构,因为效率很低。事实上,若用二叉树作为存储结构,效率则会大大提高。例4 工作安排的可行性问题 。为了直观了解工作环节之间的制约关系,通常用有向图来表示这种安排。 习题11. 抽象数据类型的定义由哪几部分组成? 1.1【参考答案】:数据对象、数据关系和基本操作三部分。 2. 按数据元素之间的逻辑关系不同,数据结构有哪几类? 1.2【参考答案】:线性结构、树型结构、图状结构和集合四类。 3. 你能举出几个你熟悉的序列的例子来吗? 1.3【参考答案】:如:0,1,2,9,A,B,C,Z。 4. 简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类型和抽象
6、数据类型。5.数据结构和数据类型两个概念之间有区别吗?1.5【参考答案】:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。6. 简述线性结构与非线性结构的不同点。1.6【参考答案】:线性结构反映结点间的逻辑关系是 一对一的,非线性结构反映结点间的逻辑关系是多对多的。7. 有下列两段描述:(1)void pro1( ) (2)void pro2( ) n=2; y=0; While(n%2=0) x=5/y; n=n+2; printf(“%d,%dn,x,y); printf(“%dn”,n); 这两段描述均不能满
7、足算法的特征,试问它们违反了算法的那些特征?1.7【参考答案】:(1)是一个死循环,违反了算法的有穷性特征。(2)出现除零错误,违反了算法的可行性特征。8. 分析并写出下面的各语句组所代表的算法的时间复杂度。 (1) for (i=0; in; i+)for (j=0; jm; j+)Aij=0;【参考答案】:O(m*n)(2) k=0; for( i=1; i=n; i+) for (j=i ; j=n; j+) k+; 【参考答案】:O(n2) (3) i=1; while(i=n) i=i*3;【参考答案】:3 T(n)n即:T(n) log3n =O(log3n)所以:T(n)= O(
8、log3n) (4) k=0; for( i=1; i=n; i+) for (j=i ; j=n; j+) for (k=j ; k=n; k+) x += delta; 【参考答案】:O(n3)(5) for(i=0,j=n-1;ij;i+,j- -)t=ai; ai= aj; ai=t;【参考答案】:基本语句共执行了n/2次,T(n)=O(n)(6) x=0;for(i=1; in; i+) for (j=1; j=0&elemix) elemi+1=elemi; i-; elemi+1=x;length+;方法二:链式存储结构void insert(ElemType x) NodeTy
9、pe *p,*q,*s; p=L;q=q-next; while(q!=NULL&q-datanext; s=new NodeType; s-data=x; p-next=s; s-next=q;2.观察下面的算法,此算法完成如下功能:在非递减有序表中删除所有值为X的元素。问:如何改进此算法,使得算法效率提高? void Deletaz(ElemType x) int i=0,j; while (ilength& elemix) i+; if(i=length) cout”X不存在”endl; else while(elemi=x) for(j=I;jlength;j+) elemj=elem
10、j+1; length-;【答案】void delete(ElemType x) int i=0,j,n; while(ilength&elemix) i+; if(i=length) cout“no x”endl; else while(elemi=x) n+;i+; for(j=i;jlength-1;j+) elemj-n=elemj; length=length-n; 3试设计一个算法,将线性表中前 m 个元素和后 n 个元素进行互换,即将线性表 (a1, , , am, b1, b2, , bn ) 改变成(b1, b2, , bn, a1, a2, , am ) 要求采用顺序存储结
11、构及链式存储结构分别完成,并比较采用这两种存储结构,其算法效率哪种存储结构更好?【答案】试设计一个算法,顺序表中前 m 个元素和后 n 个元素进行互换,即将线性表 (a1, a2, , am, b1, b2, , bn ) 改变成 (b1, b2, , bn, a1, a2, , am ) 。 算法 1:进行三次“逆转顺序表”的操作。算法 2:从 b1开始,从原地删除之后插入到 a1 之前直至 bn。例如:具体实例: a, b, c, d, e, f, g ,1, 2,3,4,5改变成1, 2,3,4,5,a, b, c, d, e, f, g54gfedcba3213gfedcba54321
12、ji算法 1:void invert( ElemType R,int s, int t ) /* 本算法将数组 R 中下标自 s 到 t 的元素逆置, 即将(Rs, Rs+1, , Rt-1, Rt ) 改变为(Rt, Rt-1, , Rs+1, Rs )*/ void exchange ( SqList A; int m ) /*本算法实现顺序表中前 m 个元素和后 n 个元素的互换*/ n = A.length m; invert( A.elem, 0, A.length ); invert( A.elem, 0, n-1 ); invert( A.elem, n, m+n-1 ); 算法
13、 2:void exchange( SqList A, int m ) /* 实现顺序表 A 中前 m 个元素和后 n 个元素互换*/for ( i=0; j = m; ji; k- ) A.elemj = A.elemj-1; A.elemi = x;算法的时间复杂度:为: O(mn)算法设计: 将 (b1, b2, , bn )从链表的当前位置上删除之后再插入 a1 到之前,并将 am设为表尾。a1a2amb1b2bnLtahbtbta-next=NULL;tb-next = L-next;L-next = hb;void exchange( SLink &L, int m ) / 互换链
14、表中前 m 个和后 n 个结点 ta = L; i = 0; while ( ta & inext; i+; / whileif ( ta & ta-next ) / m next; tb = hb; while (tb-next) tb = tb-next; / 查询表尾 bn修改指针 算法的时间复杂度:为:O(ListLength(L)4讨论线性表的逻辑结构和存储结构的关系,以及不同存储结构的比较。【答案】存储结构分为:顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系 数据的逻辑结构只抽象反映数据元素的逻辑
15、关系数据的存储(物理)结构数据的逻辑结构在计算机存储器中的实现数据的逻辑结构与存储结构密切相关: 算法设计 逻辑结构 算法实现 存储结构 顺序表:可以实现随机存取:O(1) 插入和删除时需要移动元素:O(n) 需要预分配存储空间; 适用于“不常进行修改操作、表中元素相对稳定”的场合。 链表:只能进行顺序存取:O(n) 插入和删除时只需修改指针:O(1) 不需要预分配存储空间; 适用于“修改操作频繁、事先无法估计最大表长”的场合。 应用问题的算法时间复杂度的比较 例如,以线性表表示集合进行运算的时间复杂度为O(n2), 而以有序表表示集合进行运算的时间复杂度为O(n)习 题 21判断下列概念的正
16、确性(1) 线性表在物理存储空间中也一定是连续的。(2) 链表的物理存储结构具有同链表一样的顺序。(3) 链表的删除算法很简单,因为当删去链表中某个结点后,计算机会自动地将后继的各个单元向前移动。答:(1)(2)(3)都不正确。2. 有如下图所示线性表,经过daorder 算法处理后,线性表发生了什么变化?画出处理后的线性表。 void daorder() int i, j, n ; ElemType x;n=length/2; for( i=0 ; inext;Return n:5试设计实现在单链表中删去值相同的多余结点的算法。 (a)为删除前,(b)为删除后。1015181510H(a)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 讨论 课堂 习题 解答 53

限制150内