高等教育考题解答福建专升本数据结构.docx

上传人:b****8 文档编号:10752126 上传时间:2023-02-22 格式:DOCX 页数:20 大小:64.53KB
下载 相关 举报
高等教育考题解答福建专升本数据结构.docx_第1页
第1页 / 共20页
高等教育考题解答福建专升本数据结构.docx_第2页
第2页 / 共20页
高等教育考题解答福建专升本数据结构.docx_第3页
第3页 / 共20页
高等教育考题解答福建专升本数据结构.docx_第4页
第4页 / 共20页
高等教育考题解答福建专升本数据结构.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

高等教育考题解答福建专升本数据结构.docx

《高等教育考题解答福建专升本数据结构.docx》由会员分享,可在线阅读,更多相关《高等教育考题解答福建专升本数据结构.docx(20页珍藏版)》请在冰豆网上搜索。

高等教育考题解答福建专升本数据结构.docx

高等教育考题解答福建专升本数据结构

06年转升本数据结构考题

一、单项选择题(共12小题,每小题2分,共24分)

1、已知单链表结构为

structnode{

intdata;

structnode*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、直接插入排序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、n

B、(n-1)/2

C、n/2

D、(n+1)/2

解答:

查询每个元素需要比较次数之和

查询平均复杂度=----------------------------------------------

元素个数

1+2+3+...+nn+1

=----------------------------=--------

n2

思考:

如果查找不成功,计算结果如何?

6、线性表采用链式存储时,结点的存储地址__B___

A、必须是不连续的

B、连续与否均可

C、必须是连续的

D、和头结点的存储地址项连续

7、一棵非空的二叉树中,设根结点在第0层,在第i层上最多有___D__个结点。

A、2(i+1)

B、2i

C、2(i-1)

D、2i

根层01个

/\

AB层12个

/\/\

ABCD层24个

8、在下列的排序算法中,算法的时间复杂度是O(n*log2n)是___D__。

A、冒泡排序

B、简单选择排序

C、直接插入排序

D、堆排序

9、使用一个栈,每次限制进栈和出栈一个元素。

假设进栈的元素序列依次是a、b、c、d;指出不可能的出栈序列___B____。

A、abcd

B、adbc

C、acbd

D、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=(front+1)%m

B、front=(front+1)%(m-1)

C、front=(front-1)%m

D、front=front+1

解答:

与方案1、2无关。

11、对图进行广度优先遍历时,通常采用__C__来实现

A、字符串

B、B树

C、队列

E、栈

12、一个有n个结点k叉树,树中所有结点的度数之和是__B__。

A、k+n

B、n-1

C、kn

D、n2

解答:

思路1:

树中结点的度数=结点的儿子数

n个结点k叉树,每个结点最多有k个儿子,叶子没有儿子,因此答案不是k*n。

思路2:

正确的做法:

树中所有结点的度数之和=树中所有边条数,

每一条边指向一个结点,每个结点有一条天线,指向父亲结点,除了根结点之外。

故答案是B,n-1

二、填空题(共8小题,11空,每空2分,共22分)

13、已知二叉树后序列表为CEDBA,中序列表为CBEDA,则它的前序列表为__ABCDE__。

解答:

后序列表为CEDBA,因此根是A,

中序列表为CBEDA,因此根只有左子树CBED,没有右子树

A

/

CEDB后序,根是B

CBED中序,左子树C,右子树ED

A

/

B

/\

CED后序

ED中序

A

/

B

/\

CD

/

E

14、N个结点的有向图,最多有___N*(N-1)_____条边。

15、存储图的最常用方法有两种,它们是___邻接矩阵____和____邻接表____。

16、设有一个闭散列表的容量为m,用线性探测法解决冲突,要插入一个键值,若插入成功,至多要进行______比较。

17、一棵哈夫曼树有29个结点,其叶子的个数是___15____。

解答:

哈夫曼树没有度为1的结点,

叶子数=内结点数+1

结点总数

=叶子数+内结点数

=2*叶子数-1

=2*内结点数+1

18、已知单链表的结点定义为

structnode{

intdata;

structnode*next;

};

在单链表中搜索结点p(由指向的结点)的后继结点的操作是____p=p->next___。

19、已知双链表结点定义为

structnode{

intdata;

structnode*left,*right;

};

双链表中结点的left和right分别指向前驱和后继结点,在双链表中删除结点p(由指向的结点)的操作是:

p->left->right=___p->right______;和p->right->left=___p->left_____。

20、对于队列,只能在__队尾___插入元素,在___队头____删除元素。

三、应用题(共4小题,每小题8分,共32分)

21、对图1所示的树

(1)结点A的度是_____3______。

(2)树的度是______3_____。

(3)画出其转换成相应二叉树的树形

A

/|\

BCD

/\/\

EFGH

/

I

解答:

一般树转换成二叉树步骤:

将父亲管理儿子方式改为

父亲管理大儿子,

大儿子管理二儿子(二儿子变成大儿子的右孩子)

二儿子管理三儿子(三儿子变成二儿子的右孩子)

AABEFCDGIH前

/EFBCIGHDA中

B

/\FEIHGDCBA后

EC

\\

FD

/

G

/\

IH

22、已知参加排序的正整数序列是:

90、70、180、30、520、40、60、80、50、130。

以第一个元素90作为基准元素,根据快速排序算法,写出完成第一趟划分后序列重新排列的情况。

60、70、50、30、80、40、90、520、180、130

23、一次输入如下序列中的各个整数,构造其相应的二叉搜索树,只需要画出最后生成的二叉搜索树的树形。

整数序列是180、160、250、300、170、120、125、290、380。

180

/\

160250

/\\

120170300

\/\

125290380

24、用Prim算法求图2所示的无向带权连通图的最小生成树。

要求依次画出从顶点1出发的最小生成树的生成过程。

 

1

\

4

1

/\

24

1

/\

23—4

1

/\

23—4

/

5

四、算法设计(共2小题,第25小题10分,第26小题12分,共22分)

25、二叉树以二叉表为存储结构,结点结构的定义如下,请写出一个求二叉树中叶子结点个数的算法。

typedefstructbtnode*btlink;

structbtnode{

TreeItemelement;

btlinkleft;

btlinkright;

}Btnode

解答:

与05年考题不一样

intf(指向树根的指针){//f()计算树中叶子节点的个数

if(指向树根的指针==NULL)return0;

x=f(指向树根的左孩子指针);//左子树中叶节点数;

y=f(指向树根的右孩子指针);//右子树中叶节点数;

if(root->left==NULL&&root->right==NULL)return1;

elsereturnx+y;

/*或者

if(x==0&&y==0)return1;

elsereturnx+y;*/

}

intf(btlinkroot){//f()计算树中叶子节点的个数

if(root==NULL)return0;

x=f(root->left);//左子树中叶节点数;

y=f(root->right);//右子树中叶节点数;

if(x==0&&y==0)return1;

elsereturnx+y;

}

T(n)=1+T(n1)+T(n2)n1+n2=n

=1+1+T(n11)+T(n12)+1+T(n21)+T(n22)n1=n11+n12n2=n21+n22

25、二叉树以二叉表为存储结构,结点结构的定义如下,请写出一个求二叉树的高度算法。

解答:

inth(指向树根的指针){//f()计算树高度

if(指向树根的指针==NULL)return0;

x=h(指向树根的左孩子指针);//左子树高度;

y=h(指向树根的右孩子指针);//右子树高度;

if(x>y)returnx+1;

elsereturny+1;

//return(x>y?

x:

y)+1;

}

