数据结构B习题1参考答案Word文件下载.docx

上传人:b****6 文档编号:21721976 上传时间:2023-01-31 格式:DOCX 页数:21 大小:181.73KB
下载 相关 举报
数据结构B习题1参考答案Word文件下载.docx_第1页
第1页 / 共21页
数据结构B习题1参考答案Word文件下载.docx_第2页
第2页 / 共21页
数据结构B习题1参考答案Word文件下载.docx_第3页
第3页 / 共21页
数据结构B习题1参考答案Word文件下载.docx_第4页
第4页 / 共21页
数据结构B习题1参考答案Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构B习题1参考答案Word文件下载.docx

《数据结构B习题1参考答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构B习题1参考答案Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

数据结构B习题1参考答案Word文件下载.docx

elements=elem;

returntrue;

for(intj=n-1;

j>

i;

j--)

elements[j+1]=elements[j];

elements[i+1]=x;

n++;

returntrue;

}

算法的时间复杂度为O(n)

2.4

Del(Tx)

if(!

n)

UnderFlow"

for(inti=0;

i<

n;

i++)

if(elements[i]==x)

{

for(intj=i+1;

j<

elements[j-1]=elements[j];

n--;

returntrue;

}

returnfalse;

2.6

voidSingleList<

Invert()

{

Node<

*p=first,*q;

first=NULL;

while(p)

{

q=p->

link;

p->

link=first;

first=p;

p=q;

}

2.7

boolSingleList<

Del(constT&

x)

UnderFlow!

!

"

*p=first,*q;

if((first->

data)==x)

first=first->

deletep;

n--;

while(p&

&

data!

=x)

q=p;

p=p->

if(p)

q->

link=p->

delete(p);

3.1

答:

(2)和(3)不能。

(2)中的E,B,D而言,E最先出栈则表明,此时B和D均在栈中,由于,B先于D进栈,所以应有D先出栈。

同理(3)也不能。

(1)能,操作序列:

push(A),pop(),push(B),pop(),push(C),pop(),push(D),pop(),push(E),pop()

(4)能,操作序列:

push(A),push(B),push(C),push(D),push(E),pop(),pop(),pop(),pop(),pop()

3.4

(1)(a+b)/(c+d)ab+cd+/

(2)b^2-4*a*cb2^4a*c*-

(3)a*c-b/c^2ac*-bc2^/-

(4)(a+b)*c+d/(e+f)ab+c*def+/+

(5)(a+b)*(c*d+e)-a*cab+cd*e+*ac*-

3.13

ttemplate<

voidSeqStack<

Invert(void)

SeqQueue<

sq(maxTop+1);

Ttemp;

while(top!

=-1)

this->

Top(temp);

Pop();

sq.EnQueue(temp);

while(!

sq.IsEmpty())

sq.Front(temp);

sq.DeQueue();

Push(temp);

4.2设三维数组的维度分别是m,n,l;

每个元素占k个存储单元。

Loc(A[i][j][k])=Loc(A[0][0][0])+(i*n*l+j*l)*k

4.6

4.7

col

1

2

3

4

num

k

4.14(4)

j

5

6

7

8

9

10

11

pj

a

b

c

f(j)

-1

改进f(j)

4.15

5.2

(1)无序树:

9棵

(2)有序树:

12棵

(3)二叉树:

30棵

5.4

(1)2k-1

(2)

(3)k(i-1)+m+1

(4)i+1≤

5.5

(1)空二叉树和所有结点均无左孩子的二叉树

(2)空二叉树和只有一个根

(3)空二叉树和所有结点均无右孩子

5.6

5.7

先:

DEHFJGCKAB

中:

HEJFGKCDAB

后:

HJKCGFEBAD

5.9

(1)

voidBinaryTree<

Del(BTNode<

*p)//private

if(p!

=NULL)

Del(p->

lChild);

rChild);

voidBTree<

Del()//public

Del(root);

root=NULL;

(2)

/*求二叉树中度为1的结点个数*/

intBinaryTree<

CountDegree1()

inttotal=0;

CountDegree1(root,total);

returntotal;

CountDegree1(BTNode<

*t,int&

num)

if(t)

if(((t->

lChild!

=NULL)&

(t->

rChild==NULL))||

((t->

lChild==NULL)&

rChild!

=NULL)))

++num;

CountDegree1(t->

lChild,num);

rChild,num);

(3)

Exch(BTNode<

BTNode<

*temp;

temp=p->

lchild;

p->

lchild=p->

rchild;

rchild=temp;

Exch(p->

lchild);

rchild);

Exchange()//public

Exch(root);

5.14

5.16

分别以下列数据为输入,构造最小堆。

(1)10,20,30,40,50,60,70,80

(2)80,70,60,50,40,30,20,10

(3)80,10,70,20,60,30,50,40

