基础严飞软件技术基础沈被娜习题解答.docx

上传人:b****6 文档编号:8331652 上传时间:2023-01-30 格式:DOCX 页数:27 大小:305.63KB
下载 相关 举报
基础严飞软件技术基础沈被娜习题解答.docx_第1页
第1页 / 共27页
基础严飞软件技术基础沈被娜习题解答.docx_第2页
第2页 / 共27页
基础严飞软件技术基础沈被娜习题解答.docx_第3页
第3页 / 共27页
基础严飞软件技术基础沈被娜习题解答.docx_第4页
第4页 / 共27页
基础严飞软件技术基础沈被娜习题解答.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

基础严飞软件技术基础沈被娜习题解答.docx

《基础严飞软件技术基础沈被娜习题解答.docx》由会员分享,可在线阅读,更多相关《基础严飞软件技术基础沈被娜习题解答.docx(27页珍藏版)》请在冰豆网上搜索。

基础严飞软件技术基础沈被娜习题解答.docx

基础严飞软件技术基础沈被娜习题解答

【关键字】基础

第二章

2.1什么是数据结构?

它对算法有什么影响?

数据结构是指同一数据对象中各数据元素间存在的关系。

数据结构对算法的影响:

算法的实现必须借助程序设计语言中提供的数据类型及其运算。

一个算法的效率往往与数据的表达形式有关,因此数据结构的选择对数据处理的效率起着至关重要的作用。

它是算法和程序设计的基本部分,它对程序的质量影响很大。

2.2何谓算法?

它与程序有何区别?

广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。

计算机算法是通过计算机能执行的算法语言来表达的。

和程序的区别:

一个程序包括两个方面的内容:

(1)对数据的描述,即数据结构。

(2)对操作的描述,即算法。

所以算法是程序的一个要素。

2.3何谓频度,时间复杂度,空间复杂度?

说明其含义。

频度:

在某个算法中某个语句被重复执行的次数就是此语句的频度。

时间复杂度:

是用来估算一个算法的执行时间的量,以算法中频度最大的语句来度量。

空间复杂度:

指在算法中所需的辅助空间的单元,而不包括问题的原始数据占用的空间。

2.4试编写一个求多项式Pn=anxn+an-1xn-1+a1x+a0的值Pn(x0)的算法,要求用乘法次数最少,并说明算法中主要语句的执行次数及整个算法的时间复杂度。

A=(a0,a1……an)

mul=1//

sum=a0

fori=1ton

mul=mul*x//x

sum=A[i]*mul+sum//求和

end(i)

进行了n次

时间复杂度为:

2n

2.5计算下列各片段程序中X←X+1执行次数

(1)

fori=1ton

forj=1toi

fork=1toj

x←x+1

end(k)

end(j)

end(i)

执行次数:

n*n*n

(2)

i←1

whilei

x←x+1

i←i+1

end(while)

执行次数:

n-1

(3)

fori=1ton

j←1

fork=j+1ton

x←x+1

end(k)

end(i)

执行次数:

n*(n-1)

2.6数据的保存结构主要有哪两种?

它们之间的本质区别是什么?

数据的保存结构:

向量和链表。

本质区别:

向量是连续存放的,其存储空间是静态分配的,以存放顺序来表达元素的前后件的关系。

链式存储结果不需要一组连续的存储单元,其数据元素可以分散存放在存储空间中,其元素关系由指针来指向。

2.8已知线性表L(a1,a2,…,an)元素按递增有序排列。

用向量作为存储结构,试编写算法:

删除表中值在c与d之间(c<=d)的元素

 

找到第1个大于等于c的元素,序号为s

找到第一个大于d的元素,序号为t

L[s]←L[t]

L[s+1]←L[t+1]…

L[s+m]←L[t+m]//s+m=t-1m=t–s-1

L[s+i]←L[t+i]//i=0tot-s-1

i=1;//i从1循环到n

