数据结构1225AWord文件下载.docx
- 文档编号:17851923
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:11
- 大小:77.67KB
数据结构1225AWord文件下载.docx
《数据结构1225AWord文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构1225AWord文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
这一过程的代码:
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 1225