《数据结构》期中试题有答案.docx
- 文档编号:9552818
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:80
- 大小:73.19KB
《数据结构》期中试题有答案.docx
《《数据结构》期中试题有答案.docx》由会员分享,可在线阅读,更多相关《《数据结构》期中试题有答案.docx(80页珍藏版)》请在冰豆网上搜索。
数据结构期中试题有答案数据结构期中试题有答案福建师范大学数学与计算机科学学院2009-2010学年度上学期08电信数据结构期中试题试卷类别:
闭卷考试时间:
90分钟专业:
学号:
姓名:
ZhengKen题号一二三四五六七八总分得分得分评卷人一、选择题(每小题1分,共6分)1、关于线性表的说法,下面选项正确的是(B)A线性表的特点是每个元素都有一个前驱和一个后继(除头、尾元素,直接的)B线性表是具有n(n=0)个元素的一个有限序列C线性表就是顺序存储的表(可以是链式存储结构)D线性表只能用顺序存储结构实现(可以是链式存储结构)2、表长为n的顺序存储的线性表,当在任何一个位置上插入或者删除一个元素的概率相等时,删除一个元素需要移动元素的平均个数为(A)A(n-1)/2Bn/2CnDn-13、设双向循环链表中节点的结构为(data,LLink,RLink),且不带头节点。
若想在指针p所指节点之后插入指针s所指节点,则应执行下列哪一个操作?
(D)Ap-RLink=s;s-LLink=p;p-RLink-LLink=s;s-RLink=p-RLink;Bp-RLink=s;p-RLink-LLink=s;s-LLink=p;s-RLink=p-RLink;Cs-LLink=p;s-RLink=p-RLink;p-RLink=s;p-RLink-LLink=s;Ds-LLink=p;s-RLink=p-RLink;p-RLink-LLink=s;p-RLink=s;4、栈和队列都是(A)A限制存取位置的线性结构(都是一种特殊的线性链表)B链式存储的非线性结构(可以顺序存储)C顺序存储的线性结构(可以链式存储)D限制存取位置的非线性结构(如:
树)5、单循环链表表示的队列长度为n,若只设头指针,则入队的时间复杂度为(A)AO(n)BO
(1)CO(n*n)DO(n*logn)在队尾入队,队头出队6、一棵含有n个节点的k叉树,可能达到的最小深度为多少?
(C)An-kBn-k+1C|logkn|+1D|logkn|其中|k|表示下取整得分评卷人三、简答(共22分)1、对于线性表的两种存储结构(顺序存储和链式存储结构),如果线性表基本稳定,并且很少进行插入和删除操作,但是要求以最快速度存取线性表中的元素,则应选择哪种存储结构?
试说明理由。
(5分)答:
选择顺序存储。
因为顺序存储可以通过下标随意访问线性表中的元素,效率较高。
而链式存储要访问某个元素是,需要遍历链表来找到这个元素,效率比较低。
选择顺序存储结构;理由有两点
(1)主要从插入删除操作在移动元素的个数上分析,
(2)顺序存储定位块,可直接定位。
2、哈夫曼树在构造时,首先进行初始化存储空间,结果如左下图,当构造完成后,请填写最后状态表,如右下图。
(6分)(见课本P148)weightParentLchildRchildweightParentLchildRchild123456789101112131415500029000700080001400023000300011000-000-000-000-000-000-000-00012345678910111213141559002914007100081000141200231300390011110081117151234191389291451042156115815212100013143、内存中一片连续空间(不妨假设地址从1到m)提供给两个栈s1和s2使用,怎样分配这部分存储空间,使得对任一栈,仅当这部分空间全满时才发生上溢。
如何判断栈满,栈空,并对两个栈的容量进行分析。
(7分)答:
把两个栈的栈底分别设定为空间的两头,也就是1,m。
其中一个栈从低地址向高地址增长,另外一个从高地址往低地址存放。
这样可以保证空间利用更好。
空、满、容量分析将s1,s2栈底分别设在连续内存空间的两端,栈顶向内存中间进发;注:
栈顶=0,或栈顶=m+1当|s1.top-s2.top|=1时,栈满;当一个栈顶为0,另一个栈顶为m+1时,栈空;容量分析:
从低地址向高地址增长时,容量为栈顶top的值;从高地址往低地址存放时,容量为m+1-(栈顶top的值)。
4、设某二叉树的前序遍历序列为:
ABCDEFGHI,中序遍历序列为:
BCAEDGHFI。
(1)试画出该二叉树;
(2)画出该二叉树后序线索化图。
(3)试画出该二叉树对应的森林。
(10分)
(1)(3)(四棵树)得分评卷人四、阅读算法(每小题5分,共25分)1.voidAE(Stack&S)InitStack(S);Push(S,3);Push(S,4);intx=Pop(S)+2*Pop(S);Push(S,x);inti,a5=1,5,8,12,15;for(i=0;i5;i+)Push(S,2*ai);while(!
StackEmpty(S)coutPop(S)left,c1,c2);c1+;if(BT-left=NULL&BT-right=NULL)c2+;ABC(BT-right,c1,c2);/if该函数执行的功能是什么?
答:
该函数的功能是统计,二叉树结点总数,和叶子结点总数。
c1为二叉树结点数,c2为二叉树中叶子结点数3.在下面的每个程序段中,假定线性表La的类型为List,e的类型为ElemType,元素类型ElemType为int,并假定每个程序段是连续执行的。
试写出每个程序段执行后所得到的线性表La。
(1)InitList(La);Inta=100,26,57,34,79;
(1)79345726100For(i=0;i5;i+)ListInsert(La,1,ai);/逆序;
(2)ListDelete(La,1,e);/e=79;
(2)34572610079ListInsert(La,ListLength(La)+1,e);/在最后一个位置插入e;(3)ClearList(La);For(i=0;i5;i+)(3)10026573479ListInsert(La,i+1,ai);/顺序;ListInsert(&L,i,e)/前插(入)初始条件:
线性表L已存在,1iListLength(L)+1。
操作结果:
在L中第i个位置之前插入新的数据元素e,L的长度加1。
ListDelete(&L,i,&e)/删除初始条件:
线性表L已存在且非空,1iListLength(L)。
操作结果:
删除L的第i个数据元素,并用e返回其值,L的长度减1。
ClearList(&L)/置空初始条件:
线性表L已存在。
操作结果:
将L重置为空表。
4.intPrime(intn)inti=1;intx=(int)sqrt(n);while(+ix)return1;/不能被2中的数整除,为素数;elsereturn0;/为合数;
(1)指出该算法的功能;
(2)该算法的时间复杂度是多少?
答:
(1)求素数(该算法的功能是判断n是否为素数,是返回1,否则返回0)
(2)O();一个数,如果只有1和它本身两个因数,这样的数叫做质数,又称素数。
例如(10以内)2,3,5,7是质数,而4,6,8,9则不是,后者称为合成数或合数。
特别声明一点,1既不是质数也不是合数。
为什么1不是质数呢?
因为如果把1也算作质数的话,那么在分解质因数时,就可以随便添上几个1了。
比如30,分解质因数是2*3*5,因为分解质因数是要把一个数写成质数的连乘积,如果把1算作质数的话,那么在这个算式中,就可以随便添上几个1了,分解质因数也就没法分解了。
从这个观点可将整数分为三种,一种叫质数,一种叫合成数,还有一个1。
(1不是质数,也不是合数)。
著名的高斯唯一分解定理说,任何一个整数。
可以写成一串质数相乘的积。
质数中除2是偶数外,其他都是奇数。
5.写出下述算法A的功能:
其中BiTree定义如下:
TypedefstructBiTNodeTElemTypedata;structBiTNode*LChild,*RChild;BiTNode,*BiTree;StatusA(BiTreeT)QueueQ;InitQueue(Q);ENQueue(Q,T);While(notQueueEmpty(Q)DeQueue(Q,e);If(e=NULL)break;ElsePrint(e.data);ENQueue(Q,e.LChild);ENQueue(Q.e.RChild);答:
层次遍历二叉树的非递归算法得分评卷人五、算法填空(每空1分,共9分)1堆分配存储方式下,串连接函数。
typedefstructchar*ch;intlen;HString;HString*s,t;StatusStrCat(s,t)/*将串t连接在串s的后面*/inti;char*temp;temp=(char*)malloc(s-len+t.len);if(temp=NULL)return(0);for(i=0;ilen;i+)tempi=s-chi;for(i=s-len;ilen+t.len;i+)tempii-s-len;s-len+=t.len;free(s-ch);s-ch=temp;return
(1);2向单链表的末尾添加一个元素的算法。
LNode是一个包含(data,Next)的结构体VoidInsertRear(LNode*&HL,constElemType&item)LNode*newptr;newptr=newLNode;If(_newptr=NULL_)cerrMemoryallocationfailare!
data=item;_newptr-next=NULL;if(HL=NULL)HL=_newptr_;elseLNode*P=HL;While(P-next!
=NULL)_p=p-next_;p-next=newptr;得分评卷人六、编写算法(每小题10分,共20分)1编写算法,将一单链表逆转。
要求逆转在原链表上进行,不允许重新构造一个链表(可以申明临时变量、指针)。
该链表带头节点、头节点和数据节点的结构定义如下typedefstructLNodeElemTypedata;StructLNode*next;*List,LNode;函数定义:
voidinvert(List&L)voidinvert(List&L)/链表的就地逆置;带头结点的单链表;p=L-next;q=p-next;s=q-next;p-next=NULL;while(s!
=NULL)q-next=p;p=q;/p为新表表头结点;q=s;s=s-next;/把L的元素逐个插入新表表头q-next=p;L-next=q;/将头结点指向最后一个结点。
/invert本算法的思想:
逐个地把L的当前元素q插入新的链表头部,将元素指针反向。
2编写算法计算给定二叉树中叶结点的个数。
其中树节点定义如下typedefstructBiTNodeDataTypedata;StructBiTNode*LChild,*RChild;BiTNode,*BiTree;函数定义:
CountLeaf(BiTreeT,int&LeafNum)voidCountLeaf(BiTreeT,int&LeafNum)if(T)if(!
T-lchild)&(!
T-rchild)LeafNum+;/对叶子结点计数CountLeaf(T-lchild,LeafNum);/求左子树叶子数CountLeaf(T-rchild,LeafNum);/求右子树叶子数/CountLeaf算法的基本思想:
先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。
由此,需在遍历算法中增添一个“计数”的参数,并将算法中“访问结点”的操作改为:
若是叶子,则计数器增1。
得分评卷人七、计算(每小题4分,共12分)1、对比f(n)和g(n),当n接近无穷时,哪个函数增长更快。
Af(n)=(ln(n!
)+5)2g(n)=13ng(n)增长速度快Bf(n)=2(n*n*n)+(2n)2g(n)=n(n*n)+n5F(n)增长速度快2、具有n个节点的满二叉树的叶子节点的个数是多少?
解:
法一:
设叶子结点数为n0,非叶子结点数为n1;2n1+1=n2n1+1=n0+n1则可得n0=n1+1n=n0+n0-1所以叶子结点个数为(n+1)/2.法二:
设该满二叉树高度为h,则总的节点个数为N=1+2+4+2h-1=2*2h-1-1由于满二叉树中叶子节点集中在最底层,所以该满二叉树叶子个数为2h-1=(n+1)/2。
3、试写出递归函数F(n)的递归算法,并画出F(4)时的调用过程。
IntF(intn)If(n=0)Returnn+1;elsereturnn*F(n/2);记:
F(1/2)=F(0)=0+1;一、判断题:
1、线性表的逻辑顺序与物理顺序总是一致的。
()2、线性表的顺序存储表示优于链式存储表示。
()3、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。
()4、二维数组是其数组元素为线性表的线性表。
()5、每种数据结构都应具备三种基本运算:
插入、删除和搜索。
()6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个方面。
()7、线性表中的每个结点最多只有一个前驱和一个后继。
()8、线性的数据结构可以顺序存储,也可以链接存储。
非线性的数据结构只能链接存储。
()9、栈和队列逻辑上都是线性表。
()10、单链表从任何一个结点出发,都能访问到所有结点()11、删除二叉排序树中一个结点,再重新插入上去,一定能得到原来的二叉排序树。
()12、快速排序是排序算法中最快的一种。
()13、多维数组是向量的推广。
()14、一般树和二叉树的结点数目都可以为0。
()15、直接选择排序是一种不稳定的排序方法。
()16、98、对一个堆按层次遍历,不一定能得到一个有序序列。
()17、在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
()18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。
()19、堆栈在数据中的存储原则是先进先出。
()20、队列在数据中的存储原则是后进先出。
()21、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。
()22、哈夫曼树一定是满二叉树。
()23、程序是用计算机语言表述的算法。
()24、线性表的顺序存储结构是通过数据元素的存储地址直接反映数据元素的逻辑关系。
()25、用一组地址连续的存储单元存放的元素一定构成线性表。
()26、堆栈、队列和数组的逻辑结构都是线性表结构。
()27、给定一组权值,可以唯一构造出一棵哈夫曼树。
()28、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。
()29、希尔排序在较率上较直接接入排序有较大的改进。
但是不稳定的。
()30、在平均情况下,快速排序法最快,堆积排序法最节省空间。
()31、快速排序法是一种稳定性排序法。
()32、算法一定要有输入和输出。
()33、算法分析的目的旨在分析算法的效率以求改进算法。
()34、非空线性表中任意一个数据元素都有且仅有一个直接后继元素。
()35、数据的存储结构不仅有顺序存储结构和链式存储结构,还有索引结构与散列结构。
()36、若频繁地对线性表进行插入和删除操作,该线性表采用顺序存储结构更合适。
()37、若线性表采用顺序存储结构,每个数据元素占用4个存储单元,第12个数据元素的存储地址为144,则第1个数据元素的存储地址是101。
()38、若长度为n的线性表采用顺序存储结构,删除表的第i个元素之前需要移动表中n-i+1个元素。
()39、符号p-next出现在表达式中表示p所指的那个结点的内容。
()40、要将指针p移到它所指的结点的下一个结点是执行语句pp-next。
()41、若某堆栈的输入序列为1,2,3,4,则4,3,1,2不可能是堆栈的输出序列之一。
()42、线性链表中各个链结点之间的地址不一定要连续。
()43、程序就是算法,但算法不一定是程序。
()44、线性表只能采用顺序存储结构或者链式存储结构。
()45、线性表的链式存储结构是通过指针来间接反映数据元素之间逻辑关系的。
()46、除插入和删除操作外,数组的主要操作还有存取、修改、检索和排序等。
()47、稀疏矩阵中0元素的分布有规律,因此可以采用三元组方法进行压缩存储。
()48、不管堆栈采用何种存储结构,只要堆栈不空,可以任意删除一个元素。
()49、确定串在串中首次出现的位置的操作称为串的模式匹配。
()50、深度为h的非空二叉树的第i层最多有2i-1个结点。
()51、满二叉树也是完全二叉树。
()52、已知一棵二叉树的前序序列和后序序列可以唯一地构造出该二叉树。
()53、非空二叉排序树的任意一棵子树也是二叉排序树。
()54、对一棵二叉排序树进行前序遍历一定可以得到一个按值有序的序列。
()55、一个广义表的深度是指该广义表展开后所含括号的层数。
()56、散列表的查找效率主要取决于所选择的散列函数与处理冲突的方法。
()57、序列初始为逆序时,冒泡排序法所进行的元素之间的比较次数最多。
()58、已知指针P指向键表L中的某结点,执行语句P=P-next不会删除该链表中的结点。
()59、在链队列中,即使不设置尾指针也能进行入队操作。
()60、如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。
()61、设与一棵树T所对应的二叉树为BT,则与T中的叶子结点所对应的BT中的结点也一定是叶子结点。
()62、若图G的最小生成树不唯一,则G的边数一定多于n-1,并且权值最小的边有多条(其中n为G的顶点数)。
()63、给出不同的输入序列建造二叉排序树,一定得到不同的二叉排序树。
()64、由于希尔排序的最后一趟与直接插入排序过程相同,因此前者一定比后者花费的时间多。
()65、程序越短,程序运行的时间就越少。
()66、采用循环链表作为存储结构的队列就是循环队列。
()67、堆栈是一种插入和删除操作在表的一端进行的线性表。
()68、一个任意串是其自身的子串。
()69、哈夫曼树一定是完全二叉树。
()70、带权连通图中某一顶点到图中另一定点的最短路径不一定唯一。
()71、折半查找方法可以用于按值有序的线性链表的查找。
()72、稀疏矩阵压缩存储后,必会失效掉随机存取功能。
()73、由一棵二叉树的前序序列和后序序列可以唯一确定它。
()74、在n个结点的元向图中,若边数在于n-1,则该图必是连通图。
()75、在完全二叉树中,若某结点元左孩子,则它必是叶结点。
()76、若一个有向图的邻接矩阵中,对角线以下元素均为0,则该图的拓扑有序序列必定存在。
()77、树的带权路径长度最小的二叉树中必定没有度为1的结点。
()78、二叉树可以用0度2的有序树来表示。
()79、一组权值,可以唯一构造出一棵哈夫曼树。
()80、101,88,46,70,34,39,45,58,66,10)是堆;()81、将一棵树转换成二叉树后,根结点没有左子树;()82、用树的前序遍历和中序遍历可以导出树的后序遍历;()83、在非空线性链表中由p所指的结点后面插入一个由q所指的结点的过程是依次执行语句:
q-next=p-next;p-next=q。
()84、非空双向循环链表中由q所指的结点后面插入一个由p指的结点的动作依次为:
p-prior=q,p-next=q-next,q-next=p,q-prior-nextp。
()85、删除非空链式存储结构的堆栈(设栈顶指针为top)的一个元素的过程是依次执行:
p=top,top=p-next,free(p)。
()86、哈希的查找无需进行关键字的比较。
()87、一个好的哈希函数应使函数值均匀的分布在存储空间的有效地址范围内,以尽可能减少冲突。
()88、排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。
()89、队列是一种可以在表头和表尾都能进行插入和删除操作的线性表。
()90、在索引顺序表上实现分块查找,在等概率查找情况下,其平均查找长度不与表的个数有关,而与每一块中的元素个数有关。
()91、对于有向图,顶点的度分为入度和出度,入度是以该顶点为终点的入边数目;出度是以该顶点为起点的出边数目,该顶点的度等于其入度和出度之和。
()92、无向图的邻接矩阵是对称的有向图的邻接矩阵是不对称的。
()93、具有n个顶点的连通图的生成树具有n-1条边()二、填空题:
1、数据结构课程讨论的主要内容是数据的逻辑结构、存储结构和_。
2、数据结构算法中,通常用时间复杂度和_两种方法衡量其效率。
3、一个算法一该具有_,_,_,_和_这五种特性。
4、若频繁地对线性表进行插入与删除操作,该线性表应采用_存储结构。
5、在非空线性表中除第一个元素外,集合中每个数据元素只有一个_;除最后一个元素之外,集合中每个数据元素均只有一个_。
6、线性表中的每个结点最多有_前驱和_后继。
7、_链表从任何一个结点出发,都能访问到所有结点。
8、链式存储结构中的结点包含_域,_域。
9、在双向链表中,每个结点含有两个指针域,一个指向_结点,另一个指向_结点。
10、某带头结点的单链表的头指针head,判定该单链表非空的条件_。
11、在双向链表中,每个结点含有两个指针域,一个指向_结点,另一个指向_结点。
12、已知指针p指向单链表中某个结点,则语句p-next=p-next-next的作用_删除p的后继结点_。
13、已知在结点个数大于1的单链表中,指针p指向某个结点,则下列程序段结束时,指针q指向*p的_结点。
q=p;while(q-next!
=p)q=q-next;14、若要在单链表结点*P后插入一结点*S,执行的语句_。
15、线性表的链式存储结构地址空间可以_,而向量存储必须是地址空间_。
16、栈结构允许进行删除操作的一端为_。
17、在栈的顺序实现中,栈顶指针top,栈为空条件_。
18、对于单链表形式的队列,其空队列的F指针和R指针都等于_。
19、若数组s0.n-1为两个栈s1和s2的共用存储空间,仅当s0.n-1全满时,各栈才不能进行栈操作,则为这两个栈分配空间的最佳方案是:
s1和s2的栈顶指针的初值分别为_。
20、允许在线性表的一端插入,另一端进行删除操作的线性表称为_。
插入的一端为_,删除的一端为_。
21、设数组Am为循环队列Q的存储空间,font为头指针,rear为尾指针,判定Q为空队列的条件_。
22、对于顺序存储的队列,存储空间大小为n,头指针为F,尾指针为R。
若在逻辑上看一个环,则队列中元素的个数为_。
23、已知循环队列的存储空间为数组data21,且头指针和尾指针分别为8和3,则该队列的当前长度_。
24、一个串的任意个连续的字符组成的子序列称为该串的_,包含该子串的串称为_。
25、求串T在主串S中首次出现的位置的操作是_。
26、在初始为空的队列中插入元素A,B,C,D以后,紧接着作了两次删除操作,此时的队尾元素是_。
27、在长度为n的循环队列中,删除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 期中 试题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)