太原理工大学数据结构试题入学考试库集及答案Word文件下载.docx
《太原理工大学数据结构试题入学考试库集及答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《太原理工大学数据结构试题入学考试库集及答案Word文件下载.docx(65页珍藏版)》请在冰点文库上搜索。
||b[I]!
=)f=0;
returnf&
3.对以下函数填空,实现以带头结点的单链表h为存储结构的直接选择排序。
typedefstructnode
{intkey;
structnode*next;
}NODE;
voidpxx(NODE*h)
{NODE*p,*q,*m;
intz;
p=h->
while(p!
=NULL)
{q=p->
m=p;
while(q!
{if(m->
key>
q->
key);
if(p!
=m)
{x=p->
key;
p->
key=m->
m->
key=x;
}
二、算法设计题(30分)
请用类C或类PASCAL语言设计实现下列功能的算法。
1.设二叉排序树以二叉链表为存储结构,请编写一个非递归算法,从大到小输出二叉排序树中所有其值不小于X的键值。
(10分)
2.设由n个整数组成一个大根堆(即第一个数是堆中的最大值),请编写一个时间复杂度为O(log2n)的算法,实现将整数X插入到堆中,并保证插入后仍是大根堆。
3.请编写一个算法,判断含n个顶点和e条边的有向图中是否存在环。
并分析算法的时间复杂度。
大连理工大学2003年硕士入学试题
数据结构部分(共75分)
一、回答下列问题(20分)
1.循环队列用数组A[0..m—1)存放其数据元素。
设tail指向其实际的队尾,front指向其实际队首的前一个位置,则当前队列中的数据元素有多少个?
如何进行队空和队满的判断?
2.设散列表的地址空间为0~10,散列函数为H(key)=key%11(%为求余函数),采用线性探查法解决冲突,并将键值序列{15,36,50,27,19,48}依次存储到散列表中,请画出相应的散列表;
当查找键值48时需要比较多少次?
3.什么是m阶B-树?
在什么情况下向一棵m阶B-树中插入一个关键字会产生结点分裂?
在什么情况下从一棵m阶B-树中删除一个关键字会产生结点合并?
4.什么是线索二叉树?
一棵二叉树的中序遍历序列为由djbaechif,前序遍历序列为abdjcefhi,请画出该二叉树的后序线索二叉树。
二、请用类C或类PASCAL语言进行算法设计,并回答相应问题。
(45分)
1.设计一非递归算法采用深度优先搜索对无向图进行遍历,并对算法中的无向图的存储结构予以简单说明。
2.用链式存储结构存放一元多项式Pn(x)=P1xel+P2xe2+…+Pnxen,其中Pi是指数为ei的项的非零系数,且满足0≤e1≤e2…<
en=n。
请设计算法将多项式B=Pn2(x)加到多项式A=Pn1(x),同时对算法及链表的结点结构给出简单注释。
要求利用Pnl(x)和Pn2(x)的结点产生最后求得的和多项式,不允许另建和多项式的结点空间。
3.
(1){Rl,R2,…,Rn}为待排序的记录序列,请设计算法对{R1,R2,…,Rn}按关键字的非递减次序进行快速排序。
(2)若待排序的记录的关键字集合是{30,4,48,25,95,13,90,27,18),请给出采用快速排序的第一趟、第二趟排序结果。
(3)若对
(2)中给出的关键字集合采用堆排序,请问初建的小根堆是什么?
(4)当给定的待排序的记录的关键字基本有序时,应采用堆排序还是快速排序?
为什么?
三、算法填空(10分)
1.一棵树以孩子兄弟表示法存储,递归算法numberofleaf计算并返回根为r的树中叶子结点的个数(NULL代表空指针)。
typedefstructnode{structnode*firstchild,*nextbrother;
}TFNNode;
intnumberofleaf(TFNNode*r)
{intnum;
if(r==NULL)num=0;
else
if(r->
firstchild==NULL)
num=+numberofleaf;
(r->
nextbrother);
else;
return(num);
2.在根结点为r的二叉排序树中,插人数据域值为x的结点,要求插入新结点后的树仍是一棵二叉排序树(NULL代表空指针)。
二叉排序树的结点结构为
structnode*lc,*rc;
}BiNode;
BiNode*insert(BiNode*r,intx)
{BiNode*p,*q,*s;
s=(BiNode*)malloc(sizeof(BiNode));
s->
key=x;
lc=NULL;
s->
rc=NULL;
q=NULL;
if(r==NULL){r=s;
return(r);
p=r;
while()
{q=p;
if()p=p->
lc;
elsep=p->
rc
if(x<
key);
else;
return;
清华大学2001年数据结构与程序设计试题
试题内容:
一、试给出下列有关并查集(mfsets)的操作序列的运算结果:
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是合并运算,在以前的书中命名为merge)
要求:
(1)对于union(i,j),以i作为j的双亲;
(5分)
(2)按i和j为根的树的高度实现union(i,j),高度大者为高度小者的双亲;
(3)按i和j为根的树的结点个数实现union(i,j),结点个数大者为结点个数小者的双亲。
二、设在4地(A,B,C,D)之间架设有6座桥,如下图所示:
要求从某一地出发,经过每座桥恰巧一次,最后仍回到原地。
(1)试就以上图形说明:
此问题有解的条件是什么?
(2)设图中的顶点数为n,试用C或Pascal描述与求解此问题有关的数据结构并编写一个算法,找出满足要求的一条回路。
三、针对以下情况确定非递归的归并排序的运行时间(数据比较次数与移动次数):
(1)输人的n个数据全部有序;
(2)输入的n个数据全部逆向有序;
(3)随机地输入几个数据。
四、简单回答有关AVL树的问题。
(1)在有N个结点的AVL树中,为结点增加一个存放结点高度的数据成员,那么每一个结点需要增加多少个字位(bit)?
(2)若每一个结点中的高度计数器有8bit,那么这样的AVL树可以有多少层?
最少有多少个关键码?
五、一个散列表包含hashSize=13个表项,其下标从0到12,采用线性探查法解决冲突。
请按以下要求,将下列关键码散列到表中。
101003245581263292004000
(1)散列函数采用除留余数法,用%hashSize(取余运算)将各关键码映像到表中。
请指出每一个产生冲突的关键码可能产生多少次冲突。
(7分)
(2)散列函数采用先将关键码各位数字折叠相加,再用%hashSize将相加的结果映像到表中的办法。
(8分)
六、设一棵二叉树的结点定义为
structBinTreeNode{
ElemTypedata;
BinTreeNode*leftChild,*rightChild;
现采用输入广义表表示建立二叉树。
具体规定如下:
(1)树的根结点作为由子树构成的表的表名放在表的最前面;
(2)每个结点的左子树和右子树用逗号隔开。
若仅有右子树,没有左子树,逗号不能省略。
(3)在整个广义表表示输入的结尾加上一个特殊的符号(例如“#”)表示输入结果。
;
例如,对于如右图所示的二叉树,其广义表表示为A(B(D,E(G,)),C(,F))
此算法的基本思路是:
依次从保存广义表的字符串ls中输入每个字符。
若遇到的是字母(假定以字母作为结点的值),则表示是结点的值,应为它建立一个新的结点,并把该结点作为左子女当(k=1)或右子女(当k=2)链接到其双亲结点上。
若遇到的是左括号”(”,则表明子表的开始,将A置为1;
若遇到的是右括号”)”,则表明子表结束。
若遇到的是逗号”,”,则表示以左子女为根的子树处理完毕,应接着处理以右子女为根的子树,将A置为2。
在算法中使用了一个栈s,在进入子表之前,将根结点指针进栈,以便括号内的子女链接之用。
在子表处理结束时退栈。
相关的栈操作如下:
MakeEmpty(s)置空栈
Push(s,p)元素p进栈
Pop(s)退栈
Top(s)存取栈顶元素的函数
下面给出了建立二叉树的算法,其中有5个语句缺失。
请阅读此算法并把缺失的语句补上。
(每空3分)
VoidCreateBinTree(BinTreeNode*&
BT,charls)
{Stack<
BinTreeNode*>
s;
MakeEmpty(s);
BT=NULL;
//置二叉树
BinTreeNode*p;
intk;
istreamins(ls);
//把串ls定义为输入字符串流对象ins
charch;
ins>
>
ch;
//从ins顺序读入一个字符
while(ch!
=”#”)
{//逐个字符处理,直到遇到’#’为止
switch(ch)
{case’(’:
(1)
k=1;
break;
pop(s);
case‘,’
(2)
default:
p=newBinTreeNode;
(3)
leftChild=NULL;
rightChfild=NULL;
if(BT==NULL)
(4)
elseif(k==1)top(s)->
leftChild=p;
elsetop(8)->
rightChild=p;
(5)
}|
七、下面是一个用C编写的快速排序算法。
为了避免最坏情况,取基准记录pivot采用从left,right和mid=(1eft+right)/2中取中间值,并交换到right位置的办法。
数组a存放待排序的一组记录,数据类型为Type,left和right是待排序子区间的最左端点和最右端点。
Voidquicksort(Typea&
#,intlefl,intright)
{Typetemp;
if(left<
right)
{Typepivot=medlian3(a,left,right);
inti=left,j=right-1;
for(;
)
{while(i<
j&
s[I]<
pivot)i++;
while(i<
pivot<
a[j]j--;
if(i<
j)
{temp=a[i];
a[j]=a[i];
a[i]=temp;
i++;
j--;
elsebreak;
if(s[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实现三者取中子程序median3(a,left,right);
(2)改写quicksoft算法,不用栈消去第二个递归调用quicksort(a,j+1,right);
(3)继续改写quicksort算法,用栈消去剩下的递归调用。
上海交通大学2001年数据结构及程序设计试题
注意:
程序设计请采用C语言,程序应有注解及说明。
回答问题简洁、清晰全面。
不得采用类C之类的语言写程序。
一、参见下图,该有向图是AOE网络。
该图上已标出了源点及汇点,并给出了活动(边)的权值。
请求出该AOE网络的关键路径,以及事件(结点)的最早发生时间及最迟发生时间。
(本题8分)
二、已知某二叉树的每个结点,要么其左、右子树皆为空,要么其左、右子树皆不空。
又知该二叉树的前序序列为(即先根次序):
J、F、D、B、A、C、E、H、X、I、K;
后序序列为(即后根次序):
A、C、B、E、D、X、I、H、F、K、Jo请给出该二叉树的中序序列(即中根次序),并画出相应的二叉树树形。
三、回答下列问题:
(本题10分)
1)具有N个结点且互不相似的二叉树的总数是多少?
2)具有N个结点且不同形态的树的总数是多少?
3)对二叉树而言,如果它的叶子结点总数为N0,度为2的结点的总为N2,则N0和N2之间的关系如何?
4)二叉树是否是结点的度最多为2的树?
请说明理由。
5)具有n片叶子的哈夫曼树(即赫夫曼树)中,结点总数为多少?
四、在外部分类时,为了减少读、写的次数,可以采用k路平衡归并的最佳归并树模式。
当初始归并段的总数不足时,可以增加长度为零的“虚段”。
请问增加的“虚段”的数目为多少?
请推导之。
设初始归并段的总数为m。
五、对平衡的排序二叉树进行删除结点的操作,必须保证删除之后平衡树中的每个结点的平衡因子是+1,-1,0三种情况之一,且该树仍然是排序二叉树。
现假定删除操作是在p结点的左子树上进行的,且该左子树原高为h-l,现变为h-2。
因此,必须从p的左子树沿着到根的方向回溯调整结点的平衡因子,并进行树形的调整。
设p是调整时遇到的第一个平衡因子力图由-1变成-2的最年轻的“前辈”结点。
我们知道,以p为根的子树经调整后,高度有可能减少1。
试用图形把调整前及调整后的相关结点的平衡因子、树形表示出来;
仅仅针对调整后子树的高度减少1的情况即可。
注意,罗列出所有可能的情况。
上图可供参考。
六、某算法由下述方程表示。
请求出该算法的时间复杂性的级别(以大O形式表示)。
注意n>
7求解问题的规模,设n是3的正整数幂。
七、如右图所示,该二叉树是某棵有序树变换
成的相对应的二叉树。
试给出原来的有序树的形状。
并回答以下问题:
1)原有序树是度为多少的树?
2)原有序树的叶子结点有哪几个?
3)是否所有的二叉树都可以找到相对应的有序树?
必须满足什么条件?
(本题5分)
八、在排序二叉树上进行查找操作时,设对树中的每个结点查找概率相同。
设由n个结点构成的序列生成的排序二叉树是“随机”的。
试求出在成功查找的情况下,平均查找长度是多少?
为了简单起见,最后得到的递推式可不予求解。
(本题8分)
九、设从键盘每次输入两个字符。
如A、B,则表示存在着一条由数据场之值为字符A的结点到数据场之值为字符B的结点的有向边。
依此输入这些
有向边,直至出现字符!
为止。
试设计一个程序,生成该有向图的邻接表及逆邻接表。
必须交待所用的结构、变量、加以适当注解。
(本题20分)·
十、设二叉树中结点的数据场之值为一字符。
采用二叉链表的方式存储该二叉树中的所有结点,设p为指向树根结点的指针。
设计一个程序在该二叉树中寻找数据场之值为key(key为一变量,变量内容为一字符)的那个结点的所有祖先。
设二叉树中结点数据场之值互不重复。
(本题15分)
注意:
有些书上将二叉树的二叉链表存储形式称之为标准存储形式。
南开大学2001年数据结构试题
一、选择题(每小题3分,共21分)
在下列各题中,每题之后均有若干个备选答案,请选出所有正确的答案,填人“”处。
答案请写在答题纸上。
1.任何一个无向连通图的最小生成树。
①只有一棵②有一棵或多棵
③一定有多棵④可能不存在
2.已知一棵非空二叉树的,则能够惟一确定这棵二叉树。
①先序遍历序列和后序遍历序列
②先序遍历序列和中序遍历序列
③先序遍历序列
④中序遍历序列,
3.使用指针实现二叉树时,如果结点的个数为n,则非空的指针域个数为。
①n-1②2n-1③n+1④2n+1
4.设队列存储于一个一维数组中,数组下标范围是1-n,头尾指针分别为f和r,f指向第一个元素的前一个位置,r指向队列中的最后一个元素,则队列中元素个数为。
①r-f②r-f+1③(r-f+1)modn④(r-f+n)modn
5.任意一个AOE网络的关键路径。
①一定有多条②只有一条③可能不只一条④可能不存在.
6.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上的是。
①插入排序②希尔排序③快速排序④堆排序
7.任意一个有向图的拓扑排序序列。
①一定有多种②只有一种③可能不存在④以上都不对
二、(7分)已知散列表地址空间为0-8,哈希函数为H(k)=kmod7,采用线性探测再散列法解决冲突。
将下面关键字数据依次填入该散列表中,同时将查找每个关键字所需的比较次数m填入下表中,并求等概率下的平均查找长度。
关键字值:
100,20,21,35,3,78,99,45
012345678
100
20
21
35
3
78
99
45
三、(12分)回答下列问题:
(1)(3分)什么叫基数排序?
(2)(3分)什么是AVL树中的平衡因子,它有什么特点?
(3)(6分)n个元素的序列{k1,k2,…kn}满足什么条件才能称之为堆?
简述对它进行堆排序的过程。
四、(10分)顺序给出以下关键字:
63、23、31、26、7、91、53、15、72、52、49、68,构造3阶B-树。
要求从空树开始,每插入一个关键字,画出一个树形。
五、(6分)设有向无环图G如下图所示:
试写出图G的六种不同的拓扑排序序列。
六、(10分)设二叉树以二叉链表表示,各结点的结构如下所示:
left
data
subsum
right
其中left、right分别为指向该结点左、右孩子的指针,data为存储关键字值的整数域,subsum中存储以该结点为根的子树中所有关键字值之和。
试使用C或C++语言设计算法,计算所给树T中所有结点的subsum值。
七、(12分)给出一个带表头的单链表L,L的每个结点中存放一个整数。
现给定一个阈值K,将L分成两个子表L1和L2,其中L1中存放L中所有关键字值大于等于是的结点,L2中存放L中所有关键字值小于K的结点。
试编程实现这个过程。
要求,使用C或C++语言实现算法,L1和L2仍占用L的存储空间。
八、(10分)设有一维整数数组A,试使用C或C++语言设计算法,将A中所有的奇数排在所有偶数之前。
要求,时间复杂度尽可能地少,结果仍放在A原来的存储空间。
九、(12分)简述哈夫曼编码的构造过程。
华东理工大学2001年数据结构与程序设计试题
一、单选题(10分)
1.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用——存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表
C.双链表D.仅有尾指针的单循环链表
2.若在线性表中采用折半查找法查找元素,该线性表应该。
A.元素按值有序B.采用顺序存储结构
C.元素按值有序,且采用顺序存储结构
D.元素按值有序,且采用链式存储结构
3.对于给定的结点序列abcdef,规定进栈只能从序列的左端开始。
通过栈的操作,能得到的序列为。
A.abcfedB.cabfedC.abcfdeD.cbafde
4.已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为。
A.-A+B*C/DEB.-A+B*CD/E
C.-+*ABC/DED.-+A*BC/DE
5.如果n1和n2是二叉树T中两个不同结点,n2为n1的后代,那么按遍历二叉树T时,结点n2一定比结点n1先被访问。
A.前序B.中序C.后序D.层次序
6.具有65个结点的完全二叉树其深度为。
(根的层次号为1)
A.8B.7C.6D.5
7.已知二叉树的前序遍历序列是abdgcefh,中序遍历序列是dgbaechf,它的后序遍历序列是。
A.bdgcefhaB.gdbecfhaC.bdgechfaD.gdbehfca
8.对于前序遍历和后序遍历结果相同的二叉树为。
A.一般二叉树
B.只有根结点的二叉树
C.根结点无左孩子的二叉树
D.根结点无右孩子的二叉树
9.对于前序遍历与中序遍历结果相同的二叉树为。
A.根结点无左孩子的二叉树
B.根结点无右孩子的二叉树
C.所有结点只有左子树的二叉树
D.所有结点只有右子树的二叉树
10.在有n个叶子的哈夫曼树中,其结点总数为。
A.不确定B.2nC.2n+1D.2n-1
二、是非题(10分)
1.顺序存储方式只能用于存储线性结构。
2.消除递归不一定需要使用栈。
3.将一棵树转换成相应的二叉树后,根结点没有右子树