数据结构与算法试卷
㈠ 数据结构与算法试题,高分,求答案啊
给你第一题解法吧:后面的实在是不想做。
先根:ABCDEFGHI
中根:CBEDAGFHI
遍历的基本方法:先左子树后右子树。
1,先根遍历可以确定根节点为A,
2,依据1步,可以在中根遍历中确定左子树为:CBED,右为:GFHI
3,在可以重复1,2步。就可以得到结果。
A
BF
CDGH
I
4,O(n^3)+O(1)
㈡ 资料结构试题求正确答案
资料结构试题求正确答案
1.内部排序和外部排序
2.邻接表和十字连结串行
3.线性表,树,图
4.63
5.θ(n),θ(lg n),θ(n lg n)
6.直接寻址法晌运,随机法
7.连结串行
8.根节点0,叶节点悉碧4,9,10,7,8,最大度的是0,节点0的后代是1,2,3
9.空的条件栈顶位置是m-1.满的条件是栈顶位置是-1
10,资料结构和抽象资料型别关系:a.“资料结构”定义为一个二元组(D,S),即两个集合,D是资料元素的集合,S是资料元素之间一个或多个关系的集合。
b.“抽象资料型别”本质是“资料型别”,与计算机相关,涉及资料的储存及如何用储存来反应资料元素之间的关系。它定义为一个三元组(D,S,P),加上的P是定义的一组针对储存的资料操作(如插入,删除,排序等)。
c.总之“抽象资料型别”是“物理”概念,“资料结构”是“逻辑”概念。“抽象资料型别”来实现“资料结构”。
以上回答你满意么?
求此资料结构试题正确答案
1.内部排序和外部排序
2.邻接表和十字连结串行
3.线性表,树,图
4.63
5.θ(n),θ(lg n),θ(n lg n)
6.直接寻址法,随机法
7.连结串行
8.根节点0,叶节点4,9,10,7,8,最大度的是0,节点0的后代是1,2,3
9.空的条件栈顶位置是m-1.满的条件是栈顶位置是-1
10,资料结构和抽象资料型别关系:a.“资料结构”定义为一个二元组(D,S),即两个集合,D是资料元素的集合,S是资料元素之间一个或多个关系的集合。
b.“抽象资料型别”本质是“资料型别”,与计算机相关,涉及资料的储存及如何用储存来反应资料元素之间的关系。它定义为一个三元组(D,S,P),加上的P是定义的一组针对储存的资料操作(如插入,删除,排序等)。
c.总之“抽象资料型别”是“物理”概念,“资料结构”是“逻辑”概念。“抽象资料型别”来实现“资料结构”。
希望对你能有所帮助。
寻一份《资料结构》试题及答案
《资料结构》试题一、选择题(每小题2分,共30分)1. 若某线性表中最常用的操作是取第i 个元素和找第i个元素的前趋元素,则采用( )储存方式最节省时间。A、单链表 B、双链表 C、单向回圈 D、顺序表2. 串是任意有限个( )A、符号构成的序列 B、符号构成的集合C、字符构成的序列 D、字符构成的集合3. 设矩阵A(aij ,l≤i,j≤ 10)的元素满足:aij≠0(i≥j, l≤i, j≤ 10)aij=0 (i<j, l≤i, j≤ 10)现将A的所有非0元素以行序为主序存放在首地址为2000的储存区域中,每个元素占有4个单元,则元素A[9][5]的首址为A、2340 B、2336 C、2164 D、睁谨举21604. 如果以连结串行作为栈的储存结构,则退栈操作时( )A、 必须判别栈是否满 B、 对栈不作任何判别C、 必须判别栈是否空 D、 判别栈元素的型别5. 设阵列Data[0..m]作为回圈伫列SQ的储存空间,front为队头指标,rear为队尾指标,则执行出队操作的语句为( )A、front=front+1 B、front=(front+1)% mC、rear=(rear+1)%m D、front=(front+1)%(m+1)6. 深度为6(根的层次为1)的二叉树至多有( )结点。A、 64 B、32 C、31 D、637. 将含100个结点的完全二叉树从根这一层开始,每层上从左到右依次对结点编号,根结点的编号为1。编号为49的结点X的双亲编号为( )A、24 B、25 C、23 D、无法确定8. 设有一个无向图G=(V,E)和G’=(V’,E’)如果G’为G的生成树,则下面不正确的说法是( )A、G’为G 的子图 B、G’为G 的边通分量C、G’为G的极小连通子图且V’=V D、G’为G的一个无环子图9. 用线性探测法查询闭散列表,可能要探测多个杂凑地址,这些位置上的键值( )A、 一定都是同义词 B、一定都不是同义词 C、都相同 D、不一定都是同义词10. 二分查询要求被查询的表是( )A、 键值有序的连结表 B、连结表但键值不一定有序C、 键值有序的顺序表 D、顺序表但键值不一定有序11. 当初始序列已经按键值有序,用直接插入算法对其进行排序,需要回圈的次数为( )A、n2 B、nlog2n C、log2n D、n-1 12. 堆是一个键值序列{k1,k2,…, kn},对i=1,2,…,|_n/2_|,满足( )A、ki≤k2i≤k2i+1 B、ki<k2i+1<k2iC、ki≤k2i且ki≤k2i+1(2i+1≤n) D、ki≤k2i 或ki≤k2i+1(2i+1≤n) 13.一个具有n个顶点的无向完全图的边数为( )A、n(n+1)/2 B、n(n-1)/2 C、n(n-1) D、n(n+1)14.在索引顺序表中查询一个元素,可用的且最快的方法是( )A、用顺序查询法确定元素所在块,再用顺序查询法在相应块中查询B、用顺序查询法确定元素所在块,再用二分查询法在相应块中查询C、用二分查询法确定元素所在块,再用顺序查询法在相应块中查询D、用二分查询法确定元素所在块,再用二分查询法在相应块中查询15.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )储存方式最节省运算时间。A、 单链表 B、双链表C、带头结点的双回圈连结串行D、容量足够大的顺序表 二、判断题(每小题1分,共10分)1.双链表中至多只有一个结点的后继指标为空。( )2.在回圈伫列中,front指向伫列中第一个元素的前一位置,rear指向实际的队尾元素,伫列为满的条件是front=rear。( )3.对连结串行进行插入和删除操作时,不必移动结点。( )4.栈可以作为实现程式设计语言过程呼叫时的一种资料结构。( )5.在一个有向图的拓朴序列中,若顶点a在顶点b之前,则图中必有一条弧<a,b>。( )i6.对有向图G,如果从任一顶点出发进行一次深度优先或广度优先搜寻就能访问每个顶点,则该图一定是完全图。( )7.“顺序查询法”是指在顺序表上进行查询的方法。( )8.向二叉排序树插入一个新结点时,新结点一定成为二叉排序树的一个叶子结点。()9.键值序列{A,C,D,E,F,E,F}是一个堆。10.二路归并时,被归并的两个子序列中的关键字个数一定要相等。() 三、填空题(每小题2分,共20分)1.在带有头结点的单链表L中,若要删除第一个结点,则需执行下列三条语句:________;L->next=U->next;free(U);2.有一个长度为20的有序表采用二分查询方法进行查询,共有______个元素的查询长度为3。3.采用气泡排序对有n个记录的表A按键值递增排序,若L的初始状态是按键值递增,则排序过程中记录的比较次数为_____。若A的初始状态为递减排列,则记录的交换次数为_______。4.在无头结点的双链表中,指标P所指结点是第一个结点的条件是______。5.G为无向图,如果从G的某个顶点出发,进行一次广度优先搜寻,即可访问图的每个顶点,则该图一定是_____图。6.如果一个有向图中没有______,则该图的全部顶点可能排成一个拓扑序列。7.深度为8(根的层次号为1)的满二叉树有______个叶子结点。 8.将一棵有100个结点的完全二叉树按层编号,则编号为49的结点X,其双亲PARENT(X)的编号为_______。9.设某闭散列表HT未满,杂凑函式H(KEY)为键值第一字母在字母表中的序号,处理冲突方法为线性探测法,请在下列算法划线处填上适当内容,以实现按键值第一字母的顺序输出闭散列表中所有键值的算法。void prinord(keytype HT[m]) { for(i=1;i<=26;i++) { j=i; while(____________________) { if (____________________) printf(“datatype”,HT[j]); j=(j+1)% m; } } }10.设有一个链队,结点结构为data|next,front为队头指标,rear为队尾指标,当执行入队操作时需执行下列语句:malloc(p);p->data=x; p->next=NULL;________________;________________; 四、简答题:(每小题4分,共20分)1. 对于一个有10000个结点的二叉树,树叶最多有多少个?最少有多少个?2. 已知一棵二叉树的中序序列和后序序列分别为: DBGEACHF和DGEBHFCA,则该二叉树的前序序列是什么?3. 设有1000个无序的元素,需排出前10个最大(小)的元素,你认为采用哪种排序方法最快?为什么?4. 在KMP算法中,已知模式串为ADABCADADA ,请写出模式串的next[j]函式值。5. 中序遍历的递回算法平均空间复杂度为多少? 五、 算法设计题(每小题10分,共20分)1. 试编写一个算法,判断一给定的整型阵列a[n]是不是一个堆。2. 一棵二叉树的繁茂度定义为各层结点数的最大值与树的高度的乘积。试写一高效算法,求二叉树的繁茂度。参考答案一、选择题1、D 2、C 3、D 4、C 5、D 6、D 7、A 8、B 9、D 10、C 11、D 12、C 13、B14、C15、D二、判断题 1. √ 2. × 3. √ 4. √ 5. × 6. × 7. × 8. √ 9. √ 10. × 三、填空题1.U=L - > next2.4。3.n-1、n(n-1)/2。4.p - > prior = NULL。5.连通6.回路或环7.28-1 = 27 = 1288.249.HT[j]!=NULL或HT[j]不为空、H(HT[j])=I10.rear - > next = p、rear = p四、简答题:1. 答: 最多是完全二叉树的形态,即5000个叶子;最少是单支树的形态,即1个叶子。2.答:是:ABDEGCFH3. 答:用锦标赛排序或堆排序很合适,因为不必等全部元素排完就能得到所需结果,时间效率为O(nlog2n); 即O(1000log21000)=O(10000) 锦标赛排序的准确比较次数为:n-1+9log2n=999+9log21000=999+9×10=1089堆排序的准确比较次数为:n-1+9log2n=999+9log21000=999+9×10=1089若用气泡排序也较快,最多耗费比较次数为(n-1+n-2+……+n-10)=10n-55=10000-55=9945(次)4. 答: 01121123435. 答: 要考虑递回时占用了栈空间,但递回次数最多不超过树的高度,所以空间复杂度为O(log2n) 五、 算法设计题1.解:提示:堆的定义是:ki<k2i和K2i+1 void SortA(sqlist &A, int n) { if(n==0) return(0); 空表if (a[1]<a[2]) { for( i=1; i<=n/2; i++) if (a[i]>a[2*i]|| a[i]>a[2*i+1])return(-1);return(minleap)};else { for( i=1; i<=n/2; i++) if (a[i]<a[2*i]|| a[i]<a[2*i+1])return(-1);return(“maxleap”)};}2. 要用层次遍历以及伫列来处理,可以增设一个宽度计数器,在统计完每一层的结点个数之后,再从计数器中挑出最大值。typedef struct { BTNode node; int layer; layer是结点所在层数 } BTNRecord, r ; int Width(Bitree T ){ 求树宽 int count[ ]; 增开count向量,存放各层对应的结点数 InitQueue(Q); 伫列初始化,Q的元素为BTNRecord型别 EnQueue(Q,{T, 0}); 根结点入队, 0 表示count[0],下标值 while(!QueueEmpty(Q)) { DeQueue(Q, r); 结点出队 count[r.layer]++; 出队时再把结点对应层的计数器加if(r.node->lchild) EnQueue(Q,{r.node->lchild, r.layer+1}); if(r.node->rchild) EnQueue(Q,{r.node->rchild, r.layer+1}); } 按层序入队时要随时标注结点所在层号 h=r.layer; 最后一个伫列元素所在层就是树的高度 for(maxn=count[0], i=1; h; i++) if(count[i]>maxn) maxn=count[i]; 求出哪一层结点数最多 return (h*maxn)} Width
谁有资料结构期末试题及答案?
我有资料结构那本书的答案,不知道你需不需要,需要的话发讯息联络。
结构中有个网壳结构··求正确答案
嗨,你好!
网壳是网架的曲面表现形式。网壳结构又包括单层网壳结构、预应力网壳结构、板锥网壳结构、肋环型索承网壳结构、单层叉筒网壳结构等。
( l )强度、刚度分析
网壳结构的内力和位移可按弹性阶段进行计算。网壳结构根据网壳型别、节点构造,设计阶段可分别选用不同的方法进行内力、位移计算:
l )双层网壳宜采用空间杆系有限元法进行计算;
2 )单层网壳宜采用空间梁系有限元法进行计算;
3 )对单、双层网壳在进行方案选择和初步设计时可采用拟壳分析法进行估算。
网壳结构的外荷载可按静力等效的原则将节点所辖区域内的荷载集中作用在该节点上。分析双层网壳时可假定节点为铰接,杆件只承受轴向力;分析单层网壳时假定节点为刚接,杆件除承受轴向力外,还承受弯矩、剪力等。当杆件上作用有区域性荷载时,必须另行考虑区域性弯曲内力的影响。对于单个球面网壳、圆柱面网壳和双曲抛物面网壳的风载体型系数,可按《建筑结构荷载规范》(GB 50009 一2001 ) 取值;对于多个连线的球面网壳、圆柱面网壳和双曲抛物面网壳,以及各种复杂体形的网壳结构,应根据模型风洞试验确定风载体型系数。
( 2 )稳定性分析
网壳的稳定性可按考虑几何非线性的有限元分析方法(荷载认一位移全过程分析)进行计算,分析中可假定材料保持为线弹性。用非线性理论分析网壳稳定性时,一般采用空间杆系非线性有限元法,关键是临界荷载的确定。单层网壳宜采用空间梁系有限元法进行计算。
球面网壳的全过程分析可按满跨均布荷载进行,圆柱面网壳和椭圆抛物面网壳宜补充考虑半跨活荷载分布。进行网壳全过程分析时应考虑初始曲面形状的安装偏差影响;可采用结构的最低屈曲模态作为初始缺陷分布模态,其最大计算值可按网壳跨度的1 /300 取值。
进行网壳结构全过程分析求得的第一个临界点处的荷载值,可作为该网壳的极限承载力。将极限承载力除以系数K 后,即为按网壳稳定性确定的容许承载力(标准值)。
( 3 )抗震分析
在设防烈度为7 度的地区,网壳结构可不进行竖向抗震计算,但必须进行水平抗震计算。在设防烈度为8 度、9 度地区必须进行网壳结构水平与竖向抗震计算。
摘录 网络
求网计(专升本)《资料结构》试题(模A) 2004-5-1答案
可以考试的,报班意义不大。把重要的知识点整理一下,准备好笔记本和错题集,错题集用来记录自己做错的题,笔记本记录一些容易忽略细节和重点。 做题不一定要做难题,基础是根本,每次考试不要着重在一个题目上,要放宽心态,不要急,总之,要自信,相信自己一定可
资料结构(C#语言版)笔试试题与答案
《资料结构》期末考试试卷( A )
一、 选择题(每小题2分,共24分)
1.计算机识别、储存和加工处理的物件被统称为( A )
A.资料 B.资料元素
C.资料结构 D.资料型别
2.栈和伫列都是( A )
A.限制存取位置的线性结构 B.顺序储存的线性结构
C.链式储存的线性结构 D.限制存取位置的非线性结构
3.链栈与顺序栈相比,比较明显的优点是( D )
A.插入操作更加方便 B.删除操作更加方便
C.不会出现下溢的情况 D.不会出现上溢的情况
4.采用两类不同储存结构的字串可分别简称为( B )
A.主串和子串 B.顺序串和链串
C.目标串和模式串 D.变数串和常量串
5. 一个向量第一个元素的储存地址是100,每个元素的长度为2,则第5个元素的地址是:B
A. 110 B .108
C. 100 D. 120
6.串是一种特殊的线性表,其特殊性体现在:B
A.可以顺序储存 B .资料元素是一个字符
C. 可以连结储存 D. 资料元素可以是多个字符
7.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为: C
A. 2h B .2h-1
C. 2h+1 D. h+1
软体开发网 mscto.
8.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把 由树转化得到的二叉树叫做这棵树对应的二叉树。下列结论哪个正确? A
A. 树的先根遍历序列与其对应的二叉树的先序遍历序列相同
B .树的后根遍历序列与其对应的二叉树的后序遍历序列相同
C. 树的先根遍历序列与其对应的二叉树的中序遍历序列相同
D. 以上都不对
9.一个有n个顶点的无向图最多有多少边?C
A. n B .n(n-1)
C. n(n-1)/2 D. 2n
10.在一个图中,所有顶点的度数之和等于所有边数的多少倍?C
A. 1/2 B .1
C. 2 D. 4
11.当在二叉排序树中插入一个新结点时,若树中不存在与待插入结点的关键字相同的结点,且新结点的关键字小于根结点的关键字,则新结点将成为( A )
A.左子树的叶子结点 B.左子树的分支结点
C.右子树的叶子结点 D.右子树的分支结点
软体开发网 mscto.
12.对于杂凑函式H(key)=key%13,被称为同义词的关键字是( D )
A.35和41 B.23和39
C.15和44 D.25和51
二、已知某棵二叉树的前序遍历结果为A,B,D,E,G,C,F,H,I,J,其中中序遍历的结果为D,B,G,E,A,H,F,I,J,C。请画出二叉的具体结构。(注意要写出具体步骤)(10分)
原理见课本128页
三、有图如下,请写出从顶点c0出发的深度优先及宽度优先遍历的结果。(10分)
深度优先;C0-C1-C3-C4-C5-C2
宽度优先:C0-C1-C2-C3-C4-C5
四、有图如下,按Kruskal算法求出其最小生成树。要求写出完整的步骤。(10分)
原理见课本250页
五、给定线性表(12,23,45,66,76,88,93,103,166),试写出在其上进行二分查询关键字值12,93,166的过程。并写出二分查询的算法。(20分)
0 1 2 3 4 5 6 7 8
12 23 45 66 76 88 93 103 166
过程:
mid=(0+8)/2=4
high=3,low=0 mid=1
high=0,low=0 mid=0(找到12)
high=8,low=5,mid=6(找到93)
high=8,low=7,mid=7
high=8 low=8 mid=8
算法:见课本84页上
六、知单链表的结点结构为
Data next
下列算法对带头结点的单链表L进行简单选择排序,使得L中的元素按值从小到大排列。
请在空缺处填入合适的内容,使其成为完整的算法。 (可用文字说明该算法的基本思想及执行的过程,10分)
void SelectSort(LinkedList L)
{
LinkedList p,q,min;
DataType rcd;
p= (1) ;
while(p!=NULL) {
min=p;
q=p->next;
while(q!=NULL){
if( (2) )min=q;
q=q->next;
}
if( (3) ){
rcd=p->data;
p->data=min->data;
min->data=rcd;
}
(4) ;
}
}
本题不会。嘿嘿。。。。
七、一个完整的算法应该具有哪几个基本性质?分别简要说明每一性质的含意。(5分)
输入:
四个基本性质:1.输入:有零个或多个有外部提供的量作为算法的输入
2:输出:算法产生至少一个量作为输出
3.:确定性:组成算法的每条指令是清晰的,无歧异的。
4.:有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的
八、何谓伫列的"假溢"现象?如何解决?(5分)
伫列的假溢现象是指阵列实现的顺序伫列中,队尾指标已到达阵列的下表上界产生上溢而队头指标之前还有若干 空间闲置的现象。解决的办法之一是利用回圈伫列技术使阵列空间的首尾相连。
九、说明并比较档案的各种物理结构。(6分)
资料结构习题!跪求答案
#include <stdio.h>
#include <stdlib.h>
typedef struct lnode
{ int data;
struct lnode *next;
}lnode,*linklist;
linklist listinsert_l(linklist l,int i,int e)
{
linklist p,s;
int j;
p=l;
j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
exit(0);
s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
l=l->next;
printf("插入后的连结串行为:
");
while(l)
{
printf("%d ",l->data);
l=l->next;
}
return 0;
}
int listdelete_l(linklist l,int i,int b)
{
linklist p,q;
int j;
p=l;
j=0;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1)
exit(0);
q=p->next;
p->next=q->next;
b=q->data;
free(q);
l=l->next;
printf("删除后的连结串行为:
");
while(l)
{
printf("%d ",l->data);
l=l->next;
}
return b;
}
void main()
{
linklist l,p;
int n,i,e,j,a,b;
printf("输入结点的个数:
");
scanf("%d",&n);
l=(linklist)malloc(sizeof(lnode));
l->next=NULL;
printf("输入连结串行的资料:
");
for(i=n;i>0;--i)
{
scanf("%d",&a);
p=(linklist)malloc(sizeof(lnode));
p->data=a;
p->next=l->next;
l->next=p;
}
printf("输入要插入的位置和数:
");
scanf("%d%d",&j,&e);
listinsert_l(l,j,e);
printf("
输入要删除的位置:
");
scanf("%d",&i);
b=listdelete_l(l,i,b);
printf("
删除的数为:%d
",b);
}
这个资料结构选择题目选哪个答案正确?
D,连结串行的话
求资料结构习题集答案
资料下载网址:大学空间站(网络不让回答有网址的贴,所以没法给准确的资料地址)
下载方法:网络搜索下“大学空间站”,开启该网,注册大学空间站会员,下载。、、、、、、、、
㈢ 谁有数据结构的期末试题,借我参考下马上考试了
A:
06-07第一学期期末考试试卷
试卷代码:03266A 授课课时:112
课程名称:数据结构与算法 适用对象:本科
一、单项选择题(从下列各题四个备选答案中选出一个正确答案,并将其代号写在答题纸相应位置处。答案错选或未选者,该题不得分。每小题2分,共24分。)
1.数据结构被形式地定义为(K,R),其中K是数据元素的有限集,R是K上的___有限集。
A.操作 B.映像 C.存储 D.关系
2.线性表若采用链式存储结构时,要求内存中可用存储单元的地址____。
A.必须连续的 B.部分地址必须连续的 C.一定是不续的 D.连续不连续都可以
3.一个栈的入栈序列是a、b、c、d、e,则栈的不可能输出序列是____。
A.edcba B.decba C.dceab D.abcde
4.一个队列的入队序列是1、2、3、4,则队列输出序列是____。
A.4、3、2、1 B.1、2、3、4 C.1、4、3、2 D.3、2、4、1
5.栈和队列的共同点是____。
A.都是先进后出 B.都是先进先出
C.只允许在端点处插入、删除元素 D.没有共同点
6.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行____。
A. s->next = p->next; p->next=s; B. p->next = s->next; s->next = p;
C. q->next = s; s->next = p; D. p->next = s; s->next = q;
7.设串s1=‘ABCDEFG’,s2=‘PQRST’,函数con (x, y) 返回x与y串的连接串,函数subs (s, i, j) 返回串s的从序号i的字符开始的j个字符组成的子串,函数len (s) 返回串s的长度,则con (subs (s1, 2, len (s2)), subs (s1, len (s2), 2)) 的结果串是____。
A. BCDEF B. BCDEFG C. BCPQRST D. BCDEFEF
8.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为____。
A. 2h B. 2h-1 C. 2h +1 D. h +1
9.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历结点访问顺序是dgbaechf,则其后序遍历结点访问顺序是____。
A. bdgcefha B. gdbecfha C. bdgaechf D. gdbehfca
10.具有6个顶点的无向图至少应有____条边才能确保是一个连通图。
A. 5 B. 6 C. 7 D. 8
11.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为–。
A. n B. n/2 C. (n+1)/2 D. (n-1)/2
12.排序方法中,从未排序序列中挑选元素,并将其依次放入已排序序列(注:初始时为空)的一端的方法,称为____。
A. 希尔排序 B. 归并排序 C. 插入排序 D. 选择排序
二、填空题(请在每小题的横线上填入正确内容,每空1分,共7分。)
1.在树形结构中,树根结点没有 结点,其余每个结点有且只有 个前驱结点。
2.对n个元素的序列进行起泡排序时,最少的比较次数是 。
3.空串是 ,其长度等于0。
4.一棵有n个结点的满二叉树共有 个叶子结点。
5.在散列函数H(key)=key % p中,p应取 。
6.已知模式串t=‘abcaabbabc’, 其用KMP法求得的每个字符对应的next函数值为 。
三、简答题(本大题共3小题,每小题5分,共15分)
1.在对线性表的处理中一般使用两种存储结构,顺序存储结构和链式存储结构。试叙述在什么情况下使用顺序表比链表好?
2.简述什么是稳定的排序,什么是不稳定的排序。
3.下列中缀表达式对应的后缀形式是什么?
(1) (A + B) * D + E / (F + A * D) + C
(2) A && B|| ! (E > F) {注:按C的优先级)
四、判断题(本大题共10小题,命题正确的在题后括号内写 “T”,错误的在题后括号内写“F”,每小题1分,共10分)
1.数据元素不是数据的最小单位( )。
2.已知一棵二叉树的前序序列和后序序列可以唯一地构造出该二叉树。( )
3.AOE网是一种带权的无环连通图。( )
4.对于同一组待输入的关键码集合,虽然各关键码的输入次序不同,但得到的二叉搜索树都是相同的( )。
5.一棵树中的叶子数一定等于与其对应的二叉树的叶子数。( )
6.邻接表只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。( )
7.折半插入排序是稳定的。( )
8.在散列法中,使用双散列函数可保证绝对不产生冲突。( )
9.消除递归不一定需要使用栈( )
10.堆排序是交换排序的一种。( )
五、分析应用题(本题共26分,1、4小题各6分,2、3小题各7分)
1.阅读后分析下面程序段的功能是什么? (6分)
SeqStack S1, S2, tmp;
DataType x; //设栈tmp和S2已做过初始化
while ( ! StackEmpty (S1))
{ x=Pop(S1) ;
Push(tmp,x);
}
while ( ! StackEmpty (tmp) )
{ x=Pop(tmp);
Push( S2, x);
}
2.某子系统在通信联络中只可能出现8种字符,其出现的概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11试设计赫夫曼编码。(7分)
3.设散列表为HT[13], 散列函数为 H (key) = key %13。用线性探测再散列法解决冲突, 对下列关键码序列 12, 23, 45, 57, 20, 03, 78, 31, 15, 36 造表。画出相应的散列表, 并计算等概率下搜索成功的平均搜索长度。(7分)
4.设待排序的排序码序列为{12, 2, 16, 30, 28, 10, 16*, 20, 6, 18}, 试写出使用希尔排序(增量为5,2,1)方法每趟排序后的结果。(6分)
六、算法设计题(本题共18分,第1小题10分,第2小题8分)
1.编写一个算法frequency,统计在一个输入字符串中所含各个不同字符出现的频度。用适当的测试数据来验证这个算法。(10分)
2.在一棵以二叉链表表示的二叉树上,试写出用按层次顺序遍历二叉树的方法,并统计树中具有度为1的结点数目的算法。要求给出二叉链表的类型定义。(8分)
答案:
06-07第一学期
期末考试参考答案与评分标准
试卷代码:03266A 授课课时:112
课程名称:数据结构与算法 适用对象:本科
一、单项选择题(每小题2分,共24分。)
1. D 2. D 3. C 4. B 5. C 6. C
7. D 8. B 9. D 10. A 11. C 12. D
二、填空题(每空1分,共7分。)
1.父(或前驱), 1
2. n-1
3. 不包含任何字符的串
4. (n+1)/2
5. 素数
6. 0111223123
三、简答题(每小题5分,共15分)
1.答:① 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大,存储空间利用率高。缺点:插入或删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小(<1),存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。
若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;
若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
2.答:在排序序列中,任何两个相等的关键字Ki=Kj,如果在排序前的序列中Ki领先于Kj,若在排序后的序列中Ki仍领先于Kj,则称所用的排序方法是稳定的;反之,若可能使排序后的序列中Kj领先于Ki,则称所用的排序方法是不稳定的。
3.答:各中缀表达式的后缀形式如下:
(1)AB+D*EFAD*+/+C+
(2)AB&&EF>!||
四、判断题(本大题共10小题,命题正确的在题后括号内写 “T”,错误的在题后括号内写“F”,每小题1分,共10分)
1.T 2.F 3.T 4.F 5.F
6.F 7.T 8.F 9.T 10.F
五、分析应用题(1、4小题各6分,2、3小题各7分)
1.(6分)
答:程序段的功能是利用tmp栈将一个非空栈s1的所有元素按原样复制到一个栈s2当中去。
2.(7分)
答:为方便起见,设各种字符的权值w={5,29,7,8,14,23,3,11}。因为n=8,所以要构造的赫夫曼树共有m=2n-1=2*8-1=15个结点。生成的赫夫曼树为下图所示:
赫夫曼编码为:概率为0.23的字符编码为:00
概率为0.11的字符编码为:010
概率为0.05的字符编码为:0110
概率为0.03的字符编码为:0111
概率为0.29的字符编码为:10
概率为0.14的字符编码为:110
概率为0.07的字符编码为:1110
概率为0.08的字符编码为:1111
3.(7分)
答:使用散列函数H(key)=key mod 13 有:
H(12)=12, H(23)=10,H(45)=6,H(57)=5,H(20)=7,H(03)=3,H(78)=0,H(31)=5,H(15)=2,H(36)=10
利用线性探查法造表:
0 1 2 3 4 5 6 7 8 9 10 11 12
78 15 03 57 45 20 31 23 36 12
1 1 1 1 1 1 4 1 2 1
搜索成功的平均搜索长度为:
ASL=1/10(1+1+1+1+1+1+4+1+2+1)=14/10
4.(6分)
答: 希尔排序(增量为5,2,1)
六、算法设计题(第1小题10分,第2小题8分)
1. (10分)
include <iostream.h>
include”string.h”
int charnumber=128;
void frequency(string&s,int C[ ]){
for(int i=0;i< charnumber;i++) C[i]=0;
for( i=0;i< s.length();i++) C[atoi(s[i])]++;
for( i=0;i< charnumber;i++)
if(C[i]>0) cout<<”(”<<i<<”):\t”<<C[i]<<”\t”;
}
2. (8分)
类型定义(略)
int Level(BiTree bt) //层次遍历二叉树,并统计度为1的结点的个数
{
int num=0; //num统计度为1的结点的个数
if(bt){
QueueInit(Q); QueueIn(Q,bt);//Q是以二叉树结点指针为元素的队列
while(!QueueEmpty(Q))
{ p=QueueOut(Q); printf(p->data); //出队,访问结点
if(p->lchild && !p->rchild ||!p->lchild && p->rchild)
num++;//度为1的结点
if(p->lchild) QueueIn(Q,p->lchild); //非空左子女入队
if(p->rchild) QueueIn(Q,p->rchild); //非空右子女入队
}
}
return(num); //返回度为1的结点的个数
}
B:
06-07第一学期期末考试试卷
试卷代码:03266B 授课课时:112
课程名称:数据结构与算法 适用对象:本科
一、单项选择题(从下列各题四个备选答案中选出一个正确答案,并将其代号写在答题纸相应位置处。答案错选或未选者,该题不得分。每小题2分,共24分。)
1.数据结构被形式地定义为 (K, R),其中K是____的有限集,R是K上的关系有限集。
A.算法 B.数据元素 C.数据操作 D.逻辑结构
2.在数据结构中,从逻辑上可以把数据结构分成____。
A.动态结构和静态结构 B.紧凑结构和非紧凑结构
C.线性结构和非线性结构 D.内部结构和外部结构
3.以下的叙述中,正确的是____。
A.线性表的存储结构优于链式存储结构
B.二维数组是其数据元素为线性表的线性表
C.栈的操作方式是先进先出
D.队列的操作方式是先进后出
4.若一个栈的入栈序列是1、2、3、… 、n,其输出序列为p1、p2、p3、… 、pn,若p1=n,则pi为____。
A. i B. n = i C. n - i +1 D.不确定
5.判断一个循环队列QU (最多元素为m) 为空的条件是____。
A. QU->front == QU->rear B. QU->front != QU->rear
C. QU->front == (QU->rear+1)%m D. QU->front != (QU->rear+1)%m
6.在某单链表中,已知p所指结点不是最后结点,在p之后插入s所指结点,则执行____。
A. s->next = p; p->next=s; B. s->next = p->next; p->next = s;
C. s->next = p->next; p = s; D. p->next = s; s->next = p;
7.串是一种特殊的线性表,其特殊性体现在____。
A.可以顺序存储 B.数据元素是一个字符
C.可以链接存储 D.数据元素可以是多个字符
8.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,前序遍历序列是____。
A. acbed B. decab C. deabc D. cedba
9.对于一个满二叉树,m个树叶,n个结点,深度为h,则____。
A. n = h + m B. h + m = 2n C. m = h-1 D. n = 2h -1
10.一个有n个顶点的无向图最多有____条边。
A. n B. n(n-1) C. n(n-1)/2 D. 2n
11.顺序查找法适合于存储结构为____的线性表。
A. 散列存储 B. 顺序存储或链接存储
C. 压缩存储 D. 索引存储
12.在待排序的元素序列基本有序的前提下,效率最高的排序方法是____。
A. 插入排序 B.选择排序 C.快速排序 D. 归并排序
二、填空题(请在每小题的横线上填入正确内容,每空1分,共7分。)
1.在线性结构中,第一个结点 前驱结点,其余每个结点有且只有1个前驱结点。
2.在无权图G的邻接矩阵中,若A[i][j]等于1,则等于A[j][i] = 。
3.根据二叉树的定义,具有三个结点的二叉树有 种不同的形态。
4.空格串是指 ,其长度等于 。
5.在散列存储中,装填因子α的值越大,则存储元素时发生冲突的可能性就 。
6.已知模式串t= ‘abacabaaad’, 其用KMP法求得的每个字符对应的next函数值为 。
三、简答题(本大题共3小题,每小题5分,共15分)
1.比较静态查找与动态查找的主要区别,它们的基本运算有哪些不同?
2.逻辑结构分哪几种,存储结构有哪几种?
3.在具有n(n>1)个结点的各棵不同形态树中,其中深度最小的那棵树的深度是多少?它共有多少叶子和非叶子结点?
四、判断题(本大题共10小题,命题正确的在题后括号内写 “T”,错误的在题后括号内写“F”,每小题1分,共10分)
1.每种数据结构都应具备三种基本运算:插入、删除、搜索( )。
2.满二叉树不一定是完全二叉树。( )
3.带权连通图的最小生成树的权值之和一定小于它的其它生成树的权值之和。( )
4.任一棵二叉搜索树的平均搜索时间都小于用顺序搜索法搜索同样结点的顺序表的平均搜索时间。( )
5.线性链表中所有结点的类型必须相同。( )
6.用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中顶点个数有关,而与图的边数无关( )。
7.在散列法中解决冲突时,其装载因子的取值一定在(0,1)之间。( )
8.任何一个关键活动延迟,那么整个工程将会延迟。( )
9.平衡二叉树的左右子树深度之差的绝对值不超过1。( )
10.n个结点的有向图,若它有n(n-1)条边,则它一定是强连通的。( )
五、分析应用题(本题共26分,1、4小题各6分,2、3小题各7分)
1.下述算法的功能是什么? (6分)
LinkList Demo(LinkList L)
{ // L 是无头结点单链表
ListNode *Q,*P;
if(L&&L->next){
Q=L;
L=L->next;
P=L;
while (P->next) P=P->next;
P->next=Q; Q->next=NULL;
}
return L;
}
2.将给定的图简化为最小的生成树,要求从顶点1出发。(7分)
3.设散列表为HT[13], 散列函数为 H (key) = key %13。用双散列法解决冲突, 对下列关键码序列 12, 23, 45, 57, 20, 03, 78, 31, 15, 36 造表。再散列函数为 RH (key) = (7*key) % 10 + 1, 寻找下一个地址的公式为 Hi = (Hi-1 + RH (key)) % 13, H1 = H (key)。画出相应的散列表, 并计算等概率下搜索成功的平均搜索长度。(7分)
4.设待排序的排序码序列为{12, 2, 16, 30, 28, 10, 16*, 20, 6, 18},写出使用快速排序法每趟排序后的结果。(6分)
六、算法设计题(本题共18分,第1小题10分,第2小题8分)
1.试设计一个实现下述要求的查找运算函数Locate。设有一个带表头结点的双向链表L, 每个结点有4个数据成员:指向前驱结点的指针llink、指向后继结点的指针rlink,存放字符数据的成员data和访问频度freq。所有结点的freq 初始时都为0。每当在链表上进行一次Locate(L, x) 操作时,令元素值为x的结点的访问频度freq加1,并将该结点前移,链接到与它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。(10分)
2.设一棵二叉树以二叉链表为存贮结构,设计一个算法将二叉树中所有结点的左,右子树相互交换。要求给出二叉链表的类型定义。(8分)
答案:
06-07第一学期
期末考试参考答案与评分标准
试卷代码:03266B 授课课时:112
课程名称:数据结构与算法 适用对象:本科
一、单项选择题(每小题2分,共24分。)
1. B 2. C 3. B 4. C 5. A 6. B
7. B 8. D 9. D 10.C 11. B 12. A
二、填空题(每空1分,共7分。)
1. 无
2. 1
3. 5
4. 串中字符全为空格 , 空格的个数
5. 大
6. 0112123422 。
三、简答题(本大题共5小题,每小题5分,共15分)
1.答:两种查找方法最大的区别在于:
静态查找方法不修改查找表;动态查找在查找不成功时,将结点插入查找表中,即有可能修改查找表;
静态查找的基本运算有建表、查找和读表元;动态查找除上述基本操作外还有初始化、插入和删除操作;
2.答:根据数据元素之间关系的不同特性,通常有下列四类基本结构:(1)集合;(2)线性结构;(3)树形结构;(4)图状结构或网状结构。有两种不同的存储结构:顺序存储结构和链式存储结构。
3.答:深度最小的那棵树的深度为2。对于这n个结点,除了一个根结点之外,其余得n-1个结点均为叶子结点,故其深度为2。该树叶子结点数为n-1,非叶子结点数为1。
四、判断题(每小题1分,共10分)
1. (T) 2. (F) 3. (T) 4. (F) 5. (T)
6. (T) 7. (F) 8. (T) 9. (T ) 10.(T)
五、分析应用题(本题共26分,1、4小题各6分,2、3小题各7分)
1.(6分)
答:该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。
2.(7分)
答:
3.(7分)
答:使用散列函数H(key)=key mod 13 有:
H(12)=12, H(23)=10,H(45)=6,H(57)=5,H(20)=7,H(03)=3,H(78)=0,H(31)=5,H(15)=2,H(36)=10
利用双散列法造表:Hi =(Hi-1+RH(key))%13, Hi =H(key)
0 1 2 3 4 5 6 7 8 9 10 11 12
78 15 03 57 45 20 31 36 23 12
1 1 1 1 1 1 3 5 1 1
搜索成功的平均搜索长度为:ASL =1/10(1+1+1+1+1+1+3+5+1+1)=16/10
4.(6分)
答:
六、算法设计题(第1小题10分,第2小题8分)
1.(10分)
答:
(1) 定义链表结构
struct DoubleListNode {
char data ;
int freq;
DoubleListNode * llink, *rlink ;
};
初始时,所有结点的freq域的值都为0。
(2) 定义函数
DoubleListNode * locate ( DoubleListNode *f ; char &x ) {
DoubleListNode * p, *q;
p = f→rlink; /*跳过表头结点*/
while ( p != NULL && p→data != x ) p = p→rlink; /*搜索*/
if ( p ) {
p→freq ++; q = p→llink;
p→rlink→llink = q; q→rlink = p→rlink; /*从链中摘下p*/
while ( q != f &&q→freq < p→freq ) q =q→llink;
p→llink = q;
p→rlink = q→rlink; q→rlink→llink = p;
q→rlink = p; /*在q后面插入p*/
}
return p;
}
2. (8分)
答:类型定义(略)
void exchange(BiTree bt)//将二叉树bt所有结点的左右子树交换
{
if(bt)
{ BiTree s;
s=bt->lchild; bt->lchild=bt->rchild; bt->rchild=s; //左右子女交换
exchange(bt->lchild); //交换左子树上所有结点的左右子树
exchange(bt->rchild); //交换右子树上所有结点的左右子树
}
}