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