




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章一、填空题1 .数据元素.是数据的基本单位,.数据项.是具有独立含义的最小标识单位。3 数据之间的关系(逻辑结构)有四种.集合.、.线性结构.、.树形结构.、.网状结构.,可分为.顺序映像. .、.非顺序映像.两大类。4 数据的存储结构包括.顺序存储结构.、.链式存储结构.。.二、问答题1. 什么是数据结构?什么是数据类型?数据结构是相互之间存在一种或多种特定关系的数据元素的集合,数据类型是一个值的集合和定义,在这个值集上的一组操作的总称。2. 叙述算法的定义与特性。算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。特性:有穷性,确定性,可行性,
2、输入,输出。3. 叙述算法的时间复杂度。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:T(n)=0(f(n),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。三、判断题(在各题后填写“”或“”)1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。(错 )2下列几种数量级从小到大的排列顺序为: O(1) 、O(logn)、O(n) 、O(nlogn) 、O(n2) 、O(n3 ) 、O(2n) 。(对 )四、算法分析1 计算机执行下面的语句时,语句s的执行频度(重复执行
3、的次数)为n(n+1)/2-3 FOR(i=l;i=i;j-) s; 2有下列运行时间函数: (1)T1 (n)=1000; (2)T2(n)=n2+1000n; (3)T3(n)=3n3+100n2+n+1;分别写出相应的大O表示的运算时间。(1)0(1).(2)0(n二次方),(3)0(n三次方)3 设n为正整数,利用大O记号,将该程序段的执行时间表示为n的函数,则下列程序段的时间复杂度可表示为 (1) 0(n) (2)0(n二次方)1)float sum1(int n) /* 计算1!+2!+n! */ p=1; sum1=0; for (i=1; i=n; +i) p=p*i; sum
4、1=sum1+p /* sum1 */(2) float sum2(int n) /* 计算1!+2!+n! */sum2=0; for (i=1; i=n; +i) p=1; for (j=1; j=i; +j) p=p*j; sum2=sum2+p; /* sum2 */3. n是描述问题规模的非负整数规模,下面程序片段的时间复杂度是0。(2011)i=2; WHILE( inext=Pointer B NEW-next=Pointer-next Pointer=NEW Pointer-next=NEWC Pointer-next=NEW-next D 以上皆非NEW-next=Point
5、er5. 在单链表中,增加头结点的目的是 ( C ) A. 使单链表至少有一结点 B. 标志表中首结点位置 C. 方便运算的实现 D.说明单链表是线性表的链式存储实现6 线性表在 情况下适用于使用链式结构实现。( B )()需经常修改中的结点值 ()需不断对进行删除插入 ()中含有大量的结点 ()中结点结构复杂7、向一个有127个元素原顺序表中插入一个新元素并保存原来顺序不变,平均要移动( B )个元素。A、8 B、63.5 C、63 D、7三、算法设计1 设顺序表L中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。答1. Status Insert_SqLi
6、st(SqList &va,int x)/把x插入递增有序表va中if(va.length+1va.listsize) return ERROR;va.length+;for(i=va.length-1;va.elemix&i=0;i-)va.elemi+1=va.elemi;va.elemi+1=x;return OK;/Insert_SqList ! 2 分别写出算法将单链表和顺序表就地逆置(用尽可能少的附加空间在原存储出空间内将将线性表a1,a2,a3,an逆置为ana3,a2,a1)。答(1).void reverse(SqList &A)/顺序表的就地逆置for(i=0,j=A.le
7、ngth-1;ij;i+,j-)A.elemiA.elemj;/reverse (2)分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头.(void LinkList_reverse(Linklist &L)/另一种方法,节省指针 p=L-next;q=p-next;while(q)p-next=q-next;q-=L-next;L-next=q;q=p-next; *3删除元素递增排列的链表L中所有值相同的元素。答3 .Status Delete_Equal(Linklist &L)/删除元素递增排列的链表L中所有值相同的元素p=L-next;q=p-next; /p
8、,q指向相邻两元素while(p-next)if(p-data!=q-data)p=p-next;q=p-next; /当相邻两元素不相等时,p,q都向后推一步elsewhile(q-data=p-data) s=q-next;free(q); q=s; p-next=q;p=q;q=p-next; /当相邻元素相等时删除多余元素/else/while/Delete_Equal 第三章1. 元素a,b,c,d,e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是 B .(2011) A.3 B.4 C.5 D.62. 设栈
9、S和队列Q的初始状态均为空,元素abcdefg依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是bdcfeag,则栈S的容量至少是 C (2009)A1 B.2 C.3 D.43.对于顺序存储的队列,存储空间大小为n,头指针为F,尾指针为R。若在逻辑上看一个环,则队列中元素的个数为 (4) (1).R-F .n+R-F .(R-F+1)mod n .(n+R-F)mod n4. 若一个序列的进栈顺序为1,2,3,4, 那么不可能的出栈序列是 A A. 4,2,3,1 B. 3,2,1,4 C. 4,3,2,1 D. 1,2,3,45、一个递归的定义可以用递归过程求解,也可以用
10、非递归过程求解,但单从运行时间来看,通常递归过程比非递归过程( B )A较快 B较慢 C相同 D 不确定!6.简述以下算法的功能(栈和队列的元素类型均为int)() Void alog(stack &S,int e) Stack T; int d; InitStack(T);while(!StackEmpty(S) Pop(S,d) ; if (d!=e) Push(T,d); while(!StackEmpty(T) Pop(T,d); Push(S,d); (2)void proc_1(Stack S) int i, n, A255; n=0; while(!EmptyStack(S) n
11、+; Pop(S, An); for(i=1; iMaxValue(a,n-1) max=an; else max=MaxValue(a,n-1); return(max); 9.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队和出队的算法。答:void InitCiQueue(CiQueue &Q)/初始化循环链表表示的队列QQ=(CiLNode*)malloc(sizeof(CiLNode);Q-next=Q;/InitCiQueue void EnCiQueue(CiQueue &Q,int x)/把元素x插入循环链表表示
12、的队列Q,Q指向队尾元素,Q-next指向头结点,Q-next-next指向队头元素p=(CiLNode*)malloc(sizeof(CiLNode);p-data=x;p-next=Q-next; /直接把p加在Q的后面Q-next=p;Q=p; /修改尾指针 Status DeCiQueue(CiQueue &Q,int x)/从循环链表表示的队列Q头部删除元素xif(Q=Q-next) return ERROR;/队列已空p=Q-next-next;x=p-data;Q-next-next=p-next;free(p);return OK;/DeCiQueue 第四章1 简述空串与空格
13、串、主串与子串每对术语的区别?答:空串;零个字符的串,它的长度为零;空格串:由一个或多个空格串组成的串,它的长度为串中空格字符的个数;子串:串中任意连续的字符组成的子序列;主串:包含了子串的相应地称为主串。2 两个字符串相等的充要条件是什么?答:两个串的长度相符,并且各个对应位置的字符都相等的才相等。3 串有哪几种存储结构?答:串有堆分配存储和块缝存储。4设 s=I AM A STUDENT,t=GOOD, q=WORKER,求: (1) StrLength(s),StrLength(t)(2) SubString(s, 8, 7) ,SubString(t, 2, 1) (3) Index(
14、s, A),Index(s,t)(4) Replace(s, STUDENT, q)(5) Concat(SubString(s,6,2),Concat(t,SubString(s,7,8)答:(1)strlength(s)=14 strlingth(t)=4*5. 令s=aaab, t=abcabaa, 试分别求出它们的next函数值。 答:“aaab” :next= 0,1,2,3 / nextval=0,0,0,3 “abcabaa”:next=0,1,1,1,2,3,2/next=0,1,1,0,1,3,2*6.编写算法, 统计串S中字符的种类和个数 (定长顺序存储).提示:用结构数组
15、T存储统计结果 typedef struct char ch; int num; mytype; mytype TMAXSIZE;答:void StrAnalyze(Stringtype S) /统计串S中字符的种类和个数 mytype TMAXSIZE; /用结构数组T存储统计结果 for(i=1;i=S0;i+) c=Si;j=0; while(Tj.ch & Tj.ch!=c) j+; /在结构数组T中逐元素查找当前字符c是否已记录过. /当循环停止时,再看是什么原因造成的停止。 if(Tj.ch) Tj.num+; /循环停止时Tj.ch不等于NULL,说明是由于Tj.ch=c所致/若
16、是 Tj.ch =c所致则说明字符c在串s中已经出现过/故将其个数加1. else Tj=c,1; /否则为首次出现,将其出现次数记为1. /for for(j=0;Tj.ch;j+) /打印每个字符在串s中的出现次数。printf(“%c: %dn”,Tj.num); /StrAnalyze第五章一、选择题5-1二维数组A0.8,0.9,其每个元素占2字节,从首地址400开始,按行优先顺序存放,则元素A8,5的存储地址为 A 。A) 570 B) 506 C) 410 D) 4825-2设有下三角矩阵A0.10,0.10,按行优先顺序存放其非零元素,每个非零元素占两个字节,存放的基地址为10
17、0,则元素A5,5的存放地址为(D )。A) 110 B) 120 C) 130 D) 1405-3如下是一个稀疏矩阵的三元组法存储表示和基于此表示所得出的相关叙述 行下标 列下标 值113145232326345333I.该稀疏矩阵有5行 II.该稀疏矩阵有4列III.该稀疏矩阵有6个非0元素这些叙述中_C_是正确的。 A)仅I B)I和II C)仅III D)全部5-4按行优先顺序存储下三角矩阵的非零元素,则计算非零元素aij(1jin)的地址的公式为_D_。A) LOC(aij)=LOC(a11) +i(i+1)/2+jB) LOC(aij)=LOC(a11)+i(i+1)/2+ (j-
18、1)C) LOC(aij)=LOC(a11) +i(i-1)/2+jD) LOC(aij)=LOC(a11)+i(i-1)/2+ (j-1)5-5对矩阵压缩存储是为了(B )。 A)方便 B)节省空间 C)方便存储 D)提高运算速度 二、简答题5-6 设有一个nn的对称矩阵A,如图(a)所示。为了节约存储,可以只存对角线及对角线以上的元素,称为上三角矩阵。我们把它们按行存放于一个一维数组B中,如图(b)所示。并称之为对称矩阵A的压缩存储方式。试问:若在一维数组B中从0号位置开始存放,则如图(a)所示的对称矩阵中的任一元素aij在只存上三角部分的情形下(图(b)应存于一维数组的什么下标位置?给出
19、计算公式。答:只存上三角部分时,若 i j ,数组元素 Aij 在数组 B 中没有存放,可以找它的对称元素 Aji 。在 数组 B 的第 (2n - j) * (j - 1) / 2 + i 位置中找到。 如果第 0 行第 0 列也计入,数组 B 从 0 号位置开始存放,则数组元素 Aij 在数组 B 中的存放位置可以改为 当 i j 时, = (2n - j - 1) * j / 2 + i 5-7在实际应用中经常遇到的稀疏矩阵是三对角矩阵,如图所示。在该矩阵中除主对角线及在主对角线上下最临近的两条对角线上的元素外,所有其它元素均为0。现在要将三对角矩阵A中三条对角线上的元素按行存放在一维数
20、组B中,且a11存放于B0。试给出计算A在三条对角线上的元素aij (1 i n, i-1 j i+1)在一维数组B中的存放位置的计算公式。(1)k = 3(i-1)-1 (主对角线下,即i=j+1)k = 3(i-1) (主对角线,即i=j)k = 3(i-1)+1 (主对角线上,即i=j-1)由以上三式,得 k=2(i-1)+j-1 (1i,jn; 1k3n-2)三、编成题5-8设任意n个整数存放于数组A(1:n)中,试编写程序,将所有正数排在所有负数前面(要求算法复杂性为0( n))。答:题目分析本题属于排序问题,只是排出正负,不排出大小。可在数组首尾设两个指针i和j,i自小至大搜索到负
21、数停止,j自大至小搜索到正数停止。然后i和j所指数据交换,继续以上过程,直到 i=j为止。void Arrange(int A,int n) /n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面 int i=0,j=n-1,x; /用类C编写,数组下标从0开始 while(ij)while(i0) i+;while(ij & Aj0) j-; if(ilchild!=NULL&T-rchild!=NULL) count+; search(T-lchild); search(T-rchild); int Depth (BiTree T ) / 返回二叉树的深度 if ( !T ) d
22、epthval = 0; else depthLeft = Depth( T-lchild ); depthRight= Depth( T-rchild ); depthval = 1 + (depthLeft depthRight ? depthLeft : depthRight); return depthval;2. 编写算法将每个节点的左右子树进行交换。答:void exch_pre(BTNode* b)/基于前序的交换 BTNode* tmp; if(b) tmp = b-lchild; b-lchild = b-rchild; b-rchild = tmp; exch_pre(b-
23、lchild); exch_pre(b-rchild); void exch_in(BTNode* b) /基于中序的交换 BTNode* tmp; if(b) exch_pre(b-lchild); tmp = b-lchild; b-lchild = b-rchild; b-rchild = tmp; exch_pre(b-lchild); /! void exch_post(BTNode* b) /基于后序的交换 BTNode* tmp; if(b) exch_pre(b-lchild); exch_pre(b-rchild); tmp = b-lchild; b-lchild = b-
24、rchild; b-rchild = tmp; *3. 已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。答:void PreOrder_Nonrecursive(Bitree T)/先序遍历二叉树的非递归算法InitStack(S);Push(S,T); /根指针进栈while(!StackEmpty(S)while(Gettop(S,p)&p)visit(p-data);push(S,p-lchild); /向左走到尽头pop(S,p);if(!StackEmpty(S) pop(S,p); push(S,p-rchild); /向右一步/while/PreOr
25、der_Nonrecursive4. 已知二叉树按照二叉链表方式存储,写出按层遍历的算法(提示:利用队列)答:void LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType) / 初始条件:二叉树T存在,Visit是对结点操作的应用函数 / 操作结果:层序递归遍历T(利用队列),对每个结点调用函数Visit一次且仅一次 LinkQueue q; QElemType a; if(T) InitQueue(q); EnQueue(q,T); while(!QueueEmpty(q) DeQueue(q,a); Visit(a-data); if(
26、a-lchild!=NULL) EnQueue(q,a-lchild); if(a-rchild!=NULL) EnQueue(q,a-rchild); printf(n); 第7章一、选择题 1 .关键路径是指 AOE(ActivityOnEdge) 网中 _C_ 。 A. 最长的回路 B. 最短的回路C. 从源点到汇点 ( 结束顶点 ) 的最长路径D. 从源点到汇点 ( 结束顶点 ) 的最短路径 2 .已知 AOE 网中顶点 v1 v7 分别表示 7 个事件,弧 al a10 分别表示 10 个活动,弧上的数值表示每个活动花费的时间,如下图所示。那么,该网的关键路径的长度为 _ ( 1 )
27、 _ ,活动 a6 的活动的(最迟开始时间 - 活动的最早开始时间)为 _ ( 2 ) _ 。 (1) A.7 B.9 C.10 D.11 (2) A.3 B.2 C.1 D.0 【答案】( 1 ) C ( 2 ) A 3.任何一个无向连通图的最小生成树B 。 A、只有一棵 B、有一棵或多棵 C、一定有多棵 D、可能不存在4.下面关于图的存储的叙述中正确的是_A_A)邻接矩阵占用的存储空间只与图中结点个数有关,而与边数无关;B)邻接矩阵占用的存储空间只与图中边数有关,而与结点个数无关;C)邻接表占用的存储空间只与图中结点个数有关,而与边数无关;D)邻接表占用的存储空间只与图中边数有关,而与结点
28、个数无关。5.在一个无向图中,所有顶点的度数之和等于所有边数的_B_倍。A3 B2 C1 D1/26 .已知一个有向图的边集为,,则由该图产生的一种可能的拓扑序列为_A_。A. a,b,c,d,e B. a,b,d,e,b C. a,c,b,e,d D. a,c,d,b,e二、简答题 7. 给出如下图所示的无向图 G 的邻接矩阵和邻接表两种存储结构,并根据存储结构写出深度优先和广度优先遍历的结果。 【解析】图 G 对应的邻接矩阵和邻接表两种存储结构分别如图 1 和 2 所示。 图 1 邻接矩阵 图 2邻接表 8. 使用普里姆算法和克鲁斯卡尔算法构造出下图所示的图 G 的最小生成树。 【解析】使
29、用普里姆算法构造一棵最小生成树的过程如图所示。9. 有 n 个顶点的无向连通图至少有多少条边?有 n 个顶点的有向强连通图至少有多少条边?试举例说明。 【解析】 n 个顶点的无向连通图至少有 n - 1 条边, n 个顶点的有向强连通图至少有 n 条边。例如: 特例情况是当 n = 1 时,此时至少有 0 条边。三 算法题*7-10 编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向图的邻接表。Status Build_AdjList(ALGraph &G)/输入有向图的顶点数,边数,顶点信息和边的信息建立邻接表InitALGraph(G);scanf(%d,&v);
30、if(v0) return ERROR; /顶点数不能为负G.vexnum=v;scanf(%d,&a);if(a0) return ERROR; /边数不能为负G.arcnum=a;for(m=0;mv;m+)G.verticesm.data=getchar(); /输入各顶点的符号for(m=1;m=a;m+)t=getchar();h=getchar(); /t为弧尾,h为弧头if(i=LocateVex(G,t)0) return ERROR;if(j=LocateVex(G,h)nextarc;q=q-nextarc);q-nextarc=p;p-adjvex=j;p-nextarc
31、=NULL;/whilereturn OK;/Build_AdjList 第九章1设有100个数据元素,采用折半搜索时,最大比较次数为_7_。3、在含有n个元素的顺序表中,用顺序查找方法,查找成功的平均查找长度为_ (n+1)/2_ _。4、对有14个数据元素的有序表R013进行折半搜索,搜索到R3的关键码等于给定值,此时元素比较顺序依次为(C )。AR0,R1,R2,R3 BR0,R13,R2,R3CR6,R2,R4,R3 DR6,R4,R2,R35、在下列所示的平衡二叉树中插入关键字48后得到一棵新平衡二叉树,在新平衡二叉树中,关键字37所在结点的左、右子结点中保存的关键字分别是( C )
32、A:13,48 B:24,48 C:24,53 D:24,906.下列叙述中,不符合m阶B树定义要求的是(D )A根节点最多有m棵子树 B.所有叶结点都在同一层上C各结点内关键字均升序或降序排列 D.叶结点之间通过指针链接7通常查找线性表数据元素的方法有 二分法查找和顺序查找 两种方法,其中 是一种只适合于顺序存储结构 的方法;而 是一种对顺序和链式存储结构均适用的方法。8散列法存储的基本思想是根据 来决定 ,冲突指的是 关键字对应到相同的存储地址,处理冲突的主要方法有 。 9 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。三次比较成功的结点有哪些?。10
33、选取哈希函数H(k)= k%11,用线性探测再散列法(及链地址法)处理冲突。试在010的散列地址空间中,对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求等概率情况下查找成功的平均查找长度。*11写出折半查找的递归算法。答:int Search_Bin1(SSTable ST,KeyType key,int low,int high)/递归 / 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为 / 该元素在表中的位置,否则为0。 int mid; / 置区间初值 if (low=high) mid=(low+high)/2; if EQ(key,ST.elemmid.key) / 找到待查元素 return mid; else if LT(key,ST.elemmid.key) return Search_Bin1( ST, key, low,mid-1); / 继续在前半区间进行查找 else return Search_Bin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度储藏室出售及仓储配送与售后服务合同
- 2025版企业合规风险防范法律顾问聘用合同
- 2025年度文化产业融资租赁担保合同范本
- 红酒知识与健康培训课件
- 2025水利管道工程合同条款及格式
- 红酒白酒香槟知识培训课件
- 2025保温材料采购协议
- 会议纪要标准化撰写模板清晰明了
- 专业咨询公司与房产开发商合作开发办公区协议
- 人工智能助手产品合作协议
- 实验室设备管理员培训
- 2025年四川省成都市中考生物真题(解析版)
- 保险执业登记管理制度
- 2025-2030中国电子墨水屏幕行业市场发展趋势与前景展望战略分析研究报告
- 口腔数字化技术课件
- 2025年安徽省农业职业技能大赛(动物检疫检验员)备赛试题库(含答案)
- 2024年重庆市中考英语试卷(A卷)(含答案与解析)
- 种子购买协议合同书
- 《小学美术开学第一课》课件
- 汽车行业售后
- 直播电商数据分析教学计划
评论
0/150
提交评论