数据结构(代码02331)2009年1月试题及答案

数据结构(代码02331)2009年1月试题及答案
数据结构(代码02331)2009年1月试题及答案

全国2009年1月高等教育自学考试

数据结构试题

课程代码:02331

一、单项选择题(本大题共15小题,每小题2分,共30分)

在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。

1.下列程序段的时间复杂度为( )9

s=0;

for(i=1;i

for(j=1;j

s+=i*j;

A.O(1)

B.O(n)

C.O(2n)

D.O(n2)

2.假设某个带头结点的单链表的头指针为head,则判定该表为空表的条件是( )22

A.head==NULL;

B.head->next==NULL;

C.head!=NULL;

D.head->next==head;

3.栈是一种操作受限的线性结构,其操作的主要特征是( )32

A.先进先出

B.后进先出

C.进优于出

D.出优于进

4.假设以数组A[n]存放循环队列的元素,其头、尾指针分别为front和rear。若设定尾指针指向队列中的队尾元素,

头指针指向队列中队头元素的前一个位置,则当前存于队列中的元素个数为( )

A.(rear-front-1)%n

B.(rear-front)%n

C.(front-rear+1)%n

D.(rear-front+n)%n

5.判断两个串大小的基本准则是( )52

A.两个串长度的大小

B.两个串中首字符的大小

C.两个串中大写字母的多少

D.对应的第一个不等字符的大小

6.二维数组A[4][5]按行优先顺序存储,若每个元素占2个存储单元,且第一个元素A[0][0]的存储地址为1000,

则数组元素A[3][2]的存储地址为( )60

A.1012

B.1017

C.1034

D.1036

7.高度为5的完全二叉树中含有的结点数至少为( )72

A.16

B.17

C.31

D.32

8.已知在一棵度为3的树中,度为2的结点数为4,度为3的结点数为3,则该树中的叶子结点数为( )

A.5

B.8

C.11

D.18

9.下列所示各图中是中序线索化二叉树的是( )81A

10.已知含6个顶点(v 0,v 1,v 2,v 3,v 4,v 5)的无向图的邻接矩阵如图所示,则从顶点v 0出发进行深度优先遍历可能得到的顶点访问序列为( )108 A.(v

0,v 1,v 2,v 5,v 4,v 3) B.(v 0,v 1,v 2,v 3,v 4,v 5) C.(v 0,v 1,v 5,v 2,v 3,v 4) D.(v 0,v 1,v 4,v 5,v 2,v 3)

11.如图所示有向图的一个拓扑序列是( )

A.ABCDEF

B.FCBEAD

C.FEDCBA

D.DAEBCF

12.下列关键字序列中,构成大根堆的是( ) A.5,8,1,3,9,6,2,7 B.9,8,1,7,5,6,2,33 C.9,8,6,3,5,l ,2,7 D.9,8,6,7,5,1,2,3

13.对长度为15的有序顺序表进行二分查找,在各记录的查找概率均相等的情况下,查找成功时所需进行的关键字比较次数的平均值为( )172 A.

15

39 B.

15

49 C.

1551 D.15

55 14.已知一个散列表如图所示,其散列函数为H(key)=key %11,采用二次探查法处理冲突,则下一个插入的关键字49的地址为( )d 197

15.数据库文件是由大量带有结构的( )206 A.记录组成的集合 B.字符组成的集合 C.数据项组成的集合 D.数据结构组成的集合

二、填空题(本大题共10小题,每小题2分,共20分)

请在每小题的空格中填上正确答案。错填、不填均无分。

16.估算算法时间复杂度时考虑的问题规模通常是指算法求解问题的_________。输入量 8 17.在双向循环链表中插入一个新的结点时,应修改_________个指针域...

的值。4 28 18.若进栈序列为a ,b ,c ,且进栈和出栈可以穿插进行,则可能出现_________个不同的出栈序列。5 19.链串的结点大小定义为结点的_________中存放的字符个数。数据域 54 20.广义表(a ,(d ,(c)))的深度为_________。3 67

21.在含有3个结点a ,b ,c 的二叉树中,前序序列为abc 且后序序列为cba 的二叉树有_________棵。4

22.若用邻接矩阵表示有向图,则顶点i的入度等于矩阵中_________。第i列非零元素的个数107

23.对关键字序列(15,18,11,13,19,16,12,17,10,8)进行增量为5的一趟希尔排序的结果为_________。 15,12,11,10,8,16,18,17

24.索引顺序查找的索引表由各分块中的最大关键字及各分块的_________构成。起始位置173

25.VSAM文件的实现依赖于操作系统中的_________存取方法的功能。分页 215

三、解答题(本大题共4小题,每小题5分,共20分)

的8×8矩阵,矩阵元素都是整型量(次对角线以上的元素都是0)。

若将上述矩阵中次对角线及其以下的元素按行优先压缩存储在一维数组B中,请回答下列问题:

(1)B数组的体积至少是多少?

(2)若a18存储在B[0]中,a56存储在B[k]中,则k值为多少?

(1) (1+8)*8/2=36 存放次对角线以上的零为37

(2) 12

27.对关键字序列(5,8,1,3,9,6,2,7)按从小到大进行快速排序。

(1)写出排序过程中前两趟的划分结果;

(2)快速排序是否是稳定的排序方法?

(1)

第一趟划分结果;(2,3,1),5,(9,6,8,7)

第二趟划分结果;(1,2,3),5,(9,6,8,7)

第三趟划分结果;(1,2,3),5,(7,6,8,9)

第四趟划分结果; 1,2,3,5,6,7,8,9

第一趟划分过程

↑j

↑i

(5,8,1,3,9,6,2,7) 1.(2,8,1,3,9,6,5,7) 2.(2,5,1,3,9,6,8,7) 3.(2,3,1,5,9,6,8,7) 4.(2,3,1,5,9,6,8,7)

第二趟划分过程

(2,3,1,5,9,6,8,7) 1.(1,2,3,5,7,6,8,9)

(2)非稳定

↑j

↑i 第一趟:(2,3,1)5 (9,6,8,7)第二趟: 1,2,3,5 (9,6,8,7)第三趟:1,2,3,5,(7,6,8),9

第四趟:1,2,3,5,6,7,8,9

28.假设通信电文使用的字符集为{a,b,c,d,e,f,g,h},各字符在电文中出现的频度分别为:7,26,2,28,13,10,3,11,试为这8个字符设计哈夫曼编码。要求:

(1)画出你所构造的哈夫曼树(要求树中左孩子结点的权值不大于右孩子结点的权值);

(2)按左分支为0和右分支为1的规则,分别写出与每个字符对应的编码。

(1)

(2)

29.已知3阶B—树如图所示,

非根【1,2】P184

根【1,2】

(1)画出将关键字6插入之后的B—树;

(2)画出在(1)所得树中插入关键字2之后的B—树。

四、算法阅读题(本大题共4小题,每小题5分,共20分)

30.假设以带头结点的单链表表示线性表,单链表的类型定义如下:

typedef int DataType;

typedef struct node {

DataType data;

struct node * next;

} LinkNode, * LinkList;

阅读下列算法,并回答问题:

(1)已知初始链表如图所示,画出执行f30(head)之后的链表;

题30图

(2)简述算法f30的功能。

void f30( LinkList head)

{ LinkList p,r, s;

if (head - > next) {

r = head - > next;

p = r->next;

r - > next = NULL;

while (p) {

s =p;

p = p->next;

if ( s - > data% 2 = = 0) {

s - > next = head - > next;

head - > next = s;

} else {

s - > next = r - > next;

r->next = s;

r =s;

}

}

}

}

(1)

(2)

31.假设以二叉链表表示二叉树,其类型定义如下:

typedef struct node { DataType data;

struct node * lchild, * rchild; //左右孩子指针 } * BinTree ;

阅读下列算法,并回答问题:

(1)已知以T 为根指针的二叉树如图所示, 写出执行f31(T)之后的返回值; (2)简述算法f31的功能。 int f31 ( BinTree T) { int d;

if ( ! T) return 0;

d = f31 ( T - > lchild) + f31 ( T - > rchild) ; if (T - > lchild && T - > rchild) return d + 1 ; else

return d; (1)3

(2)统计度为2的结点个数 32.设有向图邻接表定义如下:

typedef struct {

VertexNode adjlist[ MaxVertexNum ] ; int n ,e ; //图的当前顶点数和弧数 }ALGraph ; //邻接表类型 其中顶点表结点VertexNode 边表结点EdgeNode 结构为: 阅读下列算法,并回答问题:

(1)已知某有向图存储在如图所示的邻接 表G 中,写出执行f32(&G)的输出; (2)简述算法f32的功能。 int visited[ MaxNum ];

void DFS(ALGraph * G, int i) { EdgeNode * p;

visited [ i ] = TRUE ;

if (G - > adjlist[ i]. firstedge = = NULL) printf( "% c ", G - > adjlist[ i]. vertex); else {

p = G - > adjlist[ i]. firstedge; while (p ! = NULL) {

if ( ! visited[p -> adjvex] ) DFS( G, p - > adjvex) ; p = p->next;

} } }

void f32 ( ALGraph * G) { int i;

for (i = 0; i < G->n; i ++) visited [ i ] = FALSE ; for (i = 0; i < G->n; i++)

if ( ! visited[i] ) DFS(G, i) ; }

(1)ABECD

(2)图的深度优先搜寻

33.下列算法f33的功能是对记录序列进行双向冒泡排序。算法的基本思想为,先从前往后通过交换将关键字最大的记录移动至后端,然后从后往前通过交换将关键字最小的记录移动至前端,如此反复进行,直至整个序列按关键字递增有序为止。请在空缺处填入合适的内容,使其成为完整的算法。

#define MAXLEN 100 typedef int KeyType; typedef struct { KeyType key;

InfoType otherinfo; } NodeType ;

typedef NodeType SqList[ MAXLEN ]; void f33 ( SqList R, int n) { int i,j,k; NodeType t; i =0; j =n-l;

while (i < j) {

for ( (1) ) k=i;k

if (R[k].key > R[k +l].key) {

t = R[k];

R[k] = R[k +1];

R[k +1] = t;

}

j--;

for (k =j; k > i; k -- )

if ( (2) ) { R[k].key < R[k-l].key

t = R[k];

R[k] = R[k-1];

R[k-1] = t;

}

(3) ; i++

}

}

(1)

(2)

(3)

五、算法设计题(本大题10分)

34.假设以带头结点的单链表表示线性表,单链表的类型定义如下:

typedef int DataType;

typedef struct node {

DataType data;

struct node * next;

} LinkNode, * LinkList;

编写算法,删除线性表中最大元素(假设最大值唯一存在)。函数原型为:void f34(LinkList head)

{

LinkNode *p,*max,*q;

P=head->next;

max=head->next;

while(P)

{

P=p->next;

If(p->data>max->data) max=p;

}

x=max->data;

}

}

delete_L(Lnode *L,int i)

{Lnode *p,*q;

int j;

Elemtype x;

P=L;j=0;

While(p->next!=null&&j<=i-1)

{p=p->next;j++;}

If(! P->next||i<1)

{ Printf("\n删除位置错误!");return(-1);}

Else{q=p->next;x=q->data;

P->next=q->next;free(q);

Return(x);

}

}/*delete_L*/

数据结构课程实验指导书

数据结构实验指导书 一、实验目的 《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: 1)理论艰深,方法灵活,给学习带来困难; 2)内容丰富,涉及的知识较多,学习有一定的难度; 3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度; 根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。 课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面: (1)加深对课堂讲授内容的理解 实验是对学生的一种全面综合训练。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实验题中的问题比平时的习题复杂得多,也更接近实际。实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变" 活" ,起到深化理解和灵活掌握教学内容的目的。 不少学生在解答习题尤其是算法设计时,觉得无从下手。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出

现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 (2) 培养学生软件设计的综合能力 平时的练习较偏重于如何编写功能单一的" 小" 算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。 通过实验使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在需求分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。 (3) 熟悉程序开发环境,学习上机调试程序一个程序从编辑,编译,连接到运行,都要在一定的外部操作环境下才能进行。所谓" 环境" 就是所用的计算机系统硬件,软件条件,只有学会使用这些环境,才能进行 程序开发工作。通过上机实验,熟练地掌握程序的开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆语法错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,尽快掌握程序调试方法是非常重要的。分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序,运行程序并得到正确结果。 二、实验要求 常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实验题目的远不如从实际问题中的复杂程度度高,但为了培养一个软件工作者所应具备的科学工作的方法和作风,也应遵循以下五个步骤来完成实验题目: 1) 问题分析和任务定义 在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。本步骤强调的是做什么?而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的

