西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx

上传人:b****7 文档编号:21821110 上传时间:2023-02-01 格式:DOCX 页数:17 大小:51.82KB
下载 相关 举报
西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx_第1页
第1页 / 共17页
西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx_第2页
第2页 / 共17页
西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx_第3页
第3页 / 共17页
西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx_第4页
第4页 / 共17页
西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx

《西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx》由会员分享,可在线阅读,更多相关《西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx(17页珍藏版)》请在冰豆网上搜索。

西电 C++ 面向对象程序设计 软件技术基础 课后答案Word下载.docx

q->

next=p;

p=q;

q=r;

head->

next->

next=NULL;

四、5

voidmergelist(Linear_list*La,Linear_list*Lb,Linear_list*&

Lc)

{

Lc=(Linear_list*)malloc(sizeof(Linear_list));

//产生C表的头结点头插法

Lc->

while(La->

next!

=NULL&

=NULL)//La、Lb均非空

if(La->

data<

data)

{

p=La->

La->

next=La->

insert(Lc,p);

else

p=Lb->

Lb->

next=Lb->

p=La->

insert(Lc,p);

while(Lb->

p=Lb->

Lb->

}//O(Length(La)+Length(Lb))

voidinsert(Linear_list*Lc,Linear_list*p)

p->

next=Lc->

}//O

(1)

四、8

voiddeleteFront(Link*s)

Link*p=s,*q;

while(p->

=s)p=p->

next=s;

free(q);

习题4四、1

intsymmetry(linklist*head,stack*s)

//具有头结点的单链表中存放有一个字符串,每个结点的数据域存放一个字符。

//head为单链表的头指针,s为栈的结构体指针

intn=length(head)/2;

linklist*p=head->

next;

datatypex;

for(inti=0;

n;

i++){

push(s,p->

data);

p=p->

if(length(head)%2==1)p=p->

while(p!

=NULL){

x=pop(s);

if(x==p->

data)p=p->

elsereturn0;

return1;

四、3

voiddelete(Stack*s)

Stack*temp;

InitS(temp);

while(!

EmptyS(s))

x=Pop(s);

if(x!

=m)Push(temp,x);

Empty(temp))

Push(s,Pop(temp));

四、4

intcorrect(char*exp)

InitStack(S);

intflag=1;

i=0;

while(exp[i]!

='

\0'

flag)

if(exp[i]=='

('

||exp[i]=='

['

{'

)Push(S,exp[i]);

//遇左括号入栈

)'

)if(Pop(S)!

)flag=0;

]'

}'

//遇右括号出栈,若栈顶不是左括号,则括号不配对

if(!

Empty(S))flag=0;

//若栈非空,则括号不配对

returnflag;

四、6

循环队列的结构类型定义:

constintm=5;

typedefintdatatype;

typedefstruct

{datatypesequ[m];

intrear,quelen;

}qu;

说明:

队满条件:

sq->

quelen==m队空条件:

quelen==0(注意:

不需要空出一个位置)

入队:

voidenqueue(qu*sq,datatypex)

{if(sq->

quelen==m)printf("

queueisfull"

);

else{sq->

quelen++;

sq->

rear=(sq->

rear+1)%m;

//修改队尾指针

sequ[sq->

rear]=x;

出队:

intdequeue(qu*sq,datatype&

x)

quelen==0)

{printf("

queueisempty"

return0;

quelen--;

x=sq->

sequ[(sq->

rear-sq->

quelen+m)%m];

习题5四、3

(1)顺序串

intEqual(SeqString*S,SeqString*T)

//比较顺序串S、T是否相等

{i=0;

while((S->

ch[i]==T->

ch[i])&

(i<

S->

length)&

T->

length))i++;

if((i==S->

(i==T->

length))return1;

elsereturn0;

(2)链串

intEqual(LinkString*S,LinkString*T)

//比较链串S、T是否相等

p=S->

next;

q=T->

while((S->

data==T->

data)&

(p!

=NULL)&

(q!

=NULL))

q=q->

if((p==NULL)&

(q==NULL))return1;

elsereturn0;

四、7

voidstrDelete(char*S,inti,intm)

chartemp[80];

intk;

k=i-1;

=strlen(S))return;

strncpy(temp,S,k);

if(k+m>

=strlen(S))strcpy(temp+k,"

\0"

elsestrcpy(temp+k,S+k+m);

strcpy(S,temp);

或者:

voidstrDelete(seqstring*S,inti,intm)

//字符串中字符的序号从1开始,数组元素从下标0开始使用

chartemp[maxsize];

=S->

len){

strncpy(temp,S->

str,i-1);

//将S->

str中第i个字符之前的i-1个字符复制到temp中

strcpy(temp+i-1,S->

str+i+m-1);

//将S->

str中第i+m个字符开始的字符连接到temp

之后

strcpy(S->

str,temp);

//将temp复制到S->

str中

if(i<

len)

if(i+m-1<

len)S->

len=S->

len-m;

//删除了字符串中间的部分字符

elseS->

len=i-1;

//删除了字符串中从第i个字符开始的全部字符

四、9

voidcreate(Spmatrix*a)

scanf("

%d,%d,%d"

&

a->

m,&

n,&

t);

for(ano=0;

ano<

t;

ano++)

scanf("

data[ano].i,&

data[ano].j,&

data[ano].v);

四、11

voidminmax(array*p)

//找马鞍点

{inti,j,have=0;

for(i=0;

m;

i++)

{p->

min[i]=p->

A[i][0];

for(j=1;

j++)

if(p->

A[i][j]<

p->

min[i])p->

A[i][j];

}//分别找出m行的最小值

for(j=0;

max[j]=p->

A[0][j];

for(i=1;

A[i][j]>

max[j])p->

}//分别找出n列的最大值

for(j=0;

min[i]==p->

max[j])//若相等,则是一个马鞍点

{cout<

<

"

"

endl;

//输出马鞍点

have=1;

}

have)cout<

矩阵中没有马鞍点!

\n"

;

第六章四4、知二叉树的后序序列DECBGIHFA和中序序列为DCEBAFHGI,画出这棵二叉树。

A

BF

C    H

DEI

G

7、右交换子树算法(在上机答案)

//交换左右子树

bitree*swap(bitree*p)

{bitree*t1,*t2;

if(p!

{1=swap(p->

lchild);

t2=swap(p->

rchild);

p->

lchild=t2;

rchild=t1;

returnp;

12、已知结点序列{21,18,37,42,65,24,19,26,45,25},画出相应的二叉排序树,并画出删除结点37后的二叉排序树。

有问题

(1)

(2)删除结点37后

14某密码电文由8个字母组成,每个字母在电文中的出现频率分别是7、19、2、6、32、3、21、10,试为这8个字母设计相应的哈夫曼编码。

解:

这8个字母可用A、B、C、D、E、F、G、H表示

组成的哈夫曼编码如下所示。

A:

1001B:

101C:

0010D:

1000

E:

11F:

0011G:

01H:

000

设计的哈夫曼树如下:

哈夫曼树

第七章四、4、邻接表:

126null

2136null

324null

435null

547null

6127null

756null

DFS:

1234576BFS:

1263745(不唯一)或1627354

5、按顺序输入后的邻接表:

126435null

216null

3145null

41635null

56413null

61245null

6、从顶点4开始:

412653(有多种)

BFS:

413562(不唯一)

7最小生成树:

7

6

1

5

24

3

第八章4、查找586

12345678910111213141516

687155188150465505508511586656670700766897908

Low=1high=16mid=(1+16)/2=8R[8]=508<

586

Low=mid+1=9high=16mid=(9+16)/2=12R[12]=670>

Low=9high=12-1=11mid=(9+11)/2=10R[10]=586

586=R[10]查找成功

5线性探查13

HT

1

2

3

4

5

6

7

8

9

10

11

12

52

26

15

120

43

84

70

99

92

37

25

H(key)

比较

拉链

52,26

15,70

43,82

37,11

给定关键字序列为(105,50,30,25,85,40,100,12,10,28,分别写出直接插入排序、希尔排序、起泡排序、直接选择排序、快速排序和归并排序的每一趟运行结果。

直接插入排序:

初始关键字序列:

105,50,30,25,85,40,100,12,10,28

第一趟直接插入排序:

【50,105】

第二趟直接插入排序:

【30,50,105】

第三趟直接插入排序:

【25,30,50,105】

第四趟直接插入排序:

【25,30,50,85,105】

第五趟直接插入排序:

【25,30,40,50,85,105】

第六趟直接插入排序:

【25,30,40,50,85,100,105】

第七趟直接插入排序:

【12,25,30,40,50,85,100,105】

第八趟直接插入排序:

【10,12,25,30,40,50,85,100,105】

第九趟直接插入排序:

【10,12,25,28,30,40,50,85,100,105】

希尔排序(增量为5,3,1):

第一趟希尔排序:

40,50,12,10,28,105,100,30,25,85

第二趟希尔排序:

10,28,12,40,30,25,85,50,105,100

第三趟希尔排序:

10,12,25,28,30,40,50,85,100,105

起泡排序:

第一趟起泡排序:

10,105,50,30,25,85,40,100,12,28

第二趟起泡排序:

10,12,105,50,30,25,85,40,100,28

第三趟起泡排序:

10,12,25,105,50,30,85,40,100,28

第四趟起泡排序:

10,12,25,28,105,50,30,85,40,100

第五趟起泡排序:

10,12,25,28,30,105,50,85,40,100

第六趟起泡排序:

10,12,25,28,30,40,105,50,85,100

第七趟起泡排序:

10,12,25,28,30,40,50,105,85,100

第八趟起泡排序:

10,12,25,28,30,40,50,85,105,100

第九趟起泡排序:

直接选择排序:

第一趟选择排序:

10,50,30,25,85,40,100,12,105,28

第二趟选择排序:

10,12,30,25,85,40,100,50,105,28

第三趟选择排序:

10,12,25,30,85,40,100,50,105,28

第四趟选择排序:

10,12,25,28,85,40,100,50,105,30

第五趟选择排序:

10,12,25,28,30,40,100,50,105,85

第六趟选择排序:

10,12,25,28,30,40,50,100,105,85

第七趟选择排序:

10,12,25,28,30,40,50,85,100,105(完成)

第八趟选择排序:

第九趟选择排序:

快速排序:

第一趟快速排序:

(28,50,30,25,85,40,100,12,10),105

第二趟快速排序:

(10,12,25),28,(85,40,100,30,50),105

第三趟快速排序:

10,12,25,28,(50,40,30),85,(100),105

第四趟快速排序:

10,12,25,28,(30,40),50,85,100,105

第五趟快速排序:

归并排序:

第一趟归并排序:

50,105,25,30,40,85,12,100,10,28

第二趟归并排序:

25,30,50,105,12,40,85,100,10,28

第三趟归并排序:

设待排序的关键字序列为(15,21,6,30,23,6′,20,17),试分别写出使用以下排序方法每趟排序后的结果。

并说明做了多少次比较。

(1)直接插入排序

(2)希尔排序(增量为5,2,1)(3)起泡排序

(4)快速排序(5)直接选择排序(6)锦标赛排序

(7)堆排序(8)二路归并排序(9)基数排序

【解答】

(2)希尔排序(增量为5,2,1)

15,21,6,30,23,6′,20,17

6′,20,6,30,23,15,21,17

6′,15,6,17,21,20,23,30

6′,6,15,17,20,21,23,30

(3)起泡排序

15,21,6,30,23,6′,20,17

15,6,21,23,6′,20,17,30

6,15,21,6′,20,17,23,30

6,15,6′,20,17,21,23,30

6,6′,15,17,20,21,30,23

(4)快速排序

【6′,6】15【30,23,21,20,17】

6′,6,15【17,23,21,20】30

6′,6,15,17【23,21,20】30

6′,6,15,17,【20,21】23,30

6,6′,15,17,20,21,30,23

(5)直接选择排序

第一趟直接选择排序:

6,21,15,30,23,6′,20,17

第二趟直接选择排序:

6,6′,15,30,23,21,20,17

第三趟直接选择排序:

第四趟直接选择排序:

6,6′,15,17,23,21,20,30

第五趟直接选择排序:

6,6′,15,17,20,21,23,30

第六趟直接选择排序:

第七趟直接选择排序:

(6)锦标赛排序

15,21,6,30,23,6′,20,17(此题答案的格式不对,我删去了)

锦标赛排序的基本思想是:

首先对n个待排序记录的关键字进行两两比较,从中选出n/2个较小者再两两比较,直到选出关键字最小的记录为止,此为一趟排序。

我们将一趟选出的关键字最小的记录称为“冠军”,而“亚军”是从与“冠军”比较失败的记录中找出,具体做法为:

输出“冠军”后,将(冠军)叶子结点关键字改为最大,继续进行锦标赛排序,直到选出关键字次小的记录为止,如此循环直到输出全部有序序列。

上面给出了排在前三个的记录,详细过程略。

(7)堆排序

初始堆:

6,17,6’,21,23,15,20,30

第一次调堆:

6’,17,15,21,23,30,20,【6】

第二次调堆:

15,17,20,21,23,30,【6’,6】

第三次调堆:

17,21,20,30,23,【15,6’,6】

第四次调堆:

20,21,23,30,【17,15,6’,6】

第五次调堆:

21,30,23,【20,17,15,6’,6】

第六次调堆:

23,30,【21,20,17,15,6’,6】

第七次调堆:

30,【23,21,20,17,15,6’,6】

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

当前位置:首页 > 高等教育 > 艺术

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

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