s=-1;//第1个大于等于c的元素序号

t=-1;//第1个大于d的元素序号

fori=1tonstep-1

ifs==-1andL[i]>=c//找到第1个大于等于c的元素

s=i

ift==-1andL[i]>d//找到第1个大于d的元素

t=i;

end(i)

ifs!

=-1andt!

=-1

i=s

whilei

L[i]=L[i+t–s]

i++

end(while)

else

return(错误没有找到元素在c和d之间)

end(if)

forj=cton-d+c

L[j]<--L[j+d-c]//把j+d-c项给j

End(j)

N<--n-d+c//所有项数减少

Return

2.9线性表A,B中的元素为字符串类型,用向量结构存储,试编写算法,判断B是否为A的子序列(例如A=ENGLISH,B=LIS,则B为A的子序列)

A[m]B[n]

A:

B:

i=1检查A中第1个元素开始的字符串是否与B匹配

i=2检查A中第2个元素开始的字符串是否与B匹配

……

i=m–n+1检查A中第(m-n+1)个元素开始的字符串是否与B匹配

A[m]

B[n]

if(m

for(i=1;i<=m-n+1;i++)

for(j=1;j<=n;j++)

if(A[i+j-1]!

=B[j])

break;

end(j)

ifj>nthenreturn(A字符串中第i个字符开始的子串与B匹配)

end(i)

renturn(找不到匹配的子串)

设A,B两个线性表的元素个数为m,n

If(m<=n)then{return}

Fori=0ton-1

a=A[i]

forj=0tom-1

if(a=B[j])then{b++}

end(j)

end(i)

if(b=m)then{B为A的子集}

return

2.11写一个将向量L(a1,a2,an)倒置的算法。

对L(a1,a2,......,an)

如果是奇数个元素,则

1,15交换1,n交换

2,14交换2,n-1交换

3,13交换3,n-2交换

4,12交换4,n-3交换

5,11交换5,n-4交换

6,10交换6,n-5交换

7,9交换7,n-6交换

8,8交换8,n-7交换

9,7交换9,n-8交换?

停止!

如果是偶数个元素,则

1,14交换1,n交换

2,13交换2,n-1交换

3,12交换3,n-2交换

4,11交换4,n-3交换

5,10交换5,n-4交换

6,9交换6,n-5交换

7,8交换7,n-6交换

8,7交换?

8,n-7交换?

停止!

小结:

n个元素倒置的算法是,

i=1

while(i

a[i]与a[n-i+1]交换

i++

end(while)

2.12试编写算法求已知单链表长度,并考虑表空的情况。

p=head

i=0

While(p!

=nil)//表不为空

P<--next(p)//移动到下一个元素

i++

End(while)

Returni//返回数据的个数

2.13试编写算法删除单链表中第k个结点。

标签

GETNODE(q)

GETNODE(p)

q<-head

Fori=1tok-1

q<-next(q)

End(i)

P<-next(q);next(q)<-next(p)

Ret(p)

Return

2.14已知一循环链表中数值已按递增有序排列现要插入一个新结点,并使插入一个新节点,并使插入后链表仍为有序序列

GETNODE(p)

Data(p)=a

While(data(p)

n<-next(n)

End(while)

q<-n

next(p)<--next(q)<-p

return

2.18设在长度大于1的循环链表中,即无头结点,也无头指正,p为指向链表中每个节点的指针,试编写算法删除该节点的前趋结点。

q<-Next(p)//找到该节点的前趋结点

p<-next(q);next(q)<-next(p)

RET(p)

Return

2.20试用单链表表示两个多项式:

A=4X12+5X8+6X3+4,B=3X12+6X7+2X4+5

(1)设计此两个多项式的数据结构

-1

A

0

4

3

6

8

5

12

4

-1

B

0

5

4

2

7

6

12

3

(2)写出两个多项式相加的算法

II答案参见33页即可

2.22CQ[0:

10]为一循环队列,初态front=rear=1,画出下列操作后队的头,尾指示器状态:

(1)d,e,b,g,h入队;rear=6front=1

(2)d,e出队rear=6front=3

(3)I,j,k,l,m入队rear=0front=3

(4)b出队rear=0front=4

(5)n,o,p,q,r入队rear=5front=4

2.25有一个二维数组A[1:

m;1:

n],假设A[3,2]地址为1110,A[2,3]地址为1115,

若每个单元占一个空间,问A[1,4]的地址是多少

答案:

1120

2.26用三维数组和带行辅助向量形式表示下列稀疏矩阵:

答案:

(1)

1

1

15

1

4

22

1

6

-15

2

2

11

2

3

3

3

4

-6

5

1

91

6

3

28

I

1

2

3

5

6

Pos

1

2

4

1

3

Num

3

2

1

1

1

(2)参考上面的,和47,48页的内容

2.28将题图2.3的一般树化为二叉树。

答案:

2.29设一颗完全二叉数有1000个结点,试问:

(1)有多少个叶子结点489

(2)有多少个度为2的结点2

(3)有多少个结点只有非空左子树1

2.30设一颗二叉树其中序和后序遍历为

中序:

BDCEAFHG

后序:

DECBHGFA

答案:

ABCDEFHG

2.31.对二叉树写出如下算法:

(1)复制一棵二叉树;

(2)判断两棵二叉树是否相等;

(3)计算二叉树的树叶;

(4)计算二叉树的深度;

解:

1)//复制一棵二叉树

/*算法思想

采用递规函数来实现

(1)如果树为空,则复制一棵空树;

(2)如果树不为空,则依次递规复制已知二叉树的左子树和有子树;

(3)生成一个新的根结点,使复制得到的左子树和右子树的根指针分别成为这个新生成结点的左指针域和右指针域的值。

算法编写:

*/

BiTree*CopyTree(BiTree*T){

//

if(!

T)returnNULL;

if(T->lchild)

newlchild=CopyTree(T->lchild);//

elsenewlchild=NULL;//

if(T->rchild)

newrchild=CopyTree(T->rchild);//

elsenewrchild=NULL;//

newnode=GetTreeNode(T->data,newlchild,newrchild);//

returnnewnode;

}//CopyTree

BiTNode*GetTreeNode(TelemTypeitem,BiTNode*lptr,BiTNode*rptr){

//

T=newBiTNode;

T->data=item;T->lchild=lptr;T->rchild=rptr;

returnT;

}//GetTreeNode

(2)

在这里要对一种情况进行说明

当root1的左子树与root2的左子树相同,root1的右子树与root2的右子树相同时,这两颗二叉树相同。

当root1的左子树与root2的右子树相同,root1的右子树与root2的左子树相同时,这两颗二叉树同样相同。

以下是实现代码

bool IsBSTEqual(BNode* root1,BNode* root2)  

{  

      if (root1==NULL && root2==NULL)  

      {  

           return true;  

      }  

      else if (root1==NULL || root2==NULL)  

      {  

           return false;  

      }  

      else  

      {  

            if (root1->data !

= root2->data)  

            {  

                  return false;  

            }  

            bool is_left = IsBSTEqual(root1->left,root2->left);  

            bool is_right = IsBSTEqual(root1->right,root2->right);  

            if (is_left&&is_right)  

                 return true;  

            else  

            {  

                  is_right = IsBSTEqual(root1->right,root2->left);  

                  is_left = IsBSTEqual(root1->left,root2->right);  

                  if (is_left&&is_right)  

                       return true;  

                  else  

                       return false;  

            }  

      }  

}  

3)4)