5.17分别以上题的数据为输入,从空的优先权队列开始,依此插入这些元素,求结果优先权队列的状态。

5.19

(2)WPL=91

(3)各字符的编码

A:

1010

B:

1011

C:

100

D:

00

E:

01

F:

6.5

Search1(Tx)const

returnSearchRec(x,0);

SearchRec(Tx,inti)const

if(i>

=n)returnfalse;

if(elements[i]==x)returntrue;

elsereturnSearchRec(x,i+1);

6.6

Search1(Tx)const

*p=first;

element<

if(p==NULL||p->

element>

x)returnfalse;

6.10

ASL成功=1/12(1*1+2*2+3*4+4*5)=37/12

ASL失败=1/13(3*3+4*10)=49/13

7.1

7.3

7.8

7.16

7.17

(1)

删除a

删除e

删除f

删除h

8.38.4

线性探查法

55

45

35

25

70

80

60

50

二次探查法

双散列法

9.1

顶点

入度

出度

9.2

9.4

voidLGraph<

Degree(int*in)

i<

i++)

in[i]=0;

ENode<

*p;

for(i=0;

p=a[i];

while(p)

in[p->

adjvex]++;

p=p->

nextarc;

for(i=0;

cout<

in[i]<

;

9.6

9.13

9.16

关键路径:

a2,a7,a9.

长度:

23

9.17

9.21

源点

终点

最短路径

路径长度

A

B

(A,B)

C

(A,B,C)

D

(A,D)

E

(A,B,E)

G

__

S

d[A]

path[A]

d[B]

path[B]

d[C]

path[C]

d[D]

path[D]

d[E]

path[E]

d[G]

path[G]

0,-1

3,A

∞,-1

4,A

5,A

4,B

10.1

(1)简单选择排序

初始序列(61871203087097755326

第1趟(03)871261087097755326

第2趟(0308)1261877097755326

第3趟(030812)61877097755326

第4趟(03081226)877097755361

第5趟(0308122653)7097758761

第6趟(030812265361)97758770

第7趟(03081226536170)758797

第8趟(0308122653617075)8797

第9趟(030812265361707587)97

(2)直接插入排序

初始序列(61)871203087097755326

第1趟(6187)1203087097755326

第2趟(126187)03087097755326

第3趟(03126187)087097755326

第4趟(0308126187)7097755326

第5趟(030812617087)97755326

第6趟(03081261708797)755326

第7趟(0308126170758797)5326

第8趟(030812536170758797)26

第9趟(03081226536170758797)

(3)冒泡排序(注意冒泡排序只排了7趟)

初始序列(61871203087097755326)

第1趟61120308708775532697

第2趟12030861707553268797

第3趟03081261705326758797

第4趟03081261532670758797

第5趟03081253266170758797

第6趟03081226536170758797

第7趟03081226536170758797

(4)快速排序

初始序列61871203087097755326

第1趟(53261238)61(97757087)

第2趟(826123)5361(97757087)

第3趟38(1226)5361(97757087)

第4趟38122653(6197757087)

第5趟3812265361(87757097)

第6趟3812265361(7075)8797

第7趟381226536170758797

(5)两路合并排序

初始序列(61)(87)(12)(03)(08)(70)(97)(75)(53)(26)

第1趟(6187)(0312)(0870)(7597)(2653)

第2趟(03126187)(08707597)(2653)

第3趟(0308126170758797)(2653)

第4趟(03081226536170758797)

10.2

简单选择排序:

三种情况下的时间复杂度都为O(n2)。

直接插入排序:

最好情况下为O(n);

平均和最坏情况下为O(n2)。

冒泡排序:

最好情况为O(n);

最坏和平均情况下为O(n2)。

快速排序:

最好和平均情况下为O(nlog2n);

最坏情况下时间复杂度为O(n2)。

两路合并排序:

三种情况下,均为O(nlog2n)

(2)简单选择排序、直接插入排序和冒泡排序都是O

(1)

最好情况,空间复杂度为O(log2n);

最坏情况,空间复杂度为O(n)

两路合并排序:

均为O(n)

(3)不稳定的是简单选择排序和快速排序两种。

(4)简单选择排序、冒泡排序和快速排序。

10.4

voidDoubleBubleSort(Ta[],intn)

inti,j,low=0,high=n-1,s,t;

Tx;

while(low<

high)

s=low;

for(i=low;

high;

i++)//从上向下沉底

if(a[i]>

a[i+1])

{

x=a[i];

a[i]=a[i+1];

a[i+1]=x;

s=i;

}

high=s;

t=high;

for(j=high;

j>

low;

j--)//从下向上冒泡

if(a[j]<

a[j-1])

x=a[j];

a[j]=a[j-1];

a[j-1]=x;

t=j;

low=t;

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

当前位置:首页 > 医药卫生 > 药学

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

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