数据结构1225AWord文件下载.docx

上传人:b****3 文档编号:17851923 上传时间:2022-12-11 格式:DOCX 页数:11 大小:77.67KB
下载 相关 举报
数据结构1225AWord文件下载.docx_第1页
第1页 / 共11页
数据结构1225AWord文件下载.docx_第2页
第2页 / 共11页
数据结构1225AWord文件下载.docx_第3页
第3页 / 共11页
数据结构1225AWord文件下载.docx_第4页
第4页 / 共11页
数据结构1225AWord文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构1225AWord文件下载.docx

《数据结构1225AWord文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构1225AWord文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构1225AWord文件下载.docx

这一过程的代码:

ltmp->

next=fence->

next;

fence->

next=ltmp;

2下图所示是双链表结点的删除过程,在fence结点后面删除一个值为23的结点,已知fence->

next是指向fence的后继结点,fence->

prev是指向fence的前驱结点,ltmp是一个值为NULL的链表结点指针,请把这一删除过程用代码表示出来:

(8分)

ltmp=fence->

next=ltmp->

next->

prev=fence;

3画出下图中的BST加上值5以后的形状。

4画出下图所示图的相邻矩阵表示(假设下面的表格是一个二维数组,请在表格中填入正确的数值)。

1

2

3

4

5

6

10

20

15

11

5给出下图从顶点1开始的DFS树。

深度优先搜索(DFS):

从底到高,从小到大

广度优先搜索(BFS):

直接在下面的顶点中画出来即可:

6给出下图从顶点3开始使用Prim(普里姆)算法时的最小支撑树(最小生成树)。

7起泡排序函数的算法如下:

voidbubsort(intA[],intn){

inttmp;

for(inti=0;

i<

n;

i++)

{

for(intj=i+1;

j<

j++){

if(A[i]>

A[j]){

tmp=A[i];

A[i]=A[j];

A[j]=tmp;

}

}

//外层循环,打印一下中间结果

for(intk=0;

k<

k++)printf("

%d"

A[k]);

printf("

\n"

);

}

}

对数组

intA[]={9,12,3,7,90,15};

应用上面的排序算法进行排序的部分中间打印结果如下,请补充使之完整:

第0次外层循环的中间结果:

312979015

第1次外层循环的中间结果:

第2次外层循环的中间结果:

第3次外层循环的中间结果:

第4次外层循环的中间结果:

第5次外层循环的中间结果:

379121590

8给出从下图的最大值堆中删除最大元素后得到的堆。

II.算法填空部分(每空一条语句或表达式,填在本大题后面的标号线上,每空2分,共30分)

1假设有两个链表值都是从小到大排序的,下面的函数能把把它们合并成一个有序的表。

//合并两个有序的单链表为一个新的有序的单链表,

//传入参数为两个有序的单链表,返回合并后的有序表。

template<

classElem>

List<

Elem>

*merge(List<

*l1,List<

*l2){

l1->

setStart();

l2->

List<

*l=newLList<

();

Eleme1,e2;

//按顺序把两个表中的元素放入新表中

while(l1->

getValue(e1)&

&

⑴){//12->

getValue(e2)

if(e1<

e2){

l->

append(e1);

l1->

next();

}else{

l->

append(e2);

}//endif-else

}//endwhile

//如果表l1不为空,则把剩余的元素都放入新表中

getValue(e1)){

⑵;

//1->

append(e1)

l1->

//如果表l2不为空,则把剩余的元素都放入新表中

while(l2->

getValue(e2)){

l->

l2->

//返回新生成的表

return⑶1;

//List<

*1(错)

2回文(palindrome)是指一个字符串从前面读和从后面读都一样。

仅使用若干栈和队列、栈和队列的ADT函数以及若干个int类型和char类型的变量,下面的算法能判断一个字符串是否为回文。

算法的返回结果为true或false。

boolisPal(char*buf){

//声明一个空栈和一个空队列

Queue<

char>

*q;

Stack<

*s;

charcq,cs;

//初始化栈和队列

s=newAStack<

(BUFLEN);

q=newAQueue<

//把字符串中的字符一个一个分别入栈和入队

i<

strlen(buf);

i++){

s->

push(buf[i]);

⑷;

//q->

enqueue(buf[i])

//出栈出队,比较

while(q->

dequeue(cq)&

⑸){//s->

pop(cs)

if(cq!

=cs)returnfalse;

return⑹;

//true

3下面是一个递归函数search,传入参数为一棵二叉树和一个值K,如果值K出现在树中则返回true,否则返回false。

classElem,classKEComp>

boolsearch(BinNode<

*rt,intK);

*rt,intK){

if(rt==NULL)return⑺;

//false

else{

if(KEComp:

:

eq(K,rt->

val()))returntrue;

else{

return⑻;

//false(错)

}//search(rt->

left(),K)||search(rt->

right(),K)

4下面是一个递归函数smallcount,传入一棵二叉检索树和值K,返回值小于或等于K的结点数目。

classKey,classElem,classKEComp>

intsmallcount(BinNode<

*root,KeyK);

*root,KeyK){

if(root==NULL)return⑼0;

//false

lt(K,root->

val())){

returnsmallcount(root->

left(),K);

return⑽;

//smallcount(root->

right(),K)(错)

}//1+smallcount(root->

left(),K)+smallcount(root->

注:

返回值,如果是int型则返回0或1,如果是bool型则返回false或true

5写一个算法以确定有n个顶点的无向图是否包含回路,代码已经给出,其中空位的地方需要你来补上。

//判断是否存在环的方法,检查所有可能的连通分量

#defineUNVISITED0

#defineVISITED1

boolisExistRing(Graph*G){

boolbr=false;

for(intv=0;

⑾;

v++){//v<

G->

n()

//考虑图的所有顶点

if(⑿==UNVISITED){//G->

getmark(v)

br=br||LookRing(G,0,-1);

returnbr;

/*

*从顶点pre开始,利用深度优先搜索

*在同一个连通分量类,如果找到了一个曾经被访问过的顶点

*即说明此无向图存在环

*/

boolLookRing(Graph*G,intv,intpre){

⒀G->

setmark(v,VISITED);

//设置该顶点被访问

for(intw=G->

first(v);

w<

⒁G->

e();

w=G->

next(v,w)){

if(⒂==VISITED){//G->

getmark(W)

if(w!

=pre)

br=true;

//存在环

}else

br=br||LookRing(G,w,v);

//对每一个可能边再找

Ш.综合问题求解(共10分)

1编写一个函数,以一棵树为输入,返回树的结点数目,函数原型如下:

(10分)

template<

intnodeCount(GTNode<

*rt);

intnodeCount(GTNode<

*rt){

intn=1;

if(rt==NULL)return0;

for(GTNode<

*tmp=root->

leftmost_child();

tmp!

=NULL;

tmp=tmp->

right_sibling()){

n+=nodeCount(tmp);

returnn;

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

当前位置:首页 > 工程科技 > 交通运输

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

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