计算叶子数和树的深度。

计算叶子:

递归每个节点,当没有左孩子和右孩子时即为叶子。

计算深度:

对每个节点计算左右子树的深度,节点的最终深度是其子树深度的最大值加1,空树返回-1.

structTree

{

 ElementTypeElement;

 Tree*left;

 Tree*right;

};

intCountLeaf(Tree*T)

{

 staticintcount=0;

 if(T!

=NULL)

 {

  CountLeaf(T->left);

  CountLeaf(T->right);

  if(T->left==NULL&&T->right==NULL)

   count++;

 }

 returncount;

}

intDepth(Tree*T)

{

 intdepthLeft,depthRight,depth;

 if(T==NULL)

  return-1;

 else

 {

  depthLeft=Depth(T->left);

  depthRight=Depth(T->right);

  depth=1+(depthLeft>depthRight?

depthLeft:

depthRight);

 }

 returndepth;

}

2.32.给定一组元素{17,28,36,54,30,27,94,15,21,83,40},画出由此生成的二叉排序树。

解:

2.33.给定一组权值W={8,2,5,3,2,17,4},画出由此生成的哈夫曼树。

2.34.有一图如题图2.4所示:

(1)写出此图的邻接表与邻接矩阵;

(2)由给点V1作深度优先搜索和广度优先搜索;

