东南大学十套数据结构试题及答案.docx
《东南大学十套数据结构试题及答案.docx》由会员分享,可在线阅读,更多相关《东南大学十套数据结构试题及答案.docx(24页珍藏版)》请在冰豆网上搜索。
东南大学十套数据结构试题及答案
数据构造试卷〔一〕
三、计算题〔每题6分,共24分〕
1.在如下数组A中链接存储了一个线性表,表头指针为A[0].next,试写出该线性表。
A01234567
data
60
50
78
90
34
40
next
3
5
7
2
0
4
1
2.请画出以下列图的邻接矩阵和邻接表。
3.一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7};
E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,
(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};
用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
4.画出向小根堆中参加数据4,2,5,8,3时,每参加一个数据后堆的变化。
四、阅读算法〔每题7分,共14分〕
1.LinkListmynote(LinkListL)
{//L是不带头结点的单链表的头指针
if(L&&L->next){
q=L;L=L->next;p=L;
S1:
while(p->next)p=p->next;
S2:
p->next=q;q->next=NULL;
}
returnL;
}
请答复以下问题:
〔1〕说明语句S1的功能;
〔2〕说明语句组S2的功能;
〔3〕设链表表示的线性表为〔a1,a2,…,an〕,写出算法执行后的返回值所表示的线性表。
2.voidABC(BTNode*BT)
{
ifBT{
ABC(BT->left);
ABC(BT->right);
cout<data<<'';
}
}
该算法的功能是:
五、算法填空〔共8分〕
二叉搜索树的查找——递归算法:
boolFind(BTreeNode*BST,ElemType&item)
{
if(BST==NULL)
returnfalse;//查找失败
else{
if(item==BST->data){
item=BST->data;//查找成功
return___________;}
elseif(itemdata)
returnFind(______________,item);
elsereturnFind(_______________,item);
}//if
}
六、编写算法〔共8分〕
统计出单链表HL中结点的值等于给定值X的结点数。
intCountX(LNode*HL,ElemTypex)
数据构造试卷〔二〕
三、应用题(36分)
1.设一组初始记录关键字序列为(45,80,48,40,22,78),那么分别给出第4趟简单项选择择排序和第4趟直接插入排序后的结果。
2.设指针变量p指向双向链表中结点A,指针变量q指向被插入结点B,要求给出在结点A的后面插入结点B的操作序列〔设双向链表中结点的两个指针域分别为llink和rlink〕。
3.设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。
4.设一棵树T中边的集合为{(A,B),(A,C),(A,D),(B,E),(C,F),(C,G)},要求用孩子兄弟表示法〔二叉链表〕表示出该树的存储构造并将该树转化成对应的二叉树。
5.设有无向图G,要求给出用普里姆算法构造最小生成树所走过的边的集合。
6.设有一组初始记录关键字为(45,80,48,40,22,78),要求构造一棵二叉排序树并给出构造过程。
四、算法设计题(16分)
1.设有一组初始记录关键字序列〔K1,K2,…,Kn〕,要求设计一个算法可以在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。
2.设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储构造表示。
数据构造试卷〔三〕
二.填空题
1.以下算法实如今顺序散列表中查找值为x的关键字,请在下划线处填上正确的语句。
structrecord{intkey;intothers;};
inthashsqsearch(structrecordhashtable[],intk)
{
inti,j;j=i=k%p;
while(hashtable[j].key!
=k&&hashtable[j].flag!
=0){j=(____)%m;if(i==j)return(-1);}
if(_______________________)return(j);elsereturn(-1);
}
2.以下算法实如今二叉排序树上查找关键值k,请在下划线处填上正确的语句。
typedefstructnode{intkey;structnode*lchild;structnode*rchild;}bitree;
bitree*bstsearch(bitree*t,intk)
{
if(t==0)return(0);elsewhile(t!
=0)
if(t->key==k)_____________;elseif(t->key>k)t=t->lchild;else_____________;
}
三、计算题(每题10分,共30分)
1.二叉树的前序遍历序列是AEFBGCDHIKJ,中序遍历序列是EFAGBCHKIJD,画出此二叉树,并画出它的后序线索二叉树。
2.待散列的线性表为〔36,15,40,63,22〕,散列用的一维地址空间为[0..6],假定选用的散列函数是H〔K〕=Kmod7,假设发生冲突采用线性探查法处理,试:
〔1〕计算出每一个元素的散列地址并在以下列图中填写出散列表:
`0123456
〔2〕求出在查找每一个元素概率相等情况下的平均查找长度。
3.序列〔10,18,4,3,6,12,1,9,18,8〕请用快速排序写出每一趟排序的结果。
四、算法设计题(每题15分,共30分)
1.设计在单链表中删除值一样的多余结点的算法。
2.设计一个求结点x在二叉树中的双亲结点算法。
数据构造试卷〔四〕
1.设一组初始记录关键字序列为(20,18,22,16,30,19),那么以20为中轴的一趟快速排序结果为______________________________。
2.设一组初始记录关键字序列为(20,18,22,16,30,19),那么根据这些初始关键字序列建成的初始堆为________________________。
3.设某无向图G中有n个顶点,用邻接矩阵A作为该图的存储构造,那么顶点i和顶点j互为邻接点的条件是______________________。
4.设无向图对应的邻接矩阵为A,那么A中第i上非0元素的个数_________第i列上非0元素的个数〔填等于,大于或小于〕。
5.设前序遍历某二叉树的序列为ABCD,中序遍历该二叉树的序列为BADC,那么后序遍历该二叉树的序列为_____________。
6.设散列函数H(k)=kmodp,解决冲突的方法为链地址法。
要求在以下算法划线处填上正确的语句完成在散列表hashtalbe中查找关键字值等于k的结点,成功时返回指向关键字的指针,不成功时返回标志0。
typedefstructnode{intkey;structnode*next;}lklist;
voidcreatelkhash(lklist*hashtable[])
{
inti,k;lklist*s;
for(i=0;ifor(i=0;i{
s=(lklist*)malloc(sizeof(lklist));s->key=a[i];
k=a[i]%p;s->next=hashtable[k];_______________________;
}
}
三、计算题(每题10分,共30分)
1、画出广义表LS=((),(e),(a,(b,c,d)))的头尾链表存储构造。
2、以下列图所示的森林:
(1)求树〔a〕的先根序列和后根序列;
(2)求森林先序序列和中序序列;
〔3〕将此森林转换为相应的二叉树;
3、设散列表的地址范围是[0..9],散列函数为H〔key〕=〔key2+2〕MOD9,并采用链表处理冲突,请画出元素7、4、5、3、6、2、8、9依次插入散列表的存储构造。
四、算法设计题(每题10分,共30分)
1.设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。
2.设计在链式存储构造上交换二叉树中所有结点左右子树的算法。
3.在链式存储构造上建立一棵二叉排序树。
数据构造试卷〔五〕
1.下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。
voidbubble(intr[n])
{
for(i=1;i<=n-1;i++)
{
for(exchange=0,j=0;j<_____________;j++)
if(r[j]>r[j+1]){temp=r[j+1];______________;r[j]=temp;exchange=1;}
if(exchange==0)return;
}
}
2.下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。
structrecord{intkey;intothers;};
intbisearch(structrecordr[],intk)
{
intlow=0,mid,high=n-1;
while(low<=high)
{
________________________________;
if(r[mid].key==k)return(mid+1);elseif(____________)high=mid-1;elselow=mid+1;
}
return(0);
}
三、应用题(32分)
1.
设某棵二叉树的中序遍历序列为DBEAC,前序遍历序列为ABDEC,要求给出该二叉树的的后序遍历序列。
2.设无向图G〔如右图所示〕,给出该图的最小生成树上边的集合并计算最小生成树各边上的权值之和。
3.设一组初始记录关键字序列为(15,17,18,22,35,51,60),要求计算出成功查找时的平均查找长度。
4.设散列表的长度为8,散列函数H(k)=kmod7,初始记录关键字序列为(25,31,8,27,13,68),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。
四、算法设计题(28分)
1.设计判断两个二叉树是否一样的算法。
2.设计两个有序单链表的合并排序算法。
数据构造试卷〔六〕
四、算法设计题(20分)
1.设计在顺序有序表中实现二分查找的算法。
2.设计判断二叉树是否为二叉排序树的算法。
3.在链式存储构造上设计直接插入排序算法
数据构造试卷〔七〕
三、填空题(30分)
1.下面程序段的功能是实现一趟快速排序,请在下划线处填上正确的语句。
structrecord{intkey;datatypeothers;};
voidquickpass(structrecordr[],ints,intt,int&i)
{
intj=t;structrecordx=r[s];i=s;
while(i{
while(ix.key)j=j-1;if(iwhile(____________________)i=i+1;if(i}
_________________;
}
四、算法设计题(20分)
1.设计在链式构造上实现简单项选择择排序算法。
2.设计在顺序存储构造上实现求子串算法。
3.设计求结点在二叉排序树中层次的算法。
数据构造试卷〔八〕
三、填空题(30分)
1.设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),那么以d=4为增量的一趟希尔排序完毕后的结果为_____________________________。
2.下面程序段的功能是实如今二叉排序树中插入一个新结点,请在下划线处填上正确的内容。
typedefstructnode{intdata;structnode*lchild;structnode*rchild;}bitree;
voidbstinsert(bitree*&t,intk)
{
if(t==0){____________________________;t->data=k;t->lchild=t->rchild=0;}
elseif(t->data>k)bstinsert(t->lchild,k);else__________________________;
}
3.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点X,那么在结点A的后面插入结点X需要执行的语句序列:
s->next=p->next;_________________;。
4.设指针变量head指向双向链表中的头结点,指针变量p指向双向链表中的第一个结点,那么指针变量p和指针变量head之间的关系是p=_________和head=__________〔设结点中的两个指针域分别为llink和rlink〕。
5.设某棵二叉树的中序遍历序列为ABCD,后序遍历序列为BADC,那么其前序遍历序列为__________。
6.完全二叉树中第5层上最少有__________个结点,最多有_________个结点。
7.设有向图中不存在有向边,那么其对应的邻接矩阵A中的数组元素A[i][j]的值等于____________。
8.设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),那么第4趟直接选择排序完毕后的结果为_____________________________。
9.设连通图G中有n个顶点e条边,那么对应的最小生成树上有___________条边。
10.设有一组初始记录关键字序列为(50,16,23,68,94,70,73),那么将它们调整成初始堆只需把16与___________互相交换即可。
四、算法设计题(20分)
1.设计一个在链式存储构造上统计二叉树中结点个数的算法。
2.设计一个算法将无向图的邻接矩阵转为对应邻接表的算法。
数据构造试卷〔九〕
五、算法设计题(20分)
1.设计计算二叉树中所有结点值之和的算法。
2.设计将所有奇数移到所有偶数之前的算法。
3.设计判断单链表中元素是否是递增的算法。
数据构造试卷〔十〕
二、填空题(48分,其中最后两小题各6分)
1.设指针变量p指向单链表中结点A,那么删除结点A的语句序列为:
q=p->next;p->data=q->data;p->next=___________;feee(q);
2.数据构造从逻辑上划分为三种根本类型:
___________、__________和___________。
3.设无向图G中有n个顶点e条边,那么用邻接矩阵作为图的存储构造进展深度优先或广度优先遍历时的时间复杂度为_________;用邻接表作为图的存储构造进展深度优先或广度优先遍历的时间复杂度为_________。
4.设散列表的长度为8,散列函数H(k)=k%7,用线性探测法解决冲突,那么根据一组初始关键字序列(8,15,16,22,30,32)构造出的散列表的平均查找长度是________。
5.设一组初始关键字序列为(38,65,97,76,13,27,10),那么第3趟冒泡排序完毕后的结果为_____________________。
6.设一组初始关键字序列为(38,65,97,76,13,27,10),那么第3趟简单项选择择排序后的结果为______________________。
7.设有向图G中的有向边的集合E={<1,2>,<2,3>,<1,4>,<4,5>,<5,3>,<4,6>,<6,5>},那么该图的一个拓扑序列为_________________________。
8.下面程序段的功能是建立二叉树的算法,请在下划线处填上正确的内容。
typedefstructnode{intdata;structnode*lchild;________________;}bitree;
voidcreatebitree(bitree*&bt)
{
scanf(“%c〞,&ch);
if(ch=='#')___________;else
{bt=(bitree*)malloc(sizeof(bitree));bt->data=ch;________;createbitree(bt->rchild);}
}
9.下面程序段的功能是利用从尾部插入的方法建立单链表的算法,请在下划线处填上正确的内容。
typedefstructnode{intdata;structnode*next;}lklist;
voidlklistcreate(_____________*&head)
{
for(i=1;i<=n;i++)
{
p=(lklist*)malloc(sizeof(lklist));scanf(“%d〞,&(p->data));p->next=0;
if(i==1)head=q=p;else{q->next=p;____________;}
}
}
三、算法设计题(22分)
1.设计在链式存储构造上合并排序的算法。
2.设计在二叉排序树上查找结点X的算法。
3.设关键字序列(k1,k2,…,kn-1)是堆,设计算法将关键字序列(k1,k2,…,kn-1,x)调整为堆。
数据构造试卷〔一〕参考答案
三、计算题〔每题6分,共24分〕
1.线性表为:
〔78,50,40,60,34,90〕
2.邻接矩阵:
邻接表如图11所示:
图11
3.用克鲁斯卡尔算法得到的最小生成树为:
(1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)20
4.见图12
图12
四、读算法〔每题7分,共14分〕
1.〔1〕查询链表的尾结点
〔2〕将第一个结点链接到链表的尾部,作为新的尾结点
〔3〕返回的线性表为〔a2,a3,…,an,a1〕
2.递归地后序遍历链式存储的二叉树。
五、法填空〔每空2分,共8分〕
trueBST->leftBST->right
六、编写算法〔8分〕
intCountX(LNode*HL,ElemTypex)
{inti=0;LNode*p=HL;//i为计数器
while(p!
=NULL)
{if(P->data==x)i++;
p=p->next;
}//while,出循环时i中的值即为x结点个数
returni;
}//CountX
数据构造试卷〔二〕参考答案
三、应用题
1.(22,40,45,48,80,78),(40,45,48,80,22,78)
2.q->llink=p;q->rlink=p->rlink;p->rlink->llink=q;p->rlink=q;
3.2,ASL=91*1+2*2+3*4+4*2)=25/9
4.树的链式存储构造略,二叉树略
5.E={(1,3),(1,2),(3,5),(5,6),(6,4)}
6.略
四、算法设计题
1.设有一组初始记录关键字序列〔K1,K2,…,Kn〕,要求设计一个算法可以在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。
voidquickpass(intr[],ints,intt)
{
inti=s,j=t,x=r[s];
while(iwhile(ix)j=j-1;if(iwhile(i}
r[i]=x;
}
2.设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储构造表示。
typedefstructnode{intdata;structnode*next;}lklist;
voidintersection(lklist*ha,lklist*hb,lklist*&hc)
{
lklist*p,*q,*t;
for(p=ha,hc=0;p!
=0;p=p->next)
{for(q=hb;q!
=0;q=q->next)if(q->data==p->data)break;
if(q!
=0){t=(lklist*)malloc(sizeof(lklist));t->data=p->data;t->next=hc;hc=t;}
}
}
数据构造试卷〔三〕参考答案
二.填空题
13.j+1,hashtable[j].key==k
14.return(t),t=t->rchild
三、计算题
1.
2、H(36)=36mod7=1;H1(22)=(1+1)mod7=2;….冲突
H(15)=15mod7=1;….冲突H2(22)=(2+1)mod7=3;
H1(15)=(1+1)mod7=2;
H(40)=40mod7=5;
H(63)=63mod7=0;
H(22)=22mod7=1;….冲突
〔1〕0123456
63
36
15
22
40
〔2〕ASL=
3、(8,9,4,3,6,1),10,(12,18,18)
(1,6,4,3),8,(9),10,12,(18,18)
1,(3,4,6),8,9,10,12,18,(18)
1,3,(4,6),8,9,10,12,18,18
1,3,4,6,8,9,10,12,18,18
四、算法设计题
1.设计在单链表中删除值一样的多余结点的算法。
typedefintdatatype;
ty