2018年10月高等教育自学考试《数据结构》试题02331

更新时间:2023-08-06 08:32:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2018年10月高等教育自学考试《数据结构》试题

课程代码:02331

一、单项选择题

1.下列数据结构中,逻辑结构不同的是

A.线性表B.栈C.队列D.二叉树

2.将16个数据元素的线性表按顺序存储方式存储在数组中,若第一个元素的存储地址是1000,第6个元素的存储地址是1040,则最后一个元素的存储地址是

A.1112 B.1120 C.1124 D.1128

3.设栈的初始状态为空,元素1,2,3,4,5依次入栈,不能得到的出栈序列是

A.1,2,3,4,5 B.4,5,3,2,1

C.1,2,5,4,3 D.1,2,5,3,4

4.设指针变量p指向非空单链表中的结点,next是结点的指针域,则判断p所指结点为尾结点前一个结点的逻辑表达式中,正确的是

A.p->next!=NULL&&p->next->next->next==NNULL

B.p->next!=NULL&&p->next->next==NULL

C.p->next->next==NULL

D.p->next==NULL

5.已知广义表LS=(((a,b,c),d),(e,(f,8),(h,i))),LS的深度是

A.2 B.3 C.4 D.5

6.己知一棵完全二叉树T的第5层上共有5个叶结点,则T中叶结点个数最少是A.5 B.8 C.10 D.27

7.已知二叉树T的前序遍历序列为a,b,c,e,d,中序遍历序列为c,e,b,d,a,则T 的后序遍历序列为

A.c,e,d,b,a B.d,e,c,b,a C.e,c,d,b,a D.e,c,b,a,d 8.有向图G有n个顶点和e条边,G保存在邻接矩阵M中,M中0与1的个数差是A.n(n+1)/2-e B.n(n+1)/2-2e C.n×n-e D.n×n-2e 9.有向图G中所有顶点的度数之和是24,则G中弧的数量是

A.10 B.12 C.14 D.16

10.设有向图G含有/1个顶点、e条边,使用邻接表存储,对G进行深度优先搜索遍历算法的时间复杂度是

A.O(n) B.O(e) C.O(n+e) D.O(n×e)

11.对数据序列(26,14,17,12,7,4,3)采用二路归并排序进行升序排序,两趟排序后,得到的排序结果为

A.14,26,17,12,4,7,3 B.12,14,17,26,3,4,7

C.14,26,12,17,3,4,7 D.14,26,12,17,3,7,4

12.下列选项中,不稳定的排序方法是

A.希尔排序B.归并排序C.直接插入排序D.冒泡排序

13.一组记录的关键字为(35,48,47,23,44,88),利用堆排序算法进行降序排序,建立的初始堆为

A.23,35,48,47,44,88 B.23,35,47,48,44,88

C.35,23,47,48,44,88 D.35,23,47,44,48,88

14.一棵二叉排序树中,关键字n所在结点是关键字m所在结点的孩子,则

A.n一定大于m B.n一定小于m

C.n一定等于m D.n与m的大小关系不确定

15.设散列表长m=16,散列函数H(key)=key%15。表中已保存4个关键字:addr(18)=3,addr(35)=5,addr(51)=6,addr(22)=7,其余地址均为开放地址。存储关键字36时存在冲突,采用线性探测法来处理。则查找关键字36时的探查次数是

A.1 B.2 C.3 D.4

二、填空题

16.数据项是具有独立含义的标识单位。

17.指针p和q分别指向单链表l中的两个相邻结点,即q->next=p。若要在q所指结点后插入指针r所指结点,则执行的语句是r->next=p;。

18.递归算法设计中的最小子问题称为递归的。

19.广义表((a,b),(c,d),e,(f,(g,h)))的表尾是。

20.已知二叉树的前序遍历序列和后序遍历序列,则对应的二叉树确定。

21.如果有向无环图G中仅有一个顶点的入度为0,若要求G的拓扑序列不唯一,则G中必须存在一个出度至少为的顶点。

22.将森林T转换为一棵二叉树T1,在T中结点A是结点B的右邻的兄弟(下一个兄弟),则在T1中,A是B的。结点。

23.对含n个元素的数据序列采用快速排序算法进行排序,平均时间复杂度是。

24.散列存储中,常用的解决冲突的方法有开放地址法和两大类。

25.假设顺序存储的有序表R含有8个关键字,进行二分查找时,平均查找长度为。

三、简答题

26.设电文字符集是{e1,e2,e3,e4,e5},各字符出现的次数分别为{36,13,26,18,23)。现要为该字符集设计哈夫曼编码。请回答下列问题。