(3)试说明上述搜索的用途。

 

解:

(1)

 

(2)

V1作深度优先搜索:

V1作广度优先搜索:

(3)为了避免同一顶点被多次访问。

2.35.有一又向图如题图2.5所示:

 

(1)写出每一结点的入度和出度各为多少;

(2)写出上图的邻接矩阵和邻接表。

解:

V1:

入度=3出度=0

V2:

入度=2出度=2

V3:

入度=1出度=2

V4:

入度=2出度=2

V5:

入度=2出度=1

V6:

入度=0出度=4

3.36求题图2.6中结点a到各结点之间最短路径。

2

222

123

314

1

解:

2.37求题图2.7中所示AOV网所有可能的拓扑顺序结果。

解:

拓扑排序:

V7->V5->V2->V4->V6->V3->V1->V8

2.38题图2.8所示AOE网,求:

(1).每一事件最早开始时间和最晚开始时间;

(2).该计划最早完成时间为多少。

解:

活动最早最迟开始时间

a1a2a3a4a5a6a7a8a9a10a11a12a13a14

E00566121212191916202325

L409616121916191923202325

L-E404010074007000

事件最早最迟开始时间

V1V2V3V4V5V6V7V8V9V10

VE05612191620232527

VL09612192320232527

2.39画出进行分块查找的数据组织形式。

解:

设将数据分成4块,每块中记录个数5,

先查找索引值

97451975179752897543

第1块234

97321,97421,97451,

97241,97118

97250,97407,97239,

97227,97517

97438,97102,97528

97136,07338

97543,97309

2.40画一棵对20个记录进行对分查找的判定树,并求等概率情况下的平均查找长度。

ASL=(1+2*2+3*4+4*8+5*5)/20=3.7

2.6数据的存储结构主要有哪两种?

它们之间的本质区别是什么?

数据的存储结构:

向量和链表。

本质区别:

向量是连续存放的,其存储空间是静态分配的,以存放顺序来表达元素的前后件的关系。

链式存储结果不需要一组连续的存储单元,其数据元素可以分散存放在存储空间中,其元素关系由指针来指向。

2.5试比较顺序表和链表的优缺点。

1.线性表的长度是否固定方面:

由于向量的存储空间是静态分配的,链表的存储空间是动态分配的,因此若表长不固定时采用线性链表较好。

2.线性表的主要操作是什么:

由于向量是连续存放的,所以适用于查找操作,不适用插入、删除操作。

由于线性链表只能顺序存取,所以适用于插入、删除操作,不适用于查找操作。

3.采用的算法语言:

线性链表要求所使用的语言工具提供指针类型变量。

2.6试比较单向链表与双向链表的优缺点。

1.单向链表只能单方向地寻找表中的结点,双向链表具有对称性,从表中某一给定的结点可随意向前或向后查找。

