数据结构(C++)第二次作业答案((中大))

合集下载

C语言版数据结构题库习题及答案

C语言版数据结构题库习题及答案

数据结构(C语言版)课后习题答案目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (13)第4章串、数组和广义表 (26)第5章树和二叉树 (33)第6章图 (43)第7章查找 (54)第8章排序 (65)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。

如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。

数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。

在有些情况下,数据元素也称为元素、结点、记录等。

数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。

数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。

例如,学生基本信息表中的学号、姓名、性别等都是数据项。

数据对象:是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’, ‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

存储结构:数据对象在计算机中的存储表示,也称为物理结构。

抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。

具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

数据结构(c )课后习题答案

数据结构(c )课后习题答案

数据结构(c )课后习题答案数据结构(C)课后习题答案在学习数据结构(C)课程时,课后习题是非常重要的一部分。

通过完成这些习题,我们可以加深对数据结构的理解,提高编程能力,并且更好地掌握C语言的运用。

下面我们就来看看一些常见的数据结构(C)课后习题答案。

1. 链表的创建和遍历链表是数据结构中常见的一种,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

在C语言中,我们可以通过动态内存分配来创建链表,并且可以使用指针来进行遍历。

下面是一个简单的链表创建和遍历的示例代码:```c#include <stdio.h>#include <stdlib.h>struct Node{int data;struct Node *next;};void printList(struct Node *node){while (node != NULL){printf("%d ", node->data);node = node->next;}}int main(){struct Node *head = NULL;struct Node *second = NULL;struct Node *third = NULL;head = (struct Node *)malloc(sizeof(struct Node)); second = (struct Node *)malloc(sizeof(struct Node)); third = (struct Node *)malloc(sizeof(struct Node)); head->data = 1;head->next = second;second->data = 2;second->next = third;third->data = 3;third->next = NULL;printList(head);return 0;}```2. 栈的实现栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表来实现。

数据结构第二次作业答案(C语言版)07

数据结构第二次作业答案(C语言版)07

数据结构第二次作业答案(C语言版)07数据结构第二次作业答案(C语言版)-07数据结构第二次作业答案学号:姓名:评分: . 一. 单项选择题(20分)( )1. 某二叉树的先序序列和后序序列正好相反,则该二叉树一定是____b____的二叉树。

a. 空或只有一个结点b. 高度等于其结点数(空树高度为0) c. 任一结点无左孩子 d. 任一结点无右孩子( )2. 设图的顶点数=n, 边数=e,若用邻接表表示图,那么求最短路径的Dijkstra算法的时间复杂度为_____b____。

a.O(n_e)b.O(n2)c.O(n+e)d.O(n3)( )3. 一棵左右子树均不为空的二叉树在后序线索化后(不带头结点的线索化),其空指针域数为____b_____。

a、0b、1c、2d、不确定 ( )4. 下面程序段的时间复杂度是____d_____。

i=1; while(i_lt;=n) i=i_2;a. O(n)b. O(n2)c. O(2n)d. O(log2n)( )5. 在有n(_gt;0)个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为_____b______。

a. O(n)b. O(log2n)c. O(nlog2n)d. O(n2)( )6. 采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分为____b____个结点最佳。

a. 10 b. 25 c. 6 d. 625( )7. 下列排序算法中时间复杂度不受数据初始状态影响,恒为O(n2)的是____c______。

a、堆排序b、起泡排序c、直接选择排序d、快速排序( )8. 已知数据表中的每个元素距其最终位置不远,则采用____b___排序算法最省时间。

a.堆排序b.插入排序c.快速排序d.直接选择排序( )9. 假设图的顶点数=n, 边数=e,那么当用邻接表表示图时,拓扑排序算法的时间复杂度为____b_____。

数据结构 第二次作业 测验答案 慕课答案 作业二 UOOC优课 课后练习 深圳大学

数据结构 第二次作业 测验答案 慕课答案 作业二 UOOC优课 课后练习 深圳大学

