东南大学十套数据结构试题与答案docxWord格式.docx
《东南大学十套数据结构试题与答案docxWord格式.docx》由会员分享,可在线阅读,更多相关《东南大学十套数据结构试题与答案docxWord格式.docx(28页珍藏版)》请在冰豆网上搜索。
S2:
p->
next=q;
q->
next=NULL;
}
returnL;
回答下列:
(1)明句S1的功能;
(2)明句S2的功能;
(3)表表示的性表(a1,a2,⋯,an),写出算法行后的返回所表示的
性表。
2.voidABC(BTNode*BT)
{
ifBT{
ABC(BT->
left);
right);
cout<
<
BT->
data<
'
'
;
算法的功能是:
五、算法填空(共8分)
二叉搜索的找——算法:
...
boolFind(BTreeNode*BST,ElemType&
item)
if(BST==NULL)
returnfalse;
//查找失败
else{
if(item==BST->
data){
item=BST->
data;
//查找成功
return___________;
elseif(item<
BST->
data)
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)计算出每一个元素的散列地址并在下图中填写出散列表:
`
(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;
i<
m;
i++)_____________________;
n;
i++)
s=(lklist*)malloc(sizeof(lklist));
s->
key=a[i];
k=a[i]%p;
next=hashtable[k];
_______________________;
1、画出广义表LS=((),(e),(a,(b,c,d)))的头尾链表存储结构。
2、下图所示的森林:
(1)求树(a)的先根序列和后根序列;
(2)求森林先序序列和中序序列;
(3)将此森林转换为相应的二叉树;
G
B
C
H
D
EF
IJ
K
(a)
(b)
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;
=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;
intbisearch(structrecordr[],intk)
intlow=0,mid,high=n-1;
while(low<
=high)
________________________________;
if(r[mid].key==k)return(mid+1);
elseif(____________)high=mid-1;
else
low=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<
j)
while(i<
j&
r[j].key>
x.key)j=j-1;
if(i<
j){r[i]=r[j];
i=i+1;
}while(____________________)i=i+1;
j){r[j]=r[i];
j=j-1;
_________________;
1.设计在链式结构上实现简单选择排序算法。
2.设计在顺序存储结构上实现求子串算法。
3.设计求结点在二叉排序树中层次的算法。
数据结构试卷(八)
1.设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),则以d=4为增量的
一趟希尔排序结束后的结果为_____________________________。
2.下面程序段的功能是实现在二叉排序树中插入一个新结点,请在下划线处填上正确的
容。
typedefstructnode{intdata;
structnode*lchild;
structnode*rchild;
voidbstinsert(bitree*&
t,intk)
if(t==0){____________________________;
t->
data=k;
lchild=t->
rchild=0;
elseif(t->
data>
k)bstinsert(t->
lchild,k);
else__________________________;
3.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点X,则在结点A的后
面插入结点X需要执行的语句序列:
next=p->
next;
_________________;
。
4.设指针变量head指向双向链表中的头结点,指针变量p指向双向链表中的第一个结点,
则指针变量p和指针变量head之间的关系是p=_________和head=__________(设结点
中的两个指针域分别为llink和rlink)。
5.设某棵二叉树的中序遍历序列为ABCD,后序遍历序列为BADC,则其前序遍历序列为
__________。
6.完全二叉树中第5层上最少有__________个结点,最多有_________个结点。
7.设有向图中不存在有向边<
Vi,Vj>
,则其对应的邻接矩阵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与___________相互交换即可。
1.设计一个在链式存储结构上统计二叉树中结点个数的算法。
2.设计一个算法将无向图的邻接矩阵转为对应邻接表的算法。
数据结构试卷(九)
五、算法设计题(20分)
1.设计计算二叉树中所有结点值之和的算法。
2.设计将所有奇数移到所有偶数之前的算法。
3.设计判断单链表中元素是否是递增的算法。
数据结构试卷(十)
二、填空(48分,其中最后两小各
6分)
1.指量p指向表中点A,除点A的句序列:
q=p->
p->
data=q->
data;
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;
________________;
voidcreatebitree(bitree*&
bt)
scanf(“%c”,&
ch);
if(ch=='
#'
)___________;
{bt=(bitree*)malloc(sizeof(bitree));
bt->
data=ch;
________;
createbitree(bt->
rchild);
9.下面程序段的功能是利用从尾部插入的方法建立表的算法,在下划填上正确
的容。
typedefstructnode{intdata;
voidlklistcreate(_____________*&
head)
for(i=1;
=n;
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)
01110
10101
11011
2.接矩:
01110接表如11所示:
11
3.用克斯卡算法得到的最小生成:
(1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)20
4.12
442222
12
8
35
84
四、算法(每
7分,共14分)
1.
(1)表的尾点
(2)将第一个点到表的尾部,作新的尾点
(3)返回的性表(a2,a3,⋯,an,a1)
2.地后序遍式存的二叉。
五、法填空(每空2分,共8分)
trueBST->
leftBST->
right
六、写算法(8分)
{inti=0;
LNode*p=HL;
//i数器
while(p!
=NULL)
{if(P->
data==x)i++;
p=p->
}//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;
rlink->
llink=q;
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(i<
j){
r[j]>
x)j=j-1;
r[i]<
x)i=i+1;
r[i]=x;