constintN=5;
voidmain(void){
inta[N][N],i,j;
Boolflag=true;
cout<<"enter"<
>a[i][j];
for(i=0;i
usingnamespacestd;
voidfun(char*s1,char*s2){
intlen1=strlen(s1),len2=strlen(s2),i=0;
while(*(s2+i)){
*(s1+len1+i)=*(s2+i);
i++;
}
s1[len1+len2]='\0';
}
voidmain(void){
char*s1=newchar[100],*s2="lmnopq";
strcpy(s1,"abcde");
fun(s1,s2);
cout<<"s1:"<试程序。
2.(20 分)设计并测试一个简单的整型数组类(IntArray)
(1)(
15 分)设计一个整型数组类,包含两个数据成员:int*base(数组元素的基地址),int
length(当前数组中的元素个数),类中包含如下主要成员函数和类的友元函数:
构造函数(用来初始化一个整型数组对象,默认元素个数为 0);
拷贝构造函数;
析构函数;
添加一个新元素的函数 addelement(intnewdata),在原来数组的基础上,添加上一个
值为 newdata 的新元素;
读取数组中指定下标的元素 intgetelement(intindex);
输出函数 print(),输出数组中的各个元素。
(2)(5 分)请设计相应的测试程序。
第二部分数据结构(总分 75 分)
一.单项选择题(每题 1.5 分,共 12 分)
1.设某数据结构的二元组形式表示为 A=(D,R),D={01,02,03,04,05,06,07,08,
09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,
07>,<03,08>,<03,09>},则数据结构 A 是()。
A.线性结构
B.树型结构
C.集合结构 D.图型结构
2.设数组 data[m]作为循环队列 SQ 的存储空间,front 为队头指针,rear 为队尾指针,则
执行出队操作后其头指针 front 值为(
)。
A.front=front+1B.front=front-1
C.front=(front-1)%mD.front=(front+1)%m
3.若一棵二叉树具有 10 个度为 2 的结点,则该二叉树的度为 0 的结点个数是()。
A.9
B.11
C.12
D.不确定
4.设 F 是由 T1、T2 和 T3 三棵树组成的森林,与 F 对应的二叉树为 B。T1、T2 和 T3 的结点
数分别为 N1、N2 和 N3,则二叉树 B 的根结点的左子树的结点数为()。
A.N1-1
B.N2-1
C.N2+N3
D.N1+N3
5.设有 n 个关键字具有相同的 Hash 函数值,则用线性探测法把这 n 个关键字映射到 HASH
表中需要做()次线性探测。
A.n2B.n(n+1)C.n(n+1)/2
D.n(n-1)/2
6.设一组权值集合 W=(15,3,14,2,6,9,16,17),要求根据这些权值集合构造一棵哈
夫曼树,则这棵哈夫曼树的带权路径长度为()。
A.129B.219C.189D.229
7.对初始状态为递增序列的表按递增顺序排序,最省时间的是算法。
A.堆排序 B.直接插入排序 C.快速排序 D.简单选择排序
8.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值 82 为的结点
时,次比较后查找成功。
A.1B.2C.4D.8
二.问答题(共 38 分)
1.(6 分,每空 2 分)判断带头结点的双向循环链表 L 是否对称相等的算法如下所示,请在
划线处填上正确的语句。
intequal(pointer*L)
{
Pointer*p,q;
intresult;
result=1;p=L->next;q=L->pre;
while((p<>q)&&((1)_______))
{if(p->data==q->data)
{(2)___________;
(3)___________;
}
else
result=0;
}
return(result);
}
2.(7 分)一棵二叉树的中序序列和后序序列分别如下,请画出该二叉树。
中序序列:DIGJLKBAECHF
后序序列:ILKJGDBEHFCA
(1)请画出这棵二叉树(3 分)
(2)请写出这棵二叉树的先序遍历结点序列(2 分)
(3)先序线索化这颗二叉树(2 分)
3.(6 分)设在通信中,使用了 ABCDE 五个字符,它们出现的频率分别为:
0.1,0.12,0.2,0.23,0.35。
(1)请给出相应的赫夫曼树(4 分)
(2)请给出字符串 BADACE 的赫夫曼编码(2 分)
4.(6 分)已知一组元素为(46,25,78,62,12,37,70,29),完成如下任务:
(1)画出按前述次序插入生成的平衡二叉树(4 分)
(2)求其在等概率情况下查找成功的 ASL(2 分)
5.(5 分)有一组键值 27,84,21,47,15,25,68,35,24,采用快速排序方法由小到大进行
排序,请写出每趟的结果。
6.(8 分)考虑右边的带权无向图 G,回答如下问题(10 分):
(1)(2 分)画出该图的邻接表存储结构,并根据你给出的存储结构完成如下任务;
(2)(2 分)写出广度优先遍历该图的顶点序列;
(3)(4 分)画出用普里姆算法从该图的顶点 A 构造最小生成树的过程。
三.程序设计题(共 25 分)
1.(12 分)编写算法判断一棵二叉链表表示的二叉树 T 是否是二叉排序树,并输出其中数
据
域最大的结点。
2.(13 分)有一个用邻接表表示的有向图,编写程序判断从顶点 i 至顶点 j(i、j 为顶点
下标)是否有简单路径,若有则打印出该路径上的顶点序列(打印一条简单路径即可)。要
求:先描述图的存储结构,查找邻接点等关于图的操作要自己实现。