软件技术基础第二章课后习题答案Word文档格式.docx
- 文档编号:15091118
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:25
- 大小:3.53MB
软件技术基础第二章课后习题答案Word文档格式.docx
《软件技术基础第二章课后习题答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件技术基础第二章课后习题答案Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
1
//
sum=a0
for
i=1
to
n
*
x
sum
=
A[i]*mul
+
//求和
end(i)
程序代码:
#include<
stdio.h>
stdlib.h>
#defineN10
doublepolynomail(inta[],inti,doublex,intn);
intmain()
{
doublex;
intn,i;
inta[N];
printf("
输入变量的值x:
"
);
cin>
>
x;
cout<
<
输入多项式的阶次n:
;
n;
if(n>
N-1)exit(0);
输入多项式的系数a[0]--a[n]:
for(i=0;
i<
=n;
i++)cin>
a[i];
Thepolynomailvalueis"
polynomail(a,n,x,n)<
endl;
return0;
}
doublepolynomail(inta[],inti,doublex,intn)
if(i>
0)returna[n-i]+polynomail(a,i-1,x,n)*x;
elsereturna[n];
本算法的时间复杂度为O(n)。
习题2.9
boolIsSubSequence(Stringa[],intn,Stringb[],intm)
{
inti=0;
intj=0;
while(i<
n)
{
if(a[i]==b[j])/**相等时,下标同时向后移动一个位置.*/
i++;
j++;
}
else
j++;
/**不等时,只将b[]数组下标向后移动一个位置.*/
if(j==m)/**当b[]数组找完时,指向了第m+1个不存在的元素,则不符合。
*/
returnfalse;
//a[]不是b[]的子序列
returntrue;
//a[]是b[]的子序列
}
上机需要定义main函数别偷懒哦`
习题2.10
voidmgsl(intn,inta[],intm,intb[],intc[])
intk=0,i=0,j=0;
while((i<
n)&
&
(j<
m))
{
if(a[i]<
=b[j])//复制有序表a中的元素
{c[k]=a[i];
i=i+1;
{c[k]=b[j];
j=j+1;
k=k+1;
if(i==n)//复制有序表b中剩余元素
for(i=j;
m;
i++)
{c[k]=b[i];
else//复制有序表a中剩余元素
for(j=i;
j<
j++)
{c[k]=a[j];
return;
习题2.11
voidinvsl(intn,inta[])
intk;
intt;
for(k=1;
k<
=n/2;
k++){
t=a[k-1];
a[k-1]=a[n-k];
a[n-k]=t;
}
inta[10]={1,2,….};
invsl(10,a);
for(inti=0;
10;
printf(“%d”,a[i]);
return0;
习题2.12
intListLength_L(LinkList&
L)
LinkListp=L;
if(p)p=p-next;
while(p){
p=p->
next;
i++;
returni;
习题2.13
intDeleteElem_L(LinkList&
L,intx,intk)
inti=1;
while(p&
i!
=k-1){
p=p->
next->
习题2.14
设待插入的结点值为x,则至少需要考虑下面三种情况:
1.prev->
val≤x≤current->
val:
插入到prev和current之间。
2.x是链表中最小或者最大的值:
插入x到链表头部的前面。
3.回到起始点:
插入到起始点前面。
第1和2种情况还比较容易考虑到,但是第3种情况往往会被忽略,先给出代码,再根据代码来分析这些情况为什么都需要考虑到。
1.void
insert(Node
*&
aNode,
int
x)
{
2.
//链表为空,创建节点返回
3.
if
(!
aNode)
4.
aNode
new
Node(x);
5.
aNode->
next
aNode;
6.
return;
7.
}
8.
9.
Node
*p
10.
*prev
NULL;
11.
do
12.
prev
p;
13.
p
p->
14.
(x
data
prev->
data)
break;
情况1,找到正常位置返回,如例子中插入4到链表中
15.
((prev->
||
data))
情况2,x最小或者最大,插入到链表最前面
16.
while
(p
!
aNode);
情况3,回到起始结点,停止.
17.
18.
*newNode
newNode(x);
19.
newNode->
20.
newNode;
21.}
1)链表只有一个结点
如果x等于该结点值,则直接在情况1处理。
否则情况3处理。
2)链表包含重复值
如果链表为1-*1-1,起始结点为第二个1,则在其中插入2时,由情况3处理,即最终插入到初始结点前面。
会变成1-2-1-1.循环链表从第二个1开始,照样是有序的。
习题2.15
//将合并后的结果放在C表中,并删除B表
StatusListMerge_L(LinkList&
A,LinkList&
B,LinkList&
C)
LinkListpa,pb,qa,qb;
pa=A->
pb=B->
C=A;
while(pa&
pb){
qa=pa;
qb=pb;
pa=pa->
pb=pb->
qb->
next=qa->
qa->
next=qb;
if(!
pa)qb->
next=pb;
pb=B;
free(pb);
returnOK;
习题2.18
//在单循环链表S中删除S的前驱结点
StatusListDelete_CL(LinkList&
S)
LinkListp,q;
if(S==S->
next)returnERROR;
q=S;
p=S->
while(p->
next!
=S){
q=p;
q->
next=p->
free(p);
习题2.19
//带头结点的单链表的逆置
StatusListOppose_L(LinkList&
p=L;
L->
next=NULL;
q->
next=L->
L->
next=q;
习题2.21
有一铁路交换站如题图(栈),火车从右边开进交换站,然后再开到左边,每节车厢均有编号如1,2,3,…,n。
请问:
(1)当n=3和n=4时有哪几种排序方式?
哪几种排序方式不可能发生?
(2)当n=6时,325641这样的排列是否能发生?
154623的排列是否能发生?
解:
N=3时可能的出栈序列:
123
1S1X2S2X3S3X
132
1S1X2S3S3X2X
213
1S2S2X1X3S3X
231
1S2S2X3S3X1X
312
CAB
321
1S2S3S3X2X1X
N=4,不可能的排列:
4312
4213
4231
4123
4132
3124
3142
3412
1423
2413
N=6时,325641可能
154623不可能
习题2.24
双向栈(a[],m,top1,top2,x)
top1=m;
top2=1;
if(top1==top2)then{printf(“上溢”),returnERROR}
while(top1!
=top2)
if(x%2==0)
a[top2]=x;
top2++;
else{
a[top1]=x;
top1--;
习题2.26
用三元组和带行辅助向量形式表示下列稀疏矩阵:
(1):
(2):
三元组带行辅助向量
行
列
值
1
15
4
22
6
-15
2
11
3
-6
5
91
28
(2):
三元组带行辅助向量
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件技术 基础 第二 课后 习题 答案