26、阅读下列程序,它是在已知的数组a中查找数值为x的元素,如果存在则输出“found”,否则输出“notfound”。

试问它是什么方法实现的?

并请完善程序。

用__________查找法。

#defineN10

voidbs(inta[],intx){

intl,r,m;

l=0;r=N-1;

m=___(l+r)/2______;

while((_____l<=r_______)&&(x!

=a[m])){

if(x>a[m])l=_____m+1______;

elser=m-1;

m=(l+r)/2;

}

if(___l<=r____)

printf("notfound");

else

printf("found");

}

main(){

inta[N]={10,20,30,40,50,60,70,80,90,100};

intx;

printf("inputx:

=");

scanf("%d",&x);

bs(____a,x_______);

}

 

05专升本数据结构考题

一、单选题:

(每题2分,共24分)

1、双向链表的一个结点有(B)个指针。

A、1B、2C、0D、3

2、在n个结点的顺序表中,算法的时间复杂度都是O

(1)的操作是(A)。

A、访问第i个结点(1≤i≤n)和求第i个结点的直接前趋(2≤i≤n)

B、在第i个结点后插入一个新结点(1≤i≤n)

C、删除第i个结点(1≤i≤n)

D、将n个结点从小到大排序

3、在队列中存取数据的原则是(A)。

A、先进先出B、后进后出?

C、先进后出D、不进不出

4、在栈中,出栈操作的时间复杂度为(A)。

A、O

(1)B、O(logn)

C、O(n)D、O(n*n)

5、设长度为n的链队列用单循环链表表示,若只设头指针,则人队操作的时间复杂度为(C)。

A、O

(1)B、0(logn)

C、0(n)D、O(n*n)

6、如果二叉树的叶结点数为n0,则具有双分支的结点数n2等于(D)。

A、nO+lB、n0

C、2*n0D、n0-1

7、一棵二叉树满足下列条件:

对任一结点,若存在左、右子树,则其值都小于它的左子树上所有结点的值,而大于右子树上所有结点的值。

现采用(B)遍历方式就可以得到这棵二叉树所有结点的递增序列。

A、先根B、中根

C、后根D、层次

8、用邻接表表示图进行深度优先遍历时,其非递归算法通常采用(A)来实现算法。

A、栈B、队列

C、树D、图

9、广度优先遍历类似于二叉树的(D)。

A、先序遍历B、中序遍历

C、后序遍历D、层次遍历

10、在一个有向图中,所有顶点的人度之和等于所有顶点的出度

之和的(B)。

A、1/2倍B、1倍

C、2倍D、4倍

11、任何一个带权无向连通图的最小生成树(B)。

A、只有一棵B、一棵或多棵

C、一定有多棵D、可能不存在

12、设非空单链表的数据域为data,指针域为next,指针P指向单链表的第i个结点,s指向生成的新结点,现将s结点插入到单链表中,使其成为第i结点,下列算法段能正确完成上述要求的是(C)。

A、s->next=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、数据的逻辑结构反映_____成分数据逻辑关系______。

2、对于队列,只能在___队尾_____插入元素,在____队头_____删除元素。

3、算法是一运算序列,它应有:

有限性、____确定性____、可行性、可以无任何输入,但必须___有输出____。

4、由一棵二叉树的前序序列和____中序序列____可唯一确定这棵二叉树的结构。

5、如果图的存储结构用____邻接表/邻接矩阵___表示,从某指定顶点作为初始点进行广度优先搜索,得到的广度优先搜索序列唯一。

6、用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度____递增___的次序来得到最短路径的。

7、线性表(a1,a2,a3,……an)(n>=1)中,每个元素占c个存储单元,m为a1首地址,则按顺序存储方式存储线性表,ai存储地址是_____m+(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)进行排序时,请给出前四趟排序结点序列的变化情况。

答:

25

2584

212584

21254784

3、已知一棵二叉树的中序序列和后序序列分别为BDCEAFHG和DECBHGFA,请画出该二叉树。

A

/\

BDCEFHG中

DECBHGF后

4、设将整数a,b,c,d依次进栈,请回答:

若入、出栈次序为

Push(a),Pop(),Push(b),Push(c),Pop(),Push(d),Pop(),

则出栈的字符序列是什么?

答:

acd

四、算法设计(本大题共3小题,每小题8分,共24分)

1、二叉树以二叉链表为存储结构,类型声明如下,请写出一个求二叉树中结点个数的算法。

typedefstructnode{

datatypedata;

structnode*Lchild;

structnode*Rchild;

}BinaTree;

答:

intf(BinaTree*t){

if(t==NULL)return;

else

returnf(t->left)+f(t->right)+1;

}

2、设线性表用顺序结构实现,声明如下:

typedefstructsqlist{

chardata[maxsize];

intn;

}Sqlist;

请写一个算法,判断其是否回文?

(顺读与倒读

一样如:

“ababbaba"为回文)

答:

解法1:

形参和实参直接传递结构变量

#include

#defineMAXLENGTH100

typedefstructsqlist{

chardata[MAXLENGTH];

intn;

}Sqlist;

voidf(Sqlista){

inti;

if(a.n<=0)return;

for(i=0;i<(a.n)/2;i++){

if(a.data[i]!

=a.data[a.n-i]){

printf("No");

return;

}

printf("Yes");

}

}

voidmain(){

Sqlists;

printf("输入n:

");

scanf("%d",&s.n);

printf("输入字符串:

");

scanf("%s",s.data);

f(s);

}

解法2:

形参是指针变量,实参是结构变量地址值

voidf(Sqlist*a){

inti;

if(a->n<=0)return;

for(i=0;i<(a->n)/2;i++)

if(a->data[i]!

=a->data[a->n-i-1]){

printf("No");

return;

}

printf("Yes");

}

voidmain(){

Sqlists;

printf("inputn:

");

scanf("%d",&(s.n));

printf("inputdata:

");

scanf("%s",s.data);

f(&s);

}

解法3:

类似解法2,为指针变量定义了类型List

#include

#defineMAXLENGTH100

typedefstructsqlist*List;

typedefstructsqlist{

chardata[MAXLENGTH];

intn;

}Sqlist;

voidf(Lista){

inti;

if(a->n<=0)return;

for(i=0;i<(a->n)/2;i++)

if(a->data[i]!

=a->data[a->n-i-1]){

printf("No");

return;

}

printf("Yes");

}

voidmain(){

Sqlists;

printf("inputn:

");

scanf("%d",&(s.n));

printf("inputdata:

");

scanf("%s",s.data);

f(&s);

}

3、阅读下列程序,判断它是用什么方法实现排序(升序)的?

并完善下列程序。

#include

voidbubble(int[],int);

main(){

intarray[]={55,2,6,4,32,12,9,73,26,37};

intsize=sizeof(array)/sizeof(int);

bubble(_array,10___);

}

voidbubble(inta[],intsize){

inti,temp;

intend_____=0__________;

intpass=1;

//=======================

while(!

end&&pass

end=1;

for(i=0,i

if(—a[i]>a[i+1]—){

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

end=___0__________;

}

__pass++__________________;

}

//=======================

for(i=0;i

printf("%d",a[i]);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1