厦门大学数据结构与算法(陈海山)期末习题答案解析.doc
- 文档编号:1259480
- 上传时间:2022-10-19
- 格式:DOC
- 页数:26
- 大小:1.10MB
厦门大学数据结构与算法(陈海山)期末习题答案解析.doc
《厦门大学数据结构与算法(陈海山)期末习题答案解析.doc》由会员分享,可在线阅读,更多相关《厦门大学数据结构与算法(陈海山)期末习题答案解析.doc(26页珍藏版)》请在冰豆网上搜索。
作业:
1-1,7,82-1,2,4,7,9,11,13,193-2,3,7,8,13,14
4-3,9,135-1,2,6,85-1,2,6,7,8,12,14,17
习题1绪论
1-1名词解释:
数据结构。
数据结构:
相互之间存在一定关系的数据元素的集合
1-2数据结构的基本逻辑结构包括哪四种?
⑴集合:
数据元素之间就是“属于同一个集合”
⑵线性结构:
数据元素之间存在着一对一的线性关系
⑶树结构:
数据元素之间存在着一对多的层次关系
⑷图结构:
数据元素之间存在着多对多的任意关系
1-3数据结构一般研究的内容不包括()。
(A)集合的基本运算
(B)数据元素之间的逻辑关系
(C)在计算机中实现对数据元素的操作
(D)数据元素及其关系在计算机中的表示
选D
数据的逻辑结构、数据的存储结构、数据的运算
1-4算法包括哪五种特性?
2.算法的五大特性:
√
⑴输入:
一个算法有零个或多个输入。
⑵输出:
一个算法有一个或多个输出。
⑶有穷性:
一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
⑷确定性:
算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
⑸可行性:
算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
1-5简述算法及其时间复杂度。
1.算法(Algorithm):
是对特定问题求解步骤的一种描述,是指令的有限序列。
算法复杂度(AlgorithmComplexity):
算法占用机器资源的多少,主要有算法运行所需的机器时间和所占用的存储空间。
时间复杂度(TimeComplexity):
算法运行所需要的执行时间,T(n)=O(f(n))。
空间复杂度(SpaceComplexity):
算法运行所需要的存储空间度量,S(n)=O(f(n))。
1-6设数组A中只存放正数和负数。
试设计算法,将A中的负数调整到前半区间,正数调整到后半区间。
分析算法的时间复杂度。
A[n+1]
For(inti=n-1,j=0;i>j;i--)
{
If(a[i]>0)continue;
Else{
A[n]=A[i];
A[i]=A[j];
A[j]=A[n];
J++;
}
}
时间复杂度为O(n)
1-7将上三角矩阵A=(aij)n´n的非0元素逐行存于B[(n*(n+1)/2]中,使得B[k]=aij且k=f1(i)+f2(j)+c(f1,f2不含常数项),试推导函数f1,f2和常数c。
k+1=1+2+3+…+(i-1)+j
k=1/2*i*(i-1)+j-1;
1-8描述下列递归函数的功能。
intF(intm,intn)
{
if(n>m)returnF(n,m);
elseif(n==0)returnm;
else
{
r=m%n;
returnF(n,r);
}
}
求m与n的最大公约数
1-9编写递归算法:
0,m=0且n≥0
g(m,n)=
g(m-1,2n)+n,m>0且n≥0
doubleg(doublem,doublen)
{
If(m==0&&n>=0)
return0;
else
returng(m-1,2*n)+n;
}
1-10将下列递归过程改写为非递归过程。
voidtest(int&s)
{
intx;
scanf(“%d”,&x);
if(x==0)s=0;
else
{
test(s);
s+=x;
}
}
习题2表
2-1如果长度为n的线性表采用顺序存储结构存储,则在第i(1≤i≤n+1)个位置插入一个新元素的算法的时间复杂度为()。
(A)O
(1) (B)O(n) (C)O(nlog2n) (D)O(n2)
B
需要让线性表移动n+1-i个
2-2在一个有127个元素的顺序表中插入一个新元素,要求保持顺序表元素的原有(相对)顺序不变,则平均要移动()个元素。
(A)7 (B)32 (C)64 (D)127
Cn/2+1
2-3将关键字2,4,6,8,10,12,14,16依次存放于一维数组A[0...7]中,如果采用折半查找方法查找关键字,在等概率情况下查找成功时的平均查找长度为()。
(A)21/8 (B)7/2 (C)4 (D)9/2
A
3,2,3,1,3,2,3,4
公式法1*2^0+2*2^1+3*2^2+…+i*2^(n-1);
2-4已知顺序表L递增有序。
设计一个算法,将a和b插入L中,要求保持L递增有序且以较高的效率实现。
先用折半查找法查询位置,然后移动
voidinsert(intL[],inta,intb)//a
{
inti=0,p,q;
n=length(L);//L现有长度
//查找确定a、b的位置
for(;i { if(L[i]<=a&&(a { p=i+1;//a的最终位置 n++; break; } } for(;i { if(L[i]<=b&&(b { q=i+2;//b的最终位置 n++; break; } } //移动元素,插入a,b for(i=n+1;i>q;i--) L[i]=L[i-2]; L[q]=b;//插入b for(i=q-1;i>p;i--) L[i]=L[i-1]; L[p]=a;//插入a } 2-5简单描述静态查找和动态查找的区别。 A静态查找表只查找 B、静态查找表不改变数据元素集合内的数据元素 C、动态查找表不只查找 D、动态查找表还插入或删除集合内的数据元素 2-6综合比较顺序表和链表。 (1)存储空间利用率高——只存储元素值。 (2)随机存取——可以通过计算来确定顺序表中第i个数据元素的存储地址Li=L0+(i-1)*m,其中,L0为第一个数据元素的存储地址, m为每个数据元素所占用的存储单元数。 (3)插入和删除数据元素会引起大量结点移动. 顺序表: 内存中地址连续 长度不可变更 支持随机查找可以在O (1)内查找元素 适用于需要大量访问元素的而少量增添/删除元素的程序 链表: 内存中地址非连续 长度可以实时变化 不支持随机查找查找元素时间复杂度O(n) 适用于需要进行大量增添/删除元素操作而对访问元素无要求的程序 2-7解释链表的“头指针、头结点和首元素结点”三个概念。 “头指针”是指向头结点的指针。 "头结点"是为了操作的统一、方便而设立的,放在首元素结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等等)。 “首元结点”也就是第一元素结点,它是头结点后边的第一个结点。 2-8描述下列算法的主要功能是()。 ①构造头结点L,取q=L; ②产生1个结点p; ③q−>next=p; ④输入p−>data的值; ⑤取q=p; ⑥重复执行②至⑤n次; ⑦p−>next=NULL; (A)通过输入n个数据元素构建链表L (B)采用前插法,在链表L中输入n个数据元素 (C)通过产生n个结点构建链栈L,q为栈顶指针 (D)在链队列L中输入n个数据元素,q为队尾指针 A 2-9设L是不带头结点的单链表的头指针,k是一个正整数,则下列算法的主要功能是()。 LinkSearch(LinkListL,intk) { k0=0; p=L->next;//next为单链表的指针域 q=p; while(p) { if(k0<=k)k0++; elseq=q->next; p=p->next; } q->next=0; } (A)计算单链表L的长度 (B)查找单链表L中倒数第k个结点 (C)删除单链表L中最后面的k个结点 (D)将单链表L中第k个结点q的指针置0 只遍历一次的高效算法 (排除法) B 2-10设链表L不带头结点,试分析算法的功能。 A(Linklist&L) { if(L&&L->next) { Q=L; L=L->next; P=L; while(P->next)P=P->next; P->next=Q; Q->next=NULL; } }//A算法结束 将链表的第一个结点接到最后一个结点后面 2-11设两个循环链表的长度分别为n和m,则将这两个循环链表连接成一个循环链表,最好的时间复杂度为()。 (A)O (1) (B)O(n) (C)O(m) (D)O(min(n,m)) A 首先取一个指针p指向la的第一个节点(不包括头节点,头节点是空),然后让la头指针指向lb的第二个节点,接着用lb的第一个节点填充lb的头节点,最后将la头节点next指向p 如下图: 还是不明白请自己看ppt第二章P65 2-12设有6个数据元素A,B,C,D,E,F依次进栈。 如果6个数据元素的出栈顺序为B,C,D,F,E,A,则该栈的最小容量为()。 (A)2 (B)3 (C)4 (D)5 B 操作 栈内元素 出栈顺序 A,B入栈 A,B B出栈 A B C入栈 A,C C出栈 A B,C D入栈 A,D D出栈 A B,C,D E,F入栈 A,E,F F出栈 A,E B,C,D,F E出栈 A B,C,D,F,E A出栈 B,C,D,F,E,A 因此栈的最小容量只需3 2-13设进栈序列为123,试给出所有可能的出栈序列。 所有可能的出栈序列为: 1,2,3(1入栈,1出栈,2入栈,2出栈,3入栈,3出栈) 1,3,2(1入栈,1出栈,2,3,入栈,3出栈,2出栈) 2,1,3(1,2入栈,2出栈,1出栈,3入栈,3出栈) 2,3,1(1,2入栈,2出栈,3入栈,3出栈,1出栈) 3,2,1(1,2,3入栈,3出栈,2出栈,1出栈) 注意: 唯一只有3,1,2不可能出现,因为3要先出栈,前面1,2,3要按顺序一起入栈,因此不可能出现1在2的前面,后面的题目也是一样。 原则就是只要后入栈的先出栈,那么这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 厦门大学 数据结构 算法 海山 期末 习题 答案 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)