1、高等教育考题解答福建专升本数据结构06年转升本数据结构考题一、单项选择题(共12 小题,每小题2分,共24分)1、已知单链表结构为struct node int data; struct node *next;*p,*q,*r ;删除单链表中结点p(由p指向的结点)后面的结点的操作不正确的是_C_A、q=p-next; p-next=q-next;B、p-next=p-next-next;C、r=p-next; p-next=q-next;D、q=p-next; r=q-next; p-next=r;2、若待排序对象序列在排序前已经按照关键字递增排列,则采用_A_比较次数最少。A、直接插入排序
2、 O(n)B、快速排序 O(n2)C、合并排序D、简单选择排序 O(n2)3、图的深度优先遍历类似于树的_C_A、后序遍历B、层次遍历C、前序遍历D、中序遍历4、求赋权有向图的最短路径常用的算法有_D_A、Prim算法和Kruskal算法B、Prim算法和Dijkstra算法C、Kruskal算法和Dijkstra算法D、Dijkstra算法和Floyd算法5、单链表中有n个结点,在其中查找值为x的结点,在查找成功时需要比较的平均次数是_D_。A、nB、(n-1)/2C、n/2D、(n+1)/2解答: 查询每个元素需要比较次数之和查询平均复杂度 = - 元素个数 1 + 2 + 3 +. +n
3、 n+1 = - = -n 2 思考:如果查找不成功,计算结果如何?6、线性表采用链式存储时,结点的存储地址_B_A、必须是不连续的B、连续与否均可C、必须是连续的D、和头结点的存储地址项连续7、一棵非空的二叉树中,设根结点在第0层,在第i层上最多有_D_个结点。A、2(i+1)B、2iC、2(i-1)D、2i 根 层0 1个 / A B 层1 2个 / / A B C D 层2 4个8、在下列的排序算法中,算法的时间复杂度是O(n*log2n)是_D_。A、冒泡排序B、简单选择排序C、直接插入排序D、堆排序9、使用一个栈,每次限制进栈和出栈一个元素。假设进栈的元素序列依次是a、b、c、d;指
4、出不可能的出栈序列_B_。A、abcdB、adbcC、acbdD、dcba解答:A、push(a)、pop()、push(b)、pop()、push(c)、pop()、push(d)、pop(),B、没办法C、push(a)、pop()、push(b)、 push(c)、pop()、pop()、push(d)、pop()D、push(a)、push(b)、push(c)、push(d)、pop()、pop()、pop()、pop()10、设数组queue作为循环队列Q的存储空间,front作为队头指针,rear作为队尾指针,则执行出队操作后其头指针front的值为_A_。A、front=(fr
5、ont+1)%mB、front=(front+1)%(m-1)C、front=(front-1)%mD、front=front+1解答:与方案1、2无关。11、对图进行广度优先遍历时,通常采用_C_来实现A、字符串B、B树C、队列E、栈12、一个有n个结点k叉树,树中所有结点的度数之和是_B_。A、k+nB、n-1C、knD、n2解答:思路1:树中结点的度数=结点的儿子数n个结点k叉树,每个结点最多有k个儿子,叶子没有儿子,因此答案不是k*n。思路2:正确的做法:树中所有结点的度数之和=树中所有边条数,每一条边指向一个结点,每个结点有一条天线,指向父亲结点,除了根结点之外。故答案是B,n-1二
6、、填空题(共8 小题,11空,每空2分,共22分)13、已知二叉树后序列表为CEDBA,中序列表为CBEDA,则它的前序列表为_ABCDE_。解答:后序列表为CEDBA,因此根是A,中序列表为CBEDA,因此根只有左子树CBED,没有右子树A/CEDB后序,根是BCBED中序,左子树C,右子树EDA/B / C ED后序 ED中序A/B / C D /E14、N个结点的有向图,最多有_N*(N-1)_条边。15、存储图的最常用方法有两种,它们是_邻接矩阵_和_邻接表_。16、设有一个闭散列表的容量为m,用线性探测法解决冲突,要插入一个键值,若插入成功,至多要进行_比较。17、一棵哈夫曼树有29
7、 个结点,其叶子的个数是_15_。解答:哈夫曼树没有度为1的结点, 叶子数=内结点数+1 结点总数 =叶子数+内结点数 =2*叶子数-1 =2*内结点数+118、已知单链表的结点定义为struct node int data; struct node *next;在单链表中搜索结点p(由指向的结点)的后继结点的操作是_p=p-next_。19、已知双链表结点定义为struct node int data; struct node *left,*right;双链表中结点的left和right分别指向前驱和后继结点,在双链表中删除结点p(由指向的结点)的操作是:p-left-right=_p-ri
8、ght_;和p-right-left=_p-left_。20、对于队列,只能在_队尾_插入元素,在_队头_删除元素。三、应用题(共4小题,每小题8分,共32分)21、对图1所示的树(1)结点A的度是_3_。(2)树的度是_3_。(3)画出其转换成相应二叉树的树形 A / | B C D/ / E F G H / I解答:一般树转换成二叉树步骤:将父亲管理儿子方式改为 父亲管理大儿子, 大儿子管理二儿子(二儿子变成大儿子的右孩子)二儿子管理三儿子(三儿子变成二儿子的右孩子) A ABEFCDGIH 前 / EFBCIGHDA 中 B / FEIHGDCBA后 E C F D / G / I H2
9、2、已知参加排序的正整数序列是:90、70、180、30、520、40、60、80、50、130。以第一个元素90作为基准元素,根据快速排序算法,写出完成第一趟划分后序列重新排列的情况。60、70、50、30、80、40、90、520、180、13023、一次输入如下序列中的各个整数,构造其相应的二叉搜索树,只需要画出最后生成的二叉搜索树的树形。整数序列是180、160、250、300、170、120、125、290、380。 180/ 160 250 / 120 170 300 / 125 290 38024、用Prim算法求图2所示的无向带权连通图的最小生成树。要求依次画出从顶点1出发的最
10、小生成树的生成过程。 1 41/ 2 41/ 2 3 41/ 23 4/5四、算法设计(共2小题,第25小题10分,第26小题12分,共22分)25、二叉树以二叉表为存储结构,结点结构的定义如下,请写出一个求二叉树中叶子结点个数的算法。typedef struct btnode *btlink;struct btnode TreeItem element; btlink left; btlink right;Btnode解答:与05年考题不一样int f(指向树根的指针)/f()计算树中叶子节点的个数 if(指向树根的指针=NULL)return 0; x=f(指向树根的左孩子指针); /左子
11、树中叶节点数; y= f(指向树根的右孩子指针);/右子树中叶节点数;if(root-left=NULL&root-right=NULL)return 1; else return x+y;/*或者 if( x=0&y=0)return 1; else return x+y;*/int f ( btlink root )/f()计算树中叶子节点的个数 if(root=NULL)return 0; x=f(root-left); /左子树中叶节点数; y= f(root-right);/右子树中叶节点数; if(x=0&y=0)return 1; else return x+y;T(n)=1+T
12、(n1)+T(n2) n1+n2=n=1+1+T(n11)+T(n12)+1+T(n21)+T(n22) n1=n11+n12 n2=n21+n2225、二叉树以二叉表为存储结构,结点结构的定义如下,请写出一个求二叉树的高度算法。解答:int h(指向树根的指针)/f()计算树高度 if(指向树根的指针=NULL)return 0; x=h(指向树根的左孩子指针); /左子树高度; y= h(指向树根的右孩子指针);/右子树高度; if(xy)return x+1; else return y+1; /return (xy?x:y) +1;26、阅读下列程序,它是在已知的数组a中查找数值为x的
13、元素,如果存在则输出“found”,否则输出“not found”。试问它是什么方法实现的?并请完善程序。用_查找法。#define N 10void bs(int a,int x) int l,r,m; l=0;r=N-1; m=_(l+r)/2_; while(_lam) l=_m+1_; else r=m-1; m=(l+r)/2; if(_lnext=p-;p-next=s B、p-next=s;s-next=p-next; C、S-next=p-next;p-next=s;交换p-data和s-data D、p=s;s-next=p二、填空题(每空2分,共20分)1、数据的逻辑结构反
14、映_成分数据逻辑关系_。2、对于队列,只能在_队尾_插入元素,在_队头_删除元素。3、算法是一运算序列,它应有:有限性、_确定性_、可行性、可以无任何输入,但必须_有输出_。4、由一棵二叉树的前序序列和_中序序列_可唯一确定这棵二叉树的结构。5、如果图的存储结构用_邻接表/邻接矩阵_表示,从某指定顶点作为初始点进行广度优先搜索,得到的广度优先搜索序列唯一。6、用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度_递增_的次序来得到最短路径的。7、线性表(a1,a2,a3,an)(n=1)中,每个元素占c个存储单元,m为a1首地址,则按顺序存储方式存储线性表,ai存储地址是_m+
15、(i-1)*c_。8、n个结点的无向图,最多有_n*(n-1)/2_条边。三、应用题 (本大题共4小题,每小题8分,共32分)1、用Prim算法求下图连通的带权图的最小代价生成树,在算法执行的某一刻,已选取的顶点集合U=1,2,3,边的集合 TE=(1,2),(2,3),要选取下一条权值最小的边,应当从哪些边中选择?2、若用插入排序方法对线性表(25,84,21,47,5,27,68,35,20)进行排序时,请给出前四趟排序结点序列的变化情况。答:2525 8421 25 84 21 25 47 843、已知一棵二叉树的中序序列和后序序列分别为BDCEAFHG和DECBHGFA,请画出该二叉树
16、。 A / BDCE FHG 中DECB HGF 后4、设将整数a,b,c,d依次进栈,请回答:若入、出栈次序为 Push(a),Pop(),Push(b),Push(c),Pop(),Push(d),Pop(), 则出栈的字符序列是什么?答:acd四、算法设计 (本大题共3小题,每小题8分,共24分)1、二叉树以二叉链表为存储结构,类型声明如下,请写出一个求二叉树中结点个数的算法。 typedef struct node datatype data; struct node *Lchild; struct node *Rchild; BinaTree;答:int f(BinaTree *t)
17、if(t = = NULL) return;else return f(t-left)+ f(t-right)+1; 2、设线性表用顺序结构实现,声明如下: typedef struct sqlist char datamaxsize; int n; Sqlist; 请写一个算法,判断其是否回文?(顺读与倒读 一样如:“ababbaba为回文)答:解法1:形参和实参直接传递结构变量#include #define MAXLENGTH 100typedef struct sqlist char dataMAXLENGTH; int n;Sqlist;void f(Sqlist a) int i;
18、 if(a.n=0)return; for(i=0;in=0)return; for(i=0;in)/2;i+) if(a-datai!=a-dataa-n-i-1) printf(No); return; printf(Yes);void main() Sqlist s; printf(input n:); scanf(%d,&(s.n); printf(input data:); scanf(%s,s.data); f(&s);解法3:类似解法2,为指针变量定义了类型List#include #define MAXLENGTH 100typedef struct sqlist *List;
19、typedef struct sqlist char dataMAXLENGTH; int n;Sqlist;void f(List a) int i; if(a-n=0)return; for(i=0;in)/2;i+) if(a-datai!=a-dataa-n-i-1) printf(No); return; printf(Yes);void main() Sqlist s; printf(input n:); scanf(%d,&(s.n); printf(input data:); scanf(%s,s.data); f(&s);3、阅读下列程序,判断它是用什么方法实现排序(升序)的
20、?并完善下列程序。 #include void bubble(int,int); main() int array=55,2,6,4,32,12,9,73,26,37; int size=sizeof(array)/sizeof(int); bubble(_array,10_); void bubble(int a,int size) int i,temp; int end_=0_; int pass=1;/= while(!end&passsize) end=1; for(i=0,iai+1) temp=ai; ai=ai+1; ai+1=temp; end=_0_; _pass+_; /= for(i=0;isize;i+) printf(%d,ai);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1