四川自考网 > 历年真题 > 2018年4月四川自考02331《数据结构》真题
2018年4月四川自考02331《数据结构》真题
一、单项选择题(本大题共15小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.数据结构不包含的内容是( )
A.数据的元素来源
B.数据的逻辑结构
C.数据的存储结构
D.对数据施加的操作
2.下列选项中,属于逻辑结构的是( )
A.循环队列
B.二叉树
C.散列表
D.邻接表
3.下列选项中,属于顺序存储结构优点的是( )
A.插入运算方便
B.删除运算方便
C.存储密度大
D.方便存储各种逻辑结构
4.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则下列存储结构中,最节省运算时间的是( )
A.单链表
B.仅有头指针的单循环链表
C.双向链表
D.仅有尾指针的单循环链表
5.用不带头结点的单链表存储队列,在进行删除运算时( )
A.仅修改头指针
B.仅修改尾指针
C.头、尾指针一定都要修改
D.头、尾指针可能都要修改
6.二维数组M,行下标取值范围为0~8,列下标取值范围为1~10,若按行优先存储时,元素M[8][5]的存储地址为ar,则按列优先存储时,地址ar存储的数组元素应( )
A.M[8]5]
B.M[5]8]
C.M[3]10]
D.M[0]9]
7.根据二叉树的定义,3个结点构成的二叉树的树型有( )
A.2种
B.3种
C.4种
D.5种
8.一棵有序树可转换为一棵二叉树,树的后序遍历对应二叉树的( )
A.前序遍历
B.中序遍历
C.后序遍历
D.以上都不对
9.若图G的邻接表中有奇数个表结点,则G是( )
A.含奇数个顶点的图
B.无向图
C.含偶数个顶点的图
D.有向图
10.若用邻接矩阵存储有向图,矩阵主对角线以下的元素均为零,则关于该图拓扑排序序列的结论是( )
A.存在,且唯一
B.存在,且不唯
C.存在,可能不唯一
D.无法确定是否存在
11.如果无向图G的最小生成树T中含有边(a,b)和(a,c),则下列选项中,一定不在T中的边是( )
题11图
A.(b,c)
B.(b,d)
C.(c,d)
D.(c,e)
12.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上的是( )
A.插入排序
B.希尔排序
C.归并排序
D.堆
13.若数据元素序列11,13,15,7,8,9,23,2,5是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法是( )
A.冒泡排序
B.插入排序
C.选择排序
D.归并排序
14.线性表采用顺序存储或链式存储,对其进行查找的方法应是( )
A.顺序查找
B.二分查找
C.散列查找
D.索引查找
15.设有序表为(1,3,9,12,32,41,45,62,75,77,82),采用二分查找法查找关键字75,查找过程中关键字之间的比较次数是( )
A.1
B.2
C.3
D.4
二、填空题(本大题共10小题,每小题2分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。
11.在数据结构中,从逻辑上可以把数据结构分为线性结构和_________。
12.为便于实现单链表的插入及删除运算,需要在单链表中增加一个结点,该结点称为_________。
13.在二维数组A[10][8]中,每个数组元素占用4个存储单元,则数组A需要的存储单元个数是_________。
14.对长度为1的广义表A,若有 Head(A)=Tail(A),则A=_________。
15.设高为h的二又树T中只有度为0和2的结点,则T包含的结点数最多为_________。
16.一个连通图的_________是包含图中所有顶点的极小连通子图。
17.无向图G中含7个顶点,顶点间的边是随机设置的,为保证图G在任何情况下都是连通的,则需要的边数最少是_________。
18.求单源最短路径的迪杰斯特拉( Dijkstra)算法是按照路径_________不减的次序求出各条路径的。
19.一组记录的关键字为(45,53,18,49,36,76,13,97,36,32),利用快速排序方法对其进行排序,选择45为基准,一次性划分后的结果为_________。
110.对箱排序的改进和推广的排序算法是_________。
三、解答题(本大题共4小题,每小题5分,共20分)
21.两个栈共享数组空间data[m](定义如下),它们的栈底分别设在数组的两端(初始化后topl=-1,top2=m).typedef struct{DataType data[m];int top1, top2;}SeqStack; 回答下列问题。(1)编写判断栈满的函数 int stackfull( SeqStack *s);(2)编写进栈函数 void push( SeqStack *s, int si, DataType x); 其中,si取值为0、1,分别表示栈底为0或m-1的栈。
22.已知二叉树T中含有元素A,B,C,D,E,F,G,H,T的前序遍历序列、中序遍历序列和后序遍历序列如下,其中符号____表示未知元素。试写出①到⑩所代表的正确元素值。前序遍历序列 A B D ① E F G ②中序遍历序列 ③ B A ④ C G F ⑤后序遍历序列 ⑥ ⑦ ⑧ ⑨ H F C ⑩
23.设图G如题28图所示 题28图 回答下列问题。
(1)图G是否是有向无环图?(2)给出图G所有的拓扑排序序列。24.设关键字序列为:53,15,72,52,48,67,63,23。已知散列表地址空间为0~11,散列函数为H(k)=kmod11,采用线性探查再散列法解决冲突。(1)将所给关键字数据依次填入该散列表中;(2)计算等概率下查找成功的平均查找长度。
四、算法阅读题(本大题共4小题,每小题5分,共20分)
31.已知队列的基本操作定义如下,请在空白处填写适当的语句,完成指定的功能。 #define QueueSize 100typedef struct { //队列定义 char data[QueueSize]; int front, rear; } CirQueue; CirQueue Q;void Init Queue( CirQueue *Q) //队列初始化{ Q->front=Q->rear=0;;} int Queue Empty( CirQueue *Q) //判队列是否空{ return ____(1)____;}int Queue Full( CirQueue * Q) //判队列是否满{ return(Q->rear+ 1)% QueueSize==Q->front; } char EnQueue( CirQueue *Q, char c) ///入队操作{ if (QueueFulk(Q)) return ‘’; //^操作失败 else { Q->data[ Q->rear]=c; Q->rear=____(2)____; retum c; //操作成功 }} char DeQueue(CirQueue *Q) //出队列操作{ char x; if( Queue Empty(Q)) return ‘ ’; //操作失败 else { x=Q->data[[Q->font]; O->front=____(3)____; retum x; //操作成功 }}
32.程序f31是将输入的m行n列的二维数组a变换为三元组表形式存储在数组b中。请在空白处填上适当内容将算法补充完整。#define MAXSIZE 100typedef int DataType;typedef struct { int i, j; //1非零元素行列下标 Data Type v; //非零元素值} TriTupleNode;typedef struct { TriTupleNode data[MAXSIZE]; //存储三元组数组 int m, n, t; //m:矩阵的行,n:矩阵的列,t非零元素数量} TSMatrix; void f31(TSMatrix *b, int*a, int m, int n) //将m行n列的矩阵a变换为三元组表形式存储在b中{ int i, j, k=0; for(i=0; i<m;i++); for(j=0; j<a;j++) { b->data k].i=i; b->data k].j=j; b->data[k].v=____(1)____; ____(2)____; } b->m=m; b->n=n; b->t=____(3)____;}
33.已知二叉树T如题32图所示。
阅读程序f32,写出执行f32(T)的输出结果。typedef char DataTypetypedef struct node{ DataType data; //data是数据域struct node * lchild, * rchild; //分别指向左右孩子} BinTNode;typedef BinTNode * BinTree;void f32( BinTree bt){ if(bt!=NULL) { f32(bt->rchild); printf(“%c”, bt->data); f32(bt->lchild); }}执行结果:34.阅读程序,写出执行结果。void f33(int a[], int n){ int i; for(i=(n-1)/2; i>=0; i--) Sift(a, i, n-1);} void Sift( inta[], int i, int h) { int j, temp *a[i]; j=2*i+1; while(j<=h){ if((j<h&&a[j]<a[j+1]) j++; if( temp=>=a[j]) break; a[i]=a[j]; i=j; j=2*i+1;} a[i]=temp;}int main(){ int i, a[10]={10,20,5,23,25,62,21,1,32,39}; f33(a,10); for(i=0; i<10; i++) printf(“%d,”,a[i]); printf(“ ”); return 0;}执行结果:
五、算法设计题(本大题共1小题,共10分)
41.已知带有头结点的单链表定义如下:typedef struct node{ char ch; struct node *next;} ListNode;typedef ListNode *LinkList;请编写函数int f34( LinkList h, char string[]);根据输入的字符串,建立不含重复字符的链表
猜你喜欢
- 2022-01-11 2021年10月四川自考04729《大学语文》真题
- 2022-01-11 2021年10月四川自考03708《中国近现代史纲要》真题及答案
- 2022-01-11 2021年10月四川自考03706《思想道德修养与法律基础》真题及答案
- 2022-01-11 2021年10月四川自考03709《马克思主义基本原理概论》真题级答案
- 2022-01-11 2021年10月四川自考00015《英语(二)》真题答案及评分参考
- 2022-01-11 2021年10月四川自考00015《英语(二)》真题
自考微信公众号
扫一扫上方二维码