数据结构第二次作业一、单选题 (共100.00分)1. 数组的存储方式有以下两种()A. 顺序表和链表B. 堆栈和队列C. 行优先和列优先D. 对称矩阵和三角矩阵正确答案:C2. 广义表的表头是指()A. 表中第一个元素B. 表中最后一个元素C. 除表中第一个元素以外,其余元素组成的子表D. 除表中最后一个元素以外,其余元素组成的子表正确答案:A3. 广义表的表尾是指()A. 表中第一个元素B. 表中最后一个元素C. 除表中第一个元素以外,其余元素组成的子表D. 除表中最后一个元素以外,其余元素组成的子表正确答案:C4. 已知二维数组有4行5列,首元素的数组下标为a00,则数组最后一个元素的数组下标是()A. a44B. a55C. a45D. a34正确答案:D5. 已知对称矩阵有4行4列,必定与元素a23相等的元素是()A. a32B. a33C. a00D. a22正确答案:A6. 已知矩阵A有4行5列,矩阵首元素下标为[0,0],每个元素使用4个字节,现用一维数组B存储该矩阵,数组B的内存首址为10000,若采用行序为主,矩阵元素A[3, 2]在内存的地址是()A. 10052B. 10068C. 10005D. 10020正确答案:B7. 已知广义表L=((x,y,z),a,(u,t,w)),假设head表示取表头运算,tail表示取表尾运算,求head(tail(L))的结果是()A. uB. (x)C. aD. (u, t, w)正确答案:C8. 以下哪一种是串在计算机中的常见表示方式()A. 定长顺序B. 堆分配C. 块链D. 前三种都是正确答案:D9. 在数据结构中,串可以等同于()的处理A. 整数串B. 浮点数串C. 字符串D. 多种类型的数组正确答案:C10. 以下哪一种是串匹配的常用算法()A. 普里姆算法B. 克鲁斯卡尔算法C. KMP算法D. 关键路径算法正确答案:C已知主串为abcbcaddabc,模式串为cad,假设串位置从1开始,则串匹配位置是()A. 3B. 5C. 7D. 不存在正确答案:B12. 已知串S的内容为1+2+3,以下描述哪一个是正确的()A. 串S的长度是6B. 串S的运算结果是6C. 整数1是串S的子串D. 符号+是串S的子串正确答案:D以下描述哪一个是正确的()A. 串是字符有限序列B. 串是整数、浮点数、字符等多种数据的有限序列C. 只包含空格的串称为空串D. 串只能使用顺序表存储正确答案:A串函数Sub(S, x, y)表示在串S中,从x位置开始,取出y个字符,串位置从1开始计算。

数据结构c 版第二版课后习题答案

数据结构c 版第二版课后习题答案

数据结构c 版第二版课后习题答案数据结构是计算机科学中的重要概念,它研究如何组织和存储数据,以便能够高效地进行操作和检索。

C语言是一种广泛应用于软件开发的编程语言,而数据结构C版第二版是一本经典的教材,它介绍了C语言中常用的数据结构和算法。

在学习这本教材时,课后习题是检验自己理解和掌握程度的重要方式。

下面我将为大家提供一些课后习题的答案,希望对大家的学习有所帮助。

1. 第一章:引论习题1:数据结构是什么?它的作用是什么?答案:数据结构是一种组织和存储数据的方式,它可以帮助我们更高效地进行数据操作和检索。

它的作用是提供一种合理的数据组织方式,使得我们可以快速地找到和处理需要的数据。

习题2:请举例说明数据结构的应用场景。

答案:数据结构可以应用于各个领域,比如在图像处理中,我们可以使用二维数组来表示图像的像素点;在网络通信中,我们可以使用链表来存储和管理网络节点之间的连接关系;在数据库中,我们可以使用树结构来组织数据的层次关系等等。

2. 第二章:算法分析习题1:什么是时间复杂度和空间复杂度?它们分别表示什么?答案:时间复杂度是衡量算法执行时间的度量,它表示随着输入规模的增加,算法执行时间的增长趋势。