2.在作插入、删除运算时,双向链表需同时修改两个方向上的指针,单向链表则简便些。

2.7试说明树与二叉树有何不同?

为何要将一般树转换为二叉树?

树与二叉树区别:

树是由n个(n>=0)结点组成的有限集合T,其中有且仅有一个结点称为根结点,在此类元素结点之间存在明显的分支和层次关系。

二叉树是一种特殊的树结构,每一个结点最多只有两个孩子,即最多只有两个分支。

为何要转换:

一般树,树中结点次序没有要求,分支庞杂。

而二叉树,元素之间存在严谨的前后代关系,在对数据元素进行删除、查找、插入等运算时更加有效率。

2.8若一棵排序二叉树的关键字输入序列为{80,6,10,7,8,25,100,90},请画出该二叉树。

解:

二叉排序树为:

2.9对于关键字序列{49,38,65,97,76,13},回答下述问题。

(共12分)

(1)写出一趟冒泡排序的结果。

(6分)

(2)写出一趟快速排序的结果。

参考答案如下:

(1)写出一趟冒泡排序的结果。

(6分)

{38,49,65,76,13,97}

(2)写出一趟快速排序的结果。

(6分)

{13,38,49,97,76,65}

2.10请给出图1的所有最小生成树。

(10分)

答:

共有两颗:

2.11请给出图2的所有拓扑排序序列。

(16)

答案如下:

仅有两个

第一个:

abcdefgh

第二个:

abcdegfh

2.12已知某二叉树的前序遍历序列为:

ABCDEFG

和中序遍历序列为:

CBEDAFG。

请画出该二叉树。

答案如下:

2.13构造该图的最小生成树。

图的最小生成树如下

第三章

3.1操作系统的基本功能是什么?

它包括哪些部分?

基本功能:

操作系统应该具有处理器管理,存储管理,设备管理和文件管理功能,同时,为了使用户能方便地使用机器,操作系统还应提供用户接口功能。

构成部分:

(1).对CPU的使用进行管理的进程调度程序。

(2).对内存分配进行管理的内存管理程序。

(3).对输入输出设备进行管理的设备驱动程序。

(4).对外存中信息进行管理的文件系统。

3.2试说明虚拟机的概念以及实现的方法。

在裸机外面每增加一个软件层后就会变成一台功能更强的机器,我们通常把这种计算机系统称为虚拟机。

虚拟机的实现方法:

在裸机上装上操作系统对机器进行首次扩展,再在操作系统的基础上增加其他软件,这样就可以实现“虚拟机”。

3.3通常操作系统有哪几种基本类型?

各有什么特点及适用于何种场合?

三大类:

(1)多道批处理系统:

计算机内存中同时可以存放多道作业,用户与作业之间没有交互作用,用户不能直接控制作业的运行。

此类系统一般用于计算中心等较大型的计算机系统中。

(2)分时系统:

多个用户通过终端分享同一台计算机,并通过终端直接控制程序运行,进行人与机器之间的交互。

此类系统适用于程序的开发。

(3)实时系统:

对外部发生的随机事件作出及时的响应,并对它进行处理。

此类系统一般用于工业控制系统或事物处理系统。

3.4试说明你所使用过的操作系统的类型和特点。

Windows系统:

多用户多任务操作系统。

特点:

全新的、友善的用户界面。

提供了功能强大的应用程序。

具有多任务并行处理能力,各种应用程序之间可以方便地进行切换和交换信息。

具有强大的内存管理能力,支持扩展内存功能,提高系统运行效率。

3.5解释名空间、作业地址空间和存储空间的关系以及逻辑地址和物理地址的区别。

存放源程序的空间称为名空间。

当汇编或编译程序将源程序转换成目标程序后,一个目标程序所占有的地址范围称为地址空间,这些地址的编号是相对于起始地址而定的,一般定起始位零,称为逻辑地址或相对地址。

存储空间是指当目标程序装入主存后占用的一系列物理单

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1