数据结构题目及c语言代码

目题程设计《数据结构》课)C语言程序实现采用():3选王(学时目 题1:猴子一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m 的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0) {

pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf(\ %d, pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next;

自考《数据结构》真题和答案

2016年10月高等教育自学考试全国统一命题考试 数据结构试卷 (课程代码02331) 本试卷共7页,满分l00分,考试时间l50分钟。 考生答题注意事项: 1.本卷所有试题必须在答题卡上作答。答在试卷上无效,试卷空白处和背面均可作草稿纸。2.第一部分为选择题。必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。3.第二部分为非选择题。毖须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。4.合理安排答题空间,超出答题区域无效。 第一部分选择题(共30分) 一、单项选择题(本大题共l5小题,每小题2分,共30分> 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题 卡”的相应代码涂黑。错涂、多涂或未涂均无分。 1.下列选项中,不属于线性结构特征的是 A.数据元素之间存在线性关系 B.结构中只有一个开始结点 C.结构中只有一个终端结点 D.每个结点都仅有一个直接前趋 2.设l7个元素的顺序表中,若将第个元素e移动到第个位置,

不改变除e外其他元素之间的相对次序,则需移动的表中元素个数是 3.若用一个大小为7的数组作为循环队列的存储结构,且当前rew和盘0nt的值分别 为2和4,在此之前的操作是从队列中删除了一个元素及加入两个元素,请问这3 个操作之前rear和矗0nt的值分别是 A.0和l B.0和3 C.3和6 D.4和5 4.已知广义表LS=(((a)),((b,(c)),(d,(e,f))),0),LS的长度是 A.2 B.3 C.4 D. 5 5.一棵完全二叉树T的全部k个叶结点都在同一层中且每个分支结点都有两个孩子结点。于中包含的结点数是 A.k B. 2k-1 C.k2 D.2k-1 6.如果某二叉树的前序遍历序列为abced,中序遍历序列为cebda,则该二叉树的后序 遍历序列是 A.cedba B.decba C.ecdba D.ecbad 7.一个森林有m棵树,顶点总数为n,则森林中含有的总边数是 A.m B. n-l C.n-m D.n+m 8.设图的邻接矩阵A如下所示。各顶点的度依次是

02331数据结构200710

2007年10月高等教育自学考试全国统一命题考试 数据结构试卷 (课程代码2331) 本试卷共12页,满分100分;考试时间150分钟。 一、单项选择题(本大题共15小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.下面程序段的时间复杂度为 A.O(1) B.O(log n) C.O(n) D.O(n2) 2.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在8所指结点之后插入上述链表应执行的语句为【】 3.在计算机内实现递归算法时所需的辅助数据结构是【】 A.栈B.队列 C.树D.图 4.假设以数组A[m]存放循环A[m]的元素。已知队列的长度为length,指针rear指向队尾元素的下一个存储位置。则队头元素所在的存储位置为【】 5.通常将链串的结点大小设置为大于l是为了【】 A.提高串匹配效率B.提高存储密度 C.便于插入操作D.便于删除操作 6.带行表的三元组表是稀疏矩阵的一种【】 A.顺序存储结构B.链式存储结构 C.索引存储结构D.散列存储结构 7.表头和表尾均为空表的广义表是【】 A.( ) B.( ( ) ) C.( ( ( ) ) ) D.( ( ),( ) ) 8.用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为【】A.n-1 B.n C.n+l D.2n 9.为便于判别有向图中是否存在回路,可借助于【】

A.广度优先搜索算法B.最小生成树算法 C.最短路径算法D.拓扑排序算法 10.连通网的最小生成树是其所有生成树中【】 A.顶点集最小的生成树B.边集最小的生成树 C.顶点权值之和最小的生成树D.边的权值之和最小的生成树 11.按排序过程中依据的原则分类,快速排序属于【】 A.插入类的排序方法B.选择类的排序方法 C.交换类的排序方法D.归并类的排序方法 12.下列关键字序列中。构成小根堆的是【】 A.{84,46,62,41,28,58,15,37} B.{84,62,58,46,4l,37,28,15} C.{15,28,46,37,84,41,58,62} D.{15,28,46,37,84,58,62,41} 13.在长度为32的有序表中进行二分查找时,所需进行的关键字比较次数最多为【】A.4 B.5 C.6 D.7 14.假设在构建散列表时,采用线性探测解决冲突。若连续插入的n个关键字都是同义词,则查找其中最后插入的关键字时,所需进行的比较次数为【】 A.n-1 B.n C.n+l D.n+2 15.散列文件也称为【】 A.顺序文件B.索引文件 C.直接存取文件D.间接存取文件 二、填空题(本大题共10小题,每小题2分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。 16.数据的逻辑结构描述数据元素之间的________________________,与存储方式无关。17.在一个长度为100的顺序表中删除第10个元素时,需移动________________________个元素。 18.队列的队尾位置通常是随着________________________操作而变化的。 19.两个空串联接得到的串的长度为________________________。 20.设对称矩阵A压缩存储在一维数组B中,其中矩阵的第一个元素a11存储在B[0],元素a52存储在B[11],则矩阵元素a36存储在B[________________________]中。 21.已知一棵哈夫曼树含有60个叶子结点,则该树中共有________________________个非叶子结点。 22.如图所示的有向图中含有________________________个强连通分量。 23.已知一组关键字为{15,36,28,97,24,78,47,52,13,86},其中每相邻两个关键字构成一个有序子序列。对这些子序列进行一趟两两归并的结果是

数据结构实验报告代码

线性表 代码一 #include "stdio.h" #include "malloc.h" #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { int * elem; int length; int listsize; }SqList; int InitList_Sq(SqList *L) { L->elem = (int*)malloc(LIST_INIT_SIZE*sizeof(int)); if (!L->elem) return ERROR; L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } int ListInsert_Sq(SqList *L, int i,int e) { int *p,*newbase,*q; if (i < 1 || i > L->length+1) return ERROR; if (L->length >= L->listsize) { newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof (int)); if (!newbase) return ERROR; L->elem = newbase; L->listsize += LISTINCREMENT; } q = &(L->elem[i-1]); //插入后元素后移for(p=&(L->elem[L->length-1]);p>=q;p--) *(p+1)=*p; *q=e; L->length++; return OK; } int ListDelete_Sq(SqList *L, int i, int *e) {

数据结构程序设计题目共29题

目录 题目1:设计一元多项式简单计算.................................. 错误!未定义书签。题目2:链表应用1 ....................................................... 错误!未定义书签。题目3:链表应用2 .......................... 错误!未定义书签。题目4:?通讯录 ............................ 错误!未定义书签。题目5:停车场管理系统....................... 错误!未定义书签。题目6:约瑟夫环............................ 错误!未定义书签。题目7:运动会分数统计....................... 错误!未定义书签。题目8:文学研究助手问题..................... 错误!未定义书签。题目9:银行业务模拟与离散事件模拟 ............ 错误!未定义书签。题目10:学生信息管理系统任务(用顺序表/链表).. 错误!未定义书签。题目11:文章编辑功能 ....................... 错误!未定义书签。题目12:实验室管理......................... 错误!未定义书签。题目13:二叉树的基本操作(建立、求二叉树树深度、遍历).错误!未定义 书签。 题目14:纸牌游戏任务 ....................... 错误!未定义书签。题目15:算术表达式求值...................... 错误!未定义书签。题目16:内部排序算法比较.................... 错误!未定义书签。题目17:哈夫曼树的构造和哈夫曼编码/译码 ....... 错误!未定义书签。题目18:构造可以使n个城市连接的最小生成树..... 错误!未定义书签。题目19:交通咨询系统中的最短路径............. 错误!未定义书签。题目20:集合的交、并、差运算................. 错误!未定义书签。题目21:长整数四则运算...................... 错误!未定义书签。题目22:机订票系统......................... 错误!未定义书签。题目23:图书管理系统 ....................... 错误!未定义书签。题目24:哈希表应用......................... 错误!未定义书签。题目25:模拟旅馆管理系统的一个功能——床位的分配与回收.错误!未定义 书签。 题目26:地图着色问题 ....................... 错误!未定义书签。题目27:俄罗斯套娃问题...................... 错误!未定义书签。题目28:扫雷.............................. 错误!未定义书签。题目29:用C语言设计一个日历系统............. 错误!未定义书签。

02331数据结构课后练习题

第1章概论 练习题 一、单项选择题 1.在数据结构中,从逻辑上可以把数据结构分为(B)A.紧凑结构和非紧凑结构B.线性结构和非线性结构 C.内部结构和外部结构D.动态结构和静态结构2.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为(D)A.顺序存储结构B.链式存储结构 C.索引存储结构D.散列存储结构 3.算法分析的两个主要方面是(B)A.正确性和简明性B.时间复杂性和空间复杂性 C.可读性和可维护性D.数据复杂性和程序复杂性4.线性表采用链式存储结构时,要求内存中可用存储单元地址(A)A.不一定连续的B.部分地址必须是连续的 C.必须是连续的D.一定是不连续的 5.算法指的是(C)A.计算机程序B.解决问题的计算方法 C.解决问题的有限运算序列D.排序算法 二、填空题 6.数据结构一般包括逻辑结构、存储结构和数据运算三个方面的内容. 7.数据的逻辑结构可分为线性结构、非线性结构两大类. 8.数据的存储结构(物理结构)一般可以用顺序存储结构、链式存储结构、索引存储结构及散列存储结构等四种存储方法表示. 9.在选用求解一个问题的算法时,除了首先考虑算法是“正确的”之外,还主要考虑执行算法所需要的时间、执行算法所需要的存储空间及算法应易于理解、易于编程、易于调试等三点。 10.设有一批数据元素,为了最快地存取某元素,宜用顺序结构存储,为了方便的插入一个元素,宜用链式结构存储. 三、应用题 设n为正整数,利用大“O”记号,写出下列各程序段的时间复杂度. 11.for (i = 1; i <= n; i++){ y = y + 1; for (j = 1; j <= 2 * n; j++) x = x + 1; } 分析:语句“y = y + 1;”执行n次,语句“x = x + 1;”各执行2 2n次,故该程序段的时间复杂度为O(2n).12.s = 0; while (n >= (s + 1) * (s + 1)) s = s + 1; 分析:语句“s = s + 1;.

数据结构实验一的源代码

#include #include typedef struct Node { int key;//密码 int num;//编号 struct Node *next;//指向下一个节点 } Node, *Link; void InitList(Link &L) //创建一个空的链表{ L = (Node *)malloc(sizeof(Node)); if (!L) exit(1); L->key = 0; L->num = 0; L->next = L; } void Creatlinklist(int n, Link &L) //初始化链表{ Link p, q; q = L; for (int i = 1; i <= n; i++) { p = (Node *)malloc(sizeof(Node)); if (!p) exit(1); scanf("%d", &p->key); p->num = i; L->next = p; L = p; } L->next = q->next; free(q); } Link Locate_m(Link &p, int m)//找到第m个 { Link q; for (int j = 1; jnext; q = p->next; m = q->key;

return q; } void Delete_m(Link &L, Link p, Link q)//删除第m个{ p->next = q->next; free(q); } void main() { Link L, p, q; int n, m; L = NULL; InitList(L);//构造出一个只有头结点的空链表 printf("请输入初始密码人数每个人的密码:\n"); scanf("%d", &m);//初始密码为m scanf("%d", &n);// Creatlinklist(n, L);//构建 p = L; for (int i = 1; i <= n; i++) { q = Locate_m(p, m);//找到第m个 printf("%d", q->num); Delete_m(L, p, q);//删除第m个 } system("pause"); }

数据结构经典题目及c语言代码.

《数据结构》课程设计题目 (程序实现采用C语言) 题目1:猴子选王(学时:3) 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0)

{ pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; }

最新自考02331数据结构试题及答案含评分标准资料

2018年10月高等教育自学考试全国统一命题考试 数据结构试卷 (课程代码02331) 本试卷共7页,满分l00分,考试时间l50分钟。 考生答题注意事项: 1.本卷所有试题必须在答题卡上作答。答在试卷上无效,试卷空白处和背面均可作草稿纸。2.第一部分为选择题。必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。3.第二部分为非选择题。必须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。 4.合理安排答题空间,超出答题区域无效。 第一部分选择题 一、单项选择题:本大题共l5小题,每小题2分,共30分。在每小题列出的备选项中 只有一项是最符合题目要求的。请将其选出。 1.下列数据结构中,逻辑结构不同的是 A.线性表 B.栈 C.队列 D.二叉树 2.将l6个数据元素的线性表按顺序存储方式存储在数组中,若第一个元素的存储地址是l000,第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 == NULL B.p->next!=NULL&&p->next->next—NULL C.p->next->next==NULL D.p->next—NULL 5.已知广义表LS=(((a,b,c),d),(e,(fg,(h i))),LS的深度是 A.2 B.3 C.4 D.5 6.已知一棵完全二叉树T的第5层上共有5个叶结点,则T中叶结点个数最少是 A.5 8.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有玎个顶点和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含有n个顶点、e条边,使用邻接表存储。对G进行深度优先搜索遍历算法的时间复杂度是 A.O(n) B.O(口) C.O(n+e) D.O(n×e) 11.对数据序列(26,14,17,12,7,4,3)采用二路归并排序进行升序排序,两趟排序后,得到的排序结果为 A.14,26,17,l2,4,7,3 B.12,l4,l7,26,3,4,7 C.14,26,12,l7,3,4,7 D.14,26,l2,l7,3,7,4

数据结构实验程序

顺序表的基本操作 #include using namespace std; typedef int datatype; #define maxsize 1024 #define NULL -1 typedef struct { datatype *data; int last; }sequenlist; void SETNULL(sequenlist &L) { L.data=new datatype[maxsize]; for(int i=0;i>https://www.360docs.net/doc/9d1329087.html,st; cout<<"请输入"<>L.data[i]; } int LENGTH(sequenlist &L) { int i=0; while(L.data[i]!=NULL) i++; return i; } datatype GET(sequenlist &L,int i) { if(i<1||i>https://www.360docs.net/doc/9d1329087.html,st) { cout<<"error1"<

int j=0; while(L.data[j]!=x) j++; if(j==https://www.360docs.net/doc/9d1329087.html,st) { cout<<"所查找值不存在!"<=maxsize-1) { cout<<"overflow"; return NULL; } else if(i<1||(i>https://www.360docs.net/doc/9d1329087.html,st)) { cout<<"error2"<=i-1;j--) L.data[j+1]=L.data[j]; L.data[i-1]=x; https://www.360docs.net/doc/9d1329087.html,st++; } return 1; } int DELETE(sequenlist &L,int i) { int j; if((i<1)||(i>https://www.360docs.net/doc/9d1329087.html,st+1)) { cout<<"error3"<

全国2012年10月自考数据结构(02331)试题及答案

全国2012年10月高等教育自学考试 数据结构试题 课程代码:02331 请考生按规定用笔将所有试题的答案涂、写在答题纸上。 选择题部分 注意事项: 1. 答题前,考生务必将自己的考试课程名称、姓名、准考证号用黑色字迹的签字笔或钢笔填写在答题纸规定的位置上。 2. 每小题选出答案后,用2B铅笔把答题纸上对应题目的答案标号涂黑。如需改动,用橡皮擦干净后,再选涂其他答案标号。不能答在试题卷上。 一、单项选择题(本大题共l5小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题 纸”的相应代码涂黑。错涂、多涂或未涂均无分。 1.一个算法的时间耗费的数量级称为该算法的 A.效率B.难度 C.可实现性D.时间复杂度 2.顺序表便于 A.插入结点B.删除结点 C.按值查找结点D.按序号查找结点 3.设带头结点的单循环链表的头指针为head,指针变量P指向尾结点的条件是 A.p->next->next==head B.p->next==head C.p->next->next==NULL D.p->next==NULL 4.设以数组A[0..m-1]存放循环队列,front指向队头元素,rear指向队尾元素的下一个位置,则当前队列中的元素个数为 A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m 5.下列关于顺序栈的叙述中,正确的是 A.入栈操作需要判断栈满,出栈操作需要判断栈空 B.入栈操作不需要判断栈满,出栈操作需要判断栈空 C.入栈操作需要判断栈满,出栈操作不需要判断栈空

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include >验目的 掌握顺序栈的基本操作:初始化栈、判栈空否、入栈、出栈、取栈顶数据元素等运算以及程序实现方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)分析问题的要求,编写和调试完成程序。 (3)保存和打印出程序的运行结果,并分析程序的运行结果。 3.实验内容 利用栈的基本操作实现一个判断算术表达式中包含圆括号、方括号是否正确配对的程序。具体完成如下:

(1)定义栈的顺序存取结构。 (2)分别定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈等)。 (3)定义一个函数用来判断算术表达式中包含圆括号、方括号是否正确配对。其中,括号配对共有四种情况:左右括号配对次序不正确;右括号多于左括号;左括号多于右括号;左右括号匹配正确。 (4)设计一个测试主函数进行测试。 (5)对程序的运行结果进行分析。 实验代码: #include < > #define MaxSize 100 typedef struct { ??? int data[MaxSize]; ??? int top; }SqStack; void InitStack(SqStack *st) 验目的 (1)进一步掌握指针变量的用途和程序设计方法。 (2)掌握二叉树的结构特征,以及链式存储结构的特点及程序设计方法。 (3)掌握构造二叉树的基本方法。 (4)掌握二叉树遍历算法的设计方法。 3.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)掌握一个实际二叉树的创建方法。 (3)掌握二叉链存储结构下二叉树操作的设计方法和遍历操作设计方法。 4.实验内容 (1)定义二叉链存储结构。

2021年自考02331数据结构重点总结最终修订

自考02331数据构造重点总结(最后修订) 第一章概论 1.瑞士计算机科学家沃思提出:算法+数据构造=程序。算法是对数据运算描述,而数据构造涉及逻辑构造和存储构造。由此可见,程序设计实质是针对实际问题选取一种好数据构造和设计一种好算法,而好算法在很大限度上取决于描述实际问题数据构造。 2.数据是信息载体。数据元素是数据基本单位。一种数据元素可以由若干个数据项构成,数据项是具备独立含义最小标记单位。数据对象是具备相似性质数据元素集合。 3.数据构造指是数据元素之间互有关系,即数据组织形式。 数据构造普通涉及如下三方面内容:数据逻辑构造、数据存储构造、数据运算 ①数据逻辑构造是从逻辑关系上描述数据,与数据元素存储构造无关,是独立于计算机。 数据逻辑构造分类:线性构造和非线性构造。 线性表是一种典型线性构造。栈、队列、串等都是线性构造。数组、广义表、树和图等数据构造都是非线性构造。 ②数据元素及其关系在计算机内存储方式,称为数据存储构造(物理构造)。 数据存储构造是逻辑构造用计算机语言实现,它依赖于计算机语言。 ③数据运算。最惯用检索、插入、删除、更新、排序等。 4.数据四种基本存储办法:顺序存储、链接存储、索引存储、散列存储 (1)顺序存储:普通借助程序设计语言数组描述。 (2)链接存储:普通借助于程序语言指针来描述。 (3)索引存储:索引表由若干索引项构成。核心字是能唯一标记一种元素一种或各种数据项组合。 (4)散列存储:该办法基本思想是:依照元素核心字直接计算出该元素存储地址。 5.算法必要满足5个准则:输入,0个或各种数据作为输入;输出,产生一种或各种输出;有穷性,算法执行有限步后结束;拟定性,每一条指令含义都明确;可行性,算法是可行。 算法与程序区别:程序必要依赖于计算机程序语言,而一种算法可用自然语言、计算机程序语言、数学语言或商定符号语言来描述。当前惯用描述算法语言有两类:类Pascal和类C。 6.评价算法优劣:算法"对的性"是一方面要考虑。此外,重要考虑如下三点: ①执行算法所耗费时间,即时间复杂性; ②执行算法所耗费存储空间,重要是辅助空间,即空间复杂性; ③算法应易于理解、易于编程,易于调试等,即可读性和可操作性。

数据结构上机实验线性表单链表源代码

#include template class LinearList { public: virtual bool IsEmpty()const=0; virtual int Length()const=0; virtual bool Find(int i,T& x)const=0; virtual int Search(T x)const=0; virtual bool Insert(int i,T x)=0; virtual bool Update(int i,T x)=0; virtual bool Delete(int i)=0; virtual void Output(ostream& out)const=0; protected: int n; }; #include "linearlist" template class SeqList:public LinearLisr { public: SeqList(int mSize); ~SeqList(){delete [] elements;} bool IsEmpty()const; bool Find(int i,T& x)const; int Length()const; int Search(T x)const; bool Insert(int i,T x); bool Update(int i,T x); bool Delete(int i); void Output(ostream& out)const; private: int maxLength; T *elements; }; template SeqList::SeqList(int mSize) { maxLength=mSize;

数据结构程序设计题目共29题

目录 题目1:设计一元多项式简单计算 (1) 题目2:链表应用1 (1) 题目3:链表应用2 (1) 题目4:通讯录 (2) 题目5:停车场管理系统............................................. 错误!未定义书签。题目6:约瑟夫环 (3) 题目7:运动会分数统计 (3) 题目8:文学研究助手问题 (3) 题目9:银行业务模拟与离散事件模拟 (4) 题目10:学生信息管理系统任务(用顺序表/链表).... 错误!未定义书签。题目11:文章编辑功能 .............................................. 错误!未定义书签。题目12:实验室管理.................................................. 错误!未定义书签。题目13:二叉树的基本操作(建立、求二叉树树深度、遍历).. (4) 题目14:纸牌游戏任务 (5) 题目15:算术表达式求值 (5) 题目16:内部排序算法比较 (5) 题目17:哈夫曼树的构造和哈夫曼编码/译码 (6) 题目18:构造可以使n个城市连接的最小生成树 (7) 题目19:交通咨询系统中的最短路径 (7) 题目20:集合的交、并、差运算 ................................ 错误!未定义书签。题目21:长整数四则运算 (7) 题目22:机订票系统.................................................. 错误!未定义书签。题目23:图书管理系统 (8) 题目24:哈希表应用 (8) 题目25:模拟旅馆管理系统的一个功能——床位的分配与回收 (9) 题目26:地图着色问题 (9) 题目27:俄罗斯套娃问题 (10) 题目28:扫雷 (11) 题目29:用C语言设计一个日历系统 (11)

02331数据结构2014年4 月份历年真题附答案

全国2014年4月高等教育自学考试 数据结构试题 课程代码:02331 本试卷满分100分,考试时间150分钟. 考生答题注意事项: 1.本卷所有试题必须在答题卡上作答。答在试卷上无效。试卷空白处和背面均可作草稿纸。 2.第一部分为选择题。必须对应试卷上的题号使用28铅笔将“答题卡”的相应代码涂黑。 3.第二部分为非选择题。必须注明大、小题号,使用0.5毫米黑色字迹签字笔作答。 4.合理安排答题空间。超出答题区域无效。 第一部分选择题 一、单项选择题(本大题共15小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其选出并将“答题纸”的相应代码涂黑。错涂、多涂或未涂均无分。 1.与数据存储结构无关 ..的概念是 A.栈 B.链表 C.顺序表 D.二叉链表 2.顺序表中有10个数据元素,若第一个元素的存储地址是1000,则最后一个元素地址是1036,第5个元素的地址是 A.1010 B.1016 C.1018 D.1019 3.设栈的初始状态为空,元素1、2、3、4、5、6依次入栈,得到的出栈序列是(2,4,3,6,5,1),则栈的容量至少是 A.2 B.3 C.4 D..6 4.下列关于队列的叙述中,错误 ..的是 A.队列是一种先进先出的线性表 B.队列是一种后进后出的线性表 C.循环队列中进行出队操作时要判断队列是否为空 D.在链队列中进行入队操作时要判断队列是否为满 5.对稀疏矩阵进行压缩存储的目的是 A.便于运算 B.节省存储空间 C.便于输入输出 D.降低时间复杂度 6.一棵二叉树的第7层上最多含有的结点数为 A.14 B.64 C.127 D.128 7.下列选项为完全二叉树的是

数据结构实验(七种排序算法的实现)题目和源程序

1、直接插入排序 2、希尔排序 3、2-路归并排序 4、折半插入排序 5、冒泡排序 6、快速排序 7、堆排序 /*---------------------------------------- * 07_排序.cpp -- 排序的相关操作 * 对排序的每个基本操作都用单独的函数来实现 * 水上飘2011年写 ----------------------------------------*/ // ds07.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdio.h" #include #include using namespace std; #define MAXSIZE 20 typedefintKeyType; typedefstruct{ KeyType key; //关键字项 KeyType data; //数据项 }RedType; //记录类型 typedefstruct{ RedTypearr[MAXSIZE+1]; //arr[0]闲置或用作哨兵单元int length; //顺序表长度 }SqList; //顺序表类型typedefSqListHeapType; //对顺序表L做一趟希尔插入排序 //前后记录位置的增量是dk //r[0]只是暂存单元 //当j<=0时,插入位置已找到 voidshellInsert(SqList&L, intdk) {

int i, j; for (i = dk + 1; i <= L.length; i++) { if (L.arr[i].key 0 &&L.arr[0].key = high + 1; j--) L.arr[j + 1] = L.arr[j];//记录后移 L.arr[high + 1] = L.arr[0];//插入 }//for }//BInsertSort //直接插入排序

相关文档
最新文档