空间复杂度是衡量算法所需内存空间的度量,它表示随着输入规模的增加,算法所需内存空间的增长趋势。

习题2:请解释最坏情况时间复杂度和平均情况时间复杂度的区别。

答案:最坏情况时间复杂度是指在最不利的情况下,算法执行的时间复杂度。

平均情况时间复杂度是指在所有可能输入情况下,算法执行的平均时间复杂度。

最坏情况时间复杂度是对算法性能的保证,而平均情况时间复杂度更能反映算法的平均性能。

3. 第三章:线性表习题1:请实现一个线性表的顺序存储结构。

答案:可以使用数组来实现线性表的顺序存储结构。

定义一个固定大小的数组,然后使用一个变量来记录线性表中元素的个数,通过数组下标来访问和操作元素。

习题2:请实现一个线性表的链式存储结构。

数据结构c 版习题答案

数据结构c 版习题答案

数据结构c 版习题答案数据结构是计算机科学中的重要基础课程,它主要研究数据的组织、存储和管理方式。

C语言是一种常用的编程语言,也是学习数据结构的重要工具。

在学习数据结构的过程中,习题是不可或缺的一部分,通过解答习题可以帮助我们巩固所学的知识。

下面是一些常见的数据结构C版习题的答案,供大家参考。

一、线性表1. 实现一个顺序表的插入操作。

答案:```cvoid insert(SeqList *list, int index, int value) {if (index < 0 || index > list->length) {printf("插入位置不合法\n");return;}if (list->length >= MAX_SIZE) {printf("顺序表已满\n");return;}for (int i = list->length - 1; i >= index; i--) {list->data[i + 1] = list->data[i];}list->data[index] = value;list->length++;}```2. 实现一个顺序表的删除操作。

答案:```cvoid remove(SeqList *list, int index) {if (index < 0 || index >= list->length) {printf("删除位置不合法\n");return;}for (int i = index; i < list->length - 1; i++) { list->data[i] = list->data[i + 1];}list->length--;}```二、栈和队列1. 实现一个栈的入栈操作。

数据结构(c语言版)课后习题答案完整版

数据结构(c语言版)课后习题答案完整版
BiTree temp;
if(T->lchild==NULL&&T->rchild==NULL)
return;
else
{
temp = T->lchild;
T->lchild = T->rchild;
T->rchild = temp;
}
ChangeLR(T->lchild);
ChangeLR(T->rchild);
elseif(‘A’<=ch<=‘Z’){i=ch-65+10;num[i]++;}//字母字符
for(i=0;i<10;i++)//输出数字字符的个数
printf(“数字%d的个数=%d\n”,i,num[i]);
for(i=10;i<36;i++)//求出字母字符的个数
printf(“字母字符%c的个数=%d\n”,i+55,num[i]);

5.选择题:CCBDCA
6.试分析下面各程序段的时间复杂度。
(1)O(1)
(2)O(m*n)
(3)O(n2)
(4)O(log3n)
(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)
(6)O( )

