厦门大学数据结构与算法(陈海山)期末习题答案解析Word格式.doc
- 文档编号:14177425
- 上传时间:2022-10-19
- 格式:DOC
- 页数:26
- 大小:1.10MB
厦门大学数据结构与算法(陈海山)期末习题答案解析Word格式.doc
《厦门大学数据结构与算法(陈海山)期末习题答案解析Word格式.doc》由会员分享,可在线阅读,更多相关《厦门大学数据结构与算法(陈海山)期末习题答案解析Word格式.doc(26页珍藏版)》请在冰豆网上搜索。
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<
b
inti=0,p,q;
n=length(L);
//L现有长度
//查找确定a、b的位置
for(;
i<
n;
i++)
{
if(L[i]<
=a&
(a<
L[i+1]||i==n-1))
{
p=i+1;
//a的最终位置
n++;
break;
}
}
=b&
(b<
q=i+2;
//b的最终位置
//移动元素,插入a,b
for(i=n+1;
q;
L[i]=L[i-2];
L[q]=b;
//插入b
for(i=q-1;
p;
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为队尾指针
2-9设L是不带头结点的单链表的头指针,k是一个正整数,则下列算法的主要功能是()。
LinkSearch(LinkListL,intk)
k0=0;
p=L->
next;
//next为单链表的指针域
q=p;
while(p)
if(k0<
=k)k0++;
elseq=q->
p=p->
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->
P=L;
while(P->
next)P=P->
P->
next=Q;
Q->
}
}//A算法结束
将链表的第一个结点接到最后一个结点后面
2-11设两个循环链表的长度分别为n和m,则将这两个循环链表连接成一个循环链表,最好的时间复杂度为()。
(A)O
(1) (B)O(n) (C)O(m) (D)O(min(n,m))
首先取一个指针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
操作 栈内元素 出栈顺序
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 厦门大学 数据结构 算法 海山 期末 习题 答案 解析