清华大学2001q硕士研I生考试数据l构试题_跨考网
一、试l出下列有关q查?mfsets)的操作序列的q算l果Q?/p>
union(1,2) , union(3,4) , union(3,5) , union(1,7) , union(3,6) , union(8,9) , union(1,8) , union(3,10) , union(3,11) , union(3,12) , union(3,13) , union(14,15) , union(16,0) , union(14,16) , union(1,3) , union(1,14)?union是合q运,在以前的书中命名为merge)
要求
(1) 对于union(i,j)Q以i作ؓ(f)j的双Ԍ (5?
(2) 按i和j为根的树(wi)的高度实现union(i,j)Q高度大者ؓ(f)高度者的双亲Q?(5?
(3) 按i和j为根的树(wi)的结点个数实现union(i,j)Q结点个数大者ؓ(f)l点个数者的双亲Q?(5?
二、设??A,B,C,D)之间架设?座桥,如图所C?
要求从某一地出?l过每桥恰巧一?最后仍回到原地
(1) 试就以上囑Ş说明:此问题有解的条g是什? (5?
(2) 讑֛中的点Cؓ(f)n,试用C或Pascal描述与求解此问题有关的数据结构ƈ~写一个算?扑և满要求的一条回? (10?
三、针对以下情늡定非递归的归q排序的q行旉(数据比较ơ数与移动次?:
(1) 输入的n个数据全部有? (5?
(2) 输入的n个数据全部逆向有序; (5?
(3) 随机地输入n个数? (5?
四、简单回{有关AVL?wi)的问?
(1) 在有N个结点的AVL?wi)?为结点增加一个存攄炚w度的数据成员,那么每一个结炚w要增加多个字位(bit)? (5?
(2) 若每一个结点中的高度计数器?bit,那么q样的AVL?wi)可以有多少?最有多少个关键码? (5?
五、设一个散列表包含hashSize=13个表?.其下标从0?2,采用U性探查法解决冲突. h以下要求,下列关键码散列到表?
10 100 32 45 58 126 3 29 200 400 0
(1) 散列函数采用除留余数??hashSize(取余q算)各关键码映像到表中. h出每一个生冲H的关键码可能生多次冲突. (7?
(2) 散列函数采用先将关键码各位数字折叠相? 再用%hashSize相加的l果映像到表中的办法. h出每一个生冲H的关键码可能生多次冲突. (8?
六、设一二叉树(wi)的结点定义ؓ(f)
struct BinTreeNode{
ElemType data;
BinTreeNode *leftChild, *rightChild;
}
现采用输入广义表表示建立二叉? 具体规定如下:
(1) ?wi)的根结点作为由子?wi)构成的表的表名放在表的最前面;
(2) 每个l点的左子树(wi)和右子树(wi)用逗号隔开. 若仅有右子树(wi)没有左子? 逗号不能省略.
(3) 在整个广义表表示输入的结֊上一个特D的W号(例如??表示输入l果.
例如,对于如右图所C的二叉? 其广义表表示为A(B(D,E(G,)),C(,F))
A
/ \
B C
/ \ \
D E F
/
G
此算法的基本思\?依次从保存广义表的字W串ls中输入每个字W? 若遇到的是字?假定以字母作为结点的?, 则表C是l点的? 应ؓ(f)它徏立一个新的结? q把该结点作为左子女(当k=1)或有子女(当k=2)链接到其双亲l点? 若遇到的是左括号?? 则表明子表的开?k|ؓ(f)1;若遇到的是右括号?? 则表明子表结? 若遇到的是逗号?? 则表CZ左子女ؓ(f)根的子树(wi)处理完毕,应接着处理以右子女为根的子? k|ؓ(f)2.
在算法中使用了一个栈s, 在进入子表之?根l点指针q栈, 以便括号内的子女链接之用. 在子表处理结束时退? 相关的栈操作如下:
MakeEmpty(s) |空?/p>
Push(s,p) 元素pq栈
Pop(s) q栈
Top(s) 存取栈顶元素的函?/p>
下面l出了徏立二叉树(wi)的算? 其中?个语句缺? 请阅L法q把~失的语句补? (每空3?
Void CreateBinTree(BinTreeNode *&BT, char ls){
Stacks; MakeEmpty(s);
BT=NULL; //|二叉树(wi)
BinTreeNode *p;
int k;
istream ins(ls); //把串ls定义入字W串对象ins
Char ch;
ins>>ch; //从ins序d一个字W?/p>
While(ch!=??{ //逐个字符处理,直到遇到''#''为止
Switch(ch){
case?? _______(1)_______
k=1;
break;
case?? pop(s);
break;
case?? _______(2)_______
break;
default: p=new BinTreeNode;
_______(3)_______
p->leftChild=NULL;
p->rightChild=NULL;
if(BT==NULL)
_______(4)_______
else if (k==1) top(s)->leftChild=p;
else top(s)->rightChild=p;
}
_______(5)_______
}
}
七、下面是一个用C~写的快速排序算? Z避免最坏情?取基准记录pivot采用从left,right和mid=[(left+right)/2]中取中间? q交换到right位置的办? 数组a存放待排序的一l记? 数据cd为Type, left和right是呆排序子区间的最左端点和最右端?
Void quicksort(Type a,int left,int right){
Type temp;
If(leftType pivot=median3(a,left,right);
Int I=left, j=right-1;
For( ; ; ){
While(iWhile(iif(itemp=a[i]; a[j]=a[i]; a[i]=temp;
I++; j--;
}
else break;
}
if(a[i]>pivot)
{temp=a[i]: a[i]=a[right]; a[right]=temp;}
quicksort(a,left,i-1); //递归排序左子区间
quicksort(a,i+1,right); //递归排序叛_区间
}
}
(1) 用C或Pascal实现三者取中子E序 median3(a,left,right); (5?
(2) 改写 quicksort 法, 不用栈消ȝ二个递归调用 quicksort(a,i+1,right); (5?
(3) l箋改写 quicksort 法, 用栈消去剩下的递归调用. (5?
2022考研初复试已l接q尾壎ͼ考研学子全面q入2023届备?/b>Q跨考ؓ(f)23考研的考生准备?0大课包全E准备、全q复?fn)备考计划、目标院校专业辅对{全真复试模拟练?fn)和全程针对性指|2023考研的小伙伴针也已经开始择校和复习(fn)了,跨考考研畅学5.0版本全新升Q无Z在校在家都可以更自如的完成你的考研复习(fn)Q?/a>暑假集训?/span>带来了院校专业初步选择Q明方向;考研备考全q规划,核心知识点入门;个性化制定备考方案,助你赢在赯U,早出发一点离成功更q一点!
考研院校专业选择和考研复习(fn)计划 | |||
2023备考学?/td> | 2023U上U下随时学习(fn) | 34所自划UK校考研复试分数U汇?/td> | |
2022考研复试最全信息整?/a> | 全国各招生院校考研复试分数U汇?/a> | ||
2023全日制封闭训l?/span> | 全国各招生院校考研调剂信息汇?/a> | ||
2023考研先知 | 考研考试U目有哪些? | 如何正确看待考研分数U? | |
不同院校相同专业如何选择更适合自己?/a> | 从就业说考研如何择专业? | ||
手把手教你如何选专业? | 高校研究生教育各学科门类排行?/a> |
相关推荐
跨考考研评
班型 | 定向班型 | 开班时?/td> | 高定?/td> | 标准?/td> | 评介绍 | 咨询 |
U季集训 | 冲刺?/td> | 9.10-12.20 | 168000 | 24800?/td> | 班面授+专业??+专业译֮向辅?协议加强评(高定?+专属规划{疑(高定?+_化答?复试资源(高定?+复试译(高定?+复试指导(高定?+复试班主?v1服务(高定?+复试面授密训(高定?+复试1v1(高定? | |
2023集训畅学 | 非定向(政英?数政qQ?/td> | 每月20?/td> | 22800?协议? | 13800?/td> | 先行阶在U课E?基础阶在U课E?强化阶在U课E?真题阶在U课E?冲刺阶在U课E?专业NҎ(gu)一对一评+班主dE督学服?全程规划体系+全程试体系+全程_化答?择校择专业能力定位体p?全年关键环节指导体系+初试加强?初试专属服务+复试全科标准班服?/td> |