1.选择题
babadbcabdcddac
2.算法设计题
(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
ElemType Max (LinkList L ){
if(L->next==NULL) return NULL;

数据结构(C语言版)习题参考答案

数据结构(C语言版)习题参考答案

数据结构(C语言版)习题参考答案数据结构(C语言版)习题参考答案1. 数据结构简介数据结构是计算机科学中重要的概念之一,它关注如何组织和存储数据,以便有效地进行访问和操作。

C语言是一种广泛应用于数据结构实现的编程语言。

本文将提供一些常见数据结构习题的参考答案,帮助读者理解和掌握数据结构的基本概念与实现。

2. 数组数组是一种线性结构,存储具有相同数据类型的元素。

以下是一些数组习题的参考答案:2.1 统计数组中某个元素出现的次数```int countOccurrences(int arr[], int n, int x) {int count = 0;for (int i = 0; i < n; i++) {if (arr[i] == x) {count++;}}return count;}```2.2 查找数组中的最大值和最小值```void findMinMax(int arr[], int n, int* min, int* max) { *min = arr[0];*max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < *min) {*min = arr[i];}if (arr[i] > *max) {*max = arr[i];}}}```3. 链表链表是一种动态数据结构,每个节点包含数据和指向下一个节点的指针。

以下是一些链表习题的参考答案:3.1 反转链表```Node* reverseLinkedList(Node* head) {Node* prev = NULL;Node* curr = head;while (curr != NULL) {Node* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev;}```3.2 合并两个有序链表```Node* mergeLists(Node* list1, Node* list2) {if (list1 == NULL) {return list2;}if (list2 == NULL) {return list1;}if (list1->data < list2->data) {list1->next = mergeLists(list1->next, list2);return list1;} else {list2->next = mergeLists(list1, list2->next);return list2;}}```4. 栈和队列栈和队列是两种重要的线性数据结构,栈支持后进先出(LIFO),队列支持先进先出(FIFO)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构第二次作业答案
学号:姓名:评分:.
一.单项选择题(20分)
( )1.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是____b____的二叉树。

a. 空或只有一个结点
b. 高度等于其结点数(空树高度为0)
c. 任一结点无左孩子
d. 任一结点无右孩子
( )2.设图的顶点数=n, 边数=e,若用邻接表表示图,那么求最短路径的Dijkstra算法的时间复杂度为_____b____。

a.O(n*e)
b.O(n2)
c.O(n+e)
d.O(n3)
( )3.一棵左右子树均不为空的二叉树在后序线索化后(不带头结点的线索化),其空指针域数为____b_____。

a、0
b、1
c、2
d、不确定
( )4.下面程序段的时间复杂度是____d_____。

i=1; while(i<=n) i=i*2;
a. O(n)
b. O(n2)
c. O(2n)
d. O(log2n)
( )5.在有n(>0)个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为_____b______。

a. O(n)
b. O(log2n)
c. O(nlog2n)
d. O(n2)
( )6.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分为____b____个结点最佳。

a. 10
b. 25
c. 6
d. 625
( )7.下列排序算法中时间复杂度不受数据初始状态影响,恒为O(n2)的是____c______。

a、堆排序
b、起泡排序
c、直接选择排序
d、快速排序
( )8.已知数据表中的每个元素距其最终位置不远,则采用____b___排序算法最省时间。

a.堆排序
b.插入排序
c.快速排序
d.直接选择排序
( )9.假设图的顶点数=n, 边数=e,那么当用邻接表表示图时,拓扑排序算法的时间复杂度为____b_____。

a. O(n2)
b. O(n+e)
c. O(n*e)
d. O(n3)
( )10.一棵左子树为空的二叉树在先序线索化后(不带头结点的线索化),其中的空链域的个数为____a_____。

a. 2
b. 1
c. 0
d. 不确定
二.填空作图简答题(共62分):
1.依次插入30,43,21,9,15,51并由空树构成一棵平衡二叉树,画出该平衡二叉树形成过
程及其中序线索二叉树。

2. 有一组关键码序列{40
,采用Shell 排序方法从小到大进
行排序,假设其间隔序列为5,3,1,请写出每趟的结果。

答案:
第1趟: 40,20,10,15,50,45,95,60,75 第2趟: 15,20,10,40,50,45,95,60,75 第3趟: 10,15,20,40,45,50,60,75,95
3. 对下面的3阶B 树依次插入关键码60,14,6,画出插入三个关键码后并删除关键码20后的
结果。

4. 用Prim 算法求下图的最小生成树, 若从顶点0出发,请将算法中的辅助数组closedge 的变化过
程填入下表。

辅助数组closedge
0 1 2 3 4 5
6 7 所选边
5.假设某森林的先根遍历序列为EBADCFHGIKJ和中根遍历序列为ABCDEFGHIJK。

请画出该
森林的带双亲的孩子链表示。

6.已知9个结点的值分别为1~9,请将各结点的值填入下面二叉排序树中:
7.用堆排序算法(“最大堆”排序算法)对关键字{70,33,79,67,46,24,30,40}进行排序,
请先建“最大堆”,然后输出一个堆顶元素, 并调整成堆:初始状态 { 40 , 33 , 24 ,
67 , 46 , 79 , 30 ,70 }
所建大顶堆{79,70,40,67,46,24,30,33}或{79,70,67,46,40,24,30,33}
输出一个堆顶元素后调整的结果{70,67,40,33,46,24,30,79}或{70,46,67,33,40,24,30,79}
8. 如下图已知哈希表为空,哈希函数为H (Key )= Key MOD 11, 冲突解决方法分别用线性探测
再散列和二次探测再散列。

填入在依次插入关键字14,37,25,16之后的情况,并求等概率情况下所要求的平均查找长度。

(1)线性探测再散列
(2)二次探测再散列
线性探测再散列查找不成功时的平均查找长度=____21/11 _; 二次探测再散列查找成功时的平均查找长度=___6/4=3/2=1.5_;
9. 用快速排序对下列关键字进行排序(图示), 基准元素取第一个元素。

70 33 79 67 46 24 30 40 写出两趟排序的结果。

第一趟排序之后: { 40,33,67,46,24,30} 70 {79} 或 {40,33,30,67,46,24} 70 {79}; 第二趟排序之后: {30,33,24} 40 {67,46} 70,79 或 {24,33,30} 40 {46,67}70,79; 若基准元素按“三者取中”的原则取,则两趟排序的结果是:
第一趟排序之后:{40,33,46,24,30} 67 {79,70} 或 {33,40,30,24,46} 67,{70,79}; 第二趟排序之后:{30,33,
24} 40 {46} 67,70,79 或 {24,30} 33 {40,46} 67,70,79;
10. 已知一字符串bcbdebcecbdcabd
,试设计其赫夫曼编码并画出相应的赫夫曼树。

a :1;b :5;c :4;d :3;e :2;
11. 求出下图中顶点A 到其余个顶点的最短路径和最短路径长度。

AE=10; AF=17; AB=19; AG=25; AC=26; AD=27; AH=28
三.程序填空(18分)
1.下面是仅给出了部分操作的二叉树类的定义和实现。

试在程序的每一划线部分填入一条语
句或表达式,完成计算度为1的结点个数的操作countNodes1( )。

typedef struct BinNode{
int data;
struct BinNode* leftchild, * rightchild;
}BinNode, *BinTree;
void InitBinTree(BinTree &root) //初始化二叉树root
{
root=Null;
}
void DestroyBinTree(BinTree &root) //销毁二叉树root
{
if (root == NULL) return;
DestroyBinTree(root->leftchild);
DestroyBinTree (root->rightchild);
free(root);
}
int countNodes1(BinTree &root) //计算二叉树root中度为1的结点数
{
if ( ①_ root!=NULL _____________________ ){
if(root-> leftchild!=NULL && root-> rightchild!=NULL)
___②_____return __ countNodes1(root-> leftchild ) + countNodes1(root-> rightchild)__;
else if(root-> leftchild==NULL && __③__root-> rightchild!=NULL ______ ___)
__④_ _ return __ 1 + countNodes1(root-> rightchild)______;
else if (root-> leftchild!=NULL && ⑤root-> rightchild==NULL_____ )
__⑥_ return __ countNodes1(root-> leftchild ) + 1______________;
}
return 0;
}
2.下面是起泡排序算法的实现。

试在程序的每一划线部分填入一条语句或表达式,以使该算
法在发现数据有序时能及时停止。

void BubbleSort(int datalist[], int size) //要排序的数据存放在数组datalist[]中,元素个数=size {
int exchange,i,j,temp;
i=1;
exchange=1;
while(i<size && ___⑧_exchange______)
{
_____⑨____exchange=0;_____
for(j=size-1;j>=i; j--)
if(datalist[j-1]>datalist[j])
{
temp=datalist[j-1];
datalist[j-1]=datalist[j];
datalist[j]=temp;
____⑩___exchange=1_______;
}
i++;
}
}。

相关文档
最新文档