(1)给出构造的哈夫曼树。

(2)给出各字符的哈夫曼编码。

(3)计算电文编码总长。

27.已知图G采用邻接矩阵存储,邻接矩阵如题27图所示。

(1)根据邻接矩阵画出图G。

(2)根据图G写出从顶点A开始图G的1个深度优先搜索遍历序列。

(3)根据图G写出从顶点A开始图G的1个广度优先搜索遍历序列。

28.有数据序列(12,17,05,10,20,24,45,11,10,12),使用希尔排序方法将其排成升序序列。请回答下列问题。

(1)分别写出增量为3和1的希尔排序结果。

(2)计算第一趟希尔排序中数据元素之间的总交换次数(两个元素之间的交换记1次)。

29.设有二叉排序树T如题29图所示。现需在T中删除结点e,请回答下列问题。

(1)画出删除后的二叉排序树(仅需画出一棵)。

(2)在你实现的删除过程中,指针域更新的次数是多少?

四、算法阅读题

30.顺序表类型定义如下:

//define ListSize 100

typedef struct {

int data[ListSize];

int length;

} SeqList;

阅读下列程序,并回答问题。

int partmin(SeqList *SL1, SeqList *SL2)

{ iht minlength, minvalue, k=0;

minlength = SL2->length;

minvalue = SL2->data[0];

while( k < minlength ) {

if( SLl->data[k] < SL2->data[k] && SLl->data[k]<minvalue )

minvalue = SL1->data[k];

else if( SL2->data[k]<minvalue )

minvalue = SL2->data[k];

k++;

return minvalue;

}

int f30( SeqList *SL1, SeqList *SL2 )

{

if( SL1->length > SL2->length) return partmin( SL1, SL2 );

else return partmin( SL2, SL1 );

}

(1)若SL1->data中的数据为(15,14,25,8,-28,37,126,56,34),SL2->data中的数据为(12,7,-33,15,39,24,42,13),则调用函数t30(&SL1,&SL2)后的返回值是什么?

(2)该函数的功能是什么?

31.二叉树的存储结构类型定义如下:

typedef char DataType;

typedef struet node

{ DataType data; //data 是数据域

struet node * lehild, * rehild; // 分别指向左右孩子

}BinTNode;

typedefBinTNode * BinTree;

阅读下列程序,并回答问题。

void f31 ( BinTree T )

( if( T!=NULL) {

t31( T->rchild );

printf( '%0 ", T->data );

f31 ( T->lchild );

}

return;

}

(1)设二叉树T如题31图所示,给出执行f31(T)的输出结果。

(2)给出该算法的时间复杂度。

32.待排序记录的数据类型定义如下:

#define MAXSIZE 100

typedefint KeyType;

typedef street {

KeyType key;

} RecType;

typedef RecType SeqList [MAXSIZE];

下列函数实现顺序表的直接插入排序,请填上适当内容使算法完整。void f32( SeqList R, int n)

int i,j;

RecType temp;

for (i=l; i<= (1) ;i++) {

temp = R[i];

j=i;

while (j > 0 && temp.key < R[j-1 ].key ) {

R[j] = R[j-1];

(2) ;

}

(3) ;

}

}

33.二叉树的存储结构类型定义如下:

typedef int DataType;

typedef struct node

{

DataType key; //data是数据域

street node * lchild, * rchild; //分别指向左右孩子

}BinTNode;

typedefBinTNode * BinTree;

阅读下列程序,并回答问题。

void f33( BinTree root, int left, int right )

{

if(root=NULL) return;

f33( root->lehild, left, fight );

if( root->key >= left && root->key<right ) printf( "%d ", root->key );

f33( root->rehild, left, right );

}

(1)设二叉树T如题33图所示,bt是指向根结点的指针。给出执行f33和(bt,14,30)的输出结果。

(2)给出该函数的功能。

五、算法设计题

34.已知n个单链表的表头指针保存在数组A中,单链表中的结点类型及数组类型定义如下,存储形式如题34图所示。

#define MAXSIZE 100

typedef int DataType;

typedef struct node

{ DataType data; //data是数据域

stmct node *next; //指向下一结点的指针

}Node;

typedefNode * SeqList [MAXSIZE];

试设计算法,在多个链表中查找值为key的数据元素,查找成功返回1,查找失败返回0。函数原型为int f34(SeqList A, int n,int key)。

本文来源:https://www.bwwdw.com/article/2uum.html

Top