数据结构(C语言版)(严蔚敏)
- 格式:ppt
- 大小:273.00 KB
- 文档页数:37
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论...................................................................................... 错误!未定义书签。
第2章线性表 .................................................................................. 错误!未定义书签。
第3章栈和队列 .............................................................................. 错误!未定义书签。
第4章串、数组和广义表 ............................................................... 错误!未定义书签。
第5章树和二叉树........................................................................... 错误!未定义书签。
第6章图............................................................................................ 错误!未定义书签。
第7章查找...................................................................................... 错误!未定义书签。
第8章排序...................................................................................... 错误!未定义书签。
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (5)第3章栈和队列 (14)第4章串、数组和广义表 (27)第5章树和二叉树 (34)第6章图 (44)第7章查找 (56)第8章排序 (67)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
严蔚敏《数据结构》(C语言版)笔记和习题(含考研真题)详解第1章绪论一、什么是数据结构数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
二、基本概念和术语1数据数据是对客观事物的符号表示,是计算机科学中所有能输入到计算机中并能被计算机程序处理的符号的总称。
2数据元素数据元素是数据的基本单位。
3数据对象数据对象是性质相同的数据元素的集合,是数据的一个子集。
4数据结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
(1)数据结构的基本结构根据数据元素之间关系的不同特性,通常有下列四类基本结构:①集合。
数据元素属于“同一个集合”,并无其他复杂关系。
②线性结构。
数据元素之间存在一个对一个的关系。
③树形结构。
数据元素之间存在一个对多个的关系。
④图状结构或网状结构。
数据元素之间存在多个对多个的关系。
【注意】区分这四种基本结构可以根据元素间的对应关系。
如图1-1所示为上述四类基本结构的关系图。
图1-1 四类基本结构的关系图(2)数据结构的形式定义数据结构的形式定义为:Data_Structure=(D,S)其中:D表示数据元素的有限集,S表示D上关系的有限集。
(3)数据结构在计算机中的表示数据结构包括数据元素的表示和关系,在计算机中称为数据的物理结构(又称存储结构)。
其中,关系有两种表示方法:顺序映象和非顺序映象。
这两种表示方法对应两种存储结构:顺序存储结构和链式存储结构。
a.顺序映象:用相对位置来表示数据元素之间的逻辑关系。
b.非顺序映象:用指针表示数据元素之间的逻辑关系。
5数据类型数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
6抽象数据类型抽象数据类型(ADT)由一个值域和定义在该值域上的一组操作组成。
【注意】抽象数据类型是对数据类型架构的一种全局体现,使我们能够更加清晰地看待某一数据类型。
7多形数据类型多形数据类型是指其值的成分不确定的数据类型。
数据结构c语言版严蔚敏习题答案数据结构是计算机科学中非常重要的一门课程,它研究的是数据的组织、存储和管理方式。
而C语言是一种被广泛应用于系统编程和嵌入式开发的编程语言。
在学习数据结构的过程中,很多人会选择使用严蔚敏编写的《数据结构(C语言版)》一书。
本文将针对该书中的习题,为大家提供一些答案和解析。
1. 顺序表顺序表是一种使用连续的内存空间来存储数据的数据结构。
在《数据结构(C语言版)》一书中,我们可以通过使用结构体来实现顺序表。
下面是一个示例代码:```c#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100typedef struct {int data[MAXSIZE];int length;} SqList;void InitList(SqList *L) {L->length = 0;}void Insert(SqList *L, int pos, int value) {if (L->length >= MAXSIZE) {printf("顺序表已满,无法插入!"); return;}if (pos < 1 || pos > L->length + 1) { printf("插入位置非法!");return;}for (int i = L->length; i >= pos; i--) { L->data[i] = L->data[i - 1];}L->data[pos - 1] = value;L->length++;}void Delete(SqList *L, int pos) {if (pos < 1 || pos > L->length) {printf("删除位置非法!");return;}for (int i = pos - 1; i < L->length - 1; i++) { L->data[i] = L->data[i + 1];}L->length--;}int main() {SqList L;InitList(&L);Insert(&L, 1, 10);Insert(&L, 2, 20);Insert(&L, 3, 30);Delete(&L, 2);for (int i = 0; i < L.length; i++) {printf("%d ", L.data[i]);}return 0;}2. 链表链表是一种使用非连续的内存空间来存储数据的数据结构。
数据结构c语言版严蔚敏课后习题答案数据结构是计算机科学中的一个重要领域,它涉及到数据的组织、管理和存储方式,以便可以高效地访问和修改数据。
C语言作为一种广泛使用的编程语言,提供了丰富的数据结构实现方法。
严蔚敏教授编写的《数据结构(C语言版)》是许多计算机专业学生的必读教材。
以下是对该书课后习题的一些参考答案,供学习者参考。
第一章:绪论1. 数据结构的定义:数据结构是计算机中存储、组织数据的方式,它不仅包括数据元素的类型和关系,还包括数据操作的函数。
2. 数据结构的重要性:数据结构对于提高程序的效率至关重要。
合理的数据结构可以减少算法的时间复杂度和空间复杂度。
第二章:线性表1. 线性表的定义:线性表是由n个元素组成的有限序列,其中n称为线性表的长度。
2. 线性表的顺序存储结构:使用数组来存储线性表的元素,元素的存储关系是连续的。
3. 线性表的链式存储结构:使用链表来存储线性表的元素,每个元素包含数据部分和指向下一个元素的指针。
第三章:栈和队列1. 栈的定义:栈是一种特殊的线性表,只能在一端(栈顶)进行插入和删除操作。
2. 队列的定义:队列是一种特殊的线性表,允许在一端(队尾)进行插入操作,在另一端(队首)进行删除操作。
第四章:串1. 串的定义:串是由零个或多个字符组成的有限序列。
2. 串的存储结构:串可以采用顺序存储结构或链式存储结构。
第五章:数组和广义表1. 数组的定义:数组是由具有相同类型的多个元素组成的集合,这些元素按照索引顺序排列。
2. 广义表的定义:广义表是线性表的推广,其中的元素可以是数据也可以是子表。
第六章:树和二叉树1. 树的定义:树是由节点组成的,其中有一个特定的节点称为根,其余每个节点有且仅有一个父节点。
2. 二叉树的定义:二叉树是每个节点最多有两个子节点的树。
第七章:图1. 图的定义:图是由顶点和边组成的数据结构,可以表示复杂的关系。
2. 图的存储结构:图可以用邻接矩阵或邻接表来存储。
数据结构(C语言版)严蔚敏课后习题答案数据结构(C语言版)严蔚敏课后习题答案一、线性表1. 顺序表顺序表是一种存储结构,它将元素顺序存放在一块连续的存储区域中。
C语言中常用数组来实现顺序表。
以下是一些常见题目的解答:题目1:已知顺序表中存储了n个整数,请编写一个算法,将这个顺序表中的所有负数挑选出来,并将它们按照原有顺序存放在新的顺序表中。
解答:```#include <stdio.h>#define MAX_SIZE 100int main() {int A[MAX_SIZE], neg[MAX_SIZE];int n, i, j = 0;printf("Enter the number of elements: ");scanf("%d", &n);printf("Enter the elements: ");for (i = 0; i < n; i++) {scanf("%d", &A[i]);if (A[i] < 0) {neg[j] = A[i];j++;}}printf("Negative numbers: ");for (i = 0; i < j; i++) {printf("%d ", neg[i]);}return 0;}```题目2:假设顺序表A和B中的元素递增有序排列,编写一个算法合并这两个顺序表,并使合并后的顺序表仍然递增有序。
解答:```#include <stdio.h>#define MAX_SIZE 100int main() {int A[MAX_SIZE], B[MAX_SIZE], C[MAX_SIZE * 2]; int m, n, i, j, k;printf("Enter the number of elements in the first list: "); scanf("%d", &m);printf("Enter the elements in increasing order: ");for (i = 0; i < m; i++) {scanf("%d", &A[i]);C[i] = A[i];}printf("Enter the number of elements in the second list: "); scanf("%d", &n);printf("Enter the elements in increasing order: ");for (i = 0; i < n; i++) {scanf("%d", &B[i]);C[m + i] = B[i];}// Merge A and B into Ci = j = k = 0;while (i < m && j < n) { if (A[i] < B[j]) {C[k] = A[i];i++;} else {C[k] = B[j];j++;}k++;}while (i < m) {C[k] = A[i];i++;k++;}while (j < n) {C[k] = B[j];j++;k++;}printf("Merged list in increasing order: ");for (i = 0; i < m + n; i++) {printf("%d ", C[i]);}return 0;}```2. 链表链表是一种动态的数据结构,它通过结点之间的指针联系起来。
数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论...................................................................................... 错误!未定义书签。
第2章线性表 .................................................................................. 错误!未定义书签。
第3章栈和队列 .............................................................................. 错误!未定义书签。
第4章串、数组和广义表 ............................................................... 错误!未定义书签。
第5章树和二叉树........................................................................... 错误!未定义书签。
第6章图............................................................................................ 错误!未定义书签。
第7章查找...................................................................................... 错误!未定义书签。
第8章排序...................................................................................... 错误!未定义书签。
数据结构c语言版严蔚敏习题答案数据结构是计算机科学中一个重要的基础概念,它涉及到数据的组织、存储和管理方式。
在C语言中实现数据结构,可以有效地提高程序的效率和性能。
严蔚敏教授的《数据结构(C语言版)》是一本广泛使用的教材,它详细介绍了各种数据结构的原理和实现方法。
以下是对该书习题的一些答案分析:# 线性表线性表是最基本的数据结构,它由一系列线性排列的元素组成。
在C语言中,线性表通常使用数组或链表来实现。
- 数组实现:数组是一种静态数据结构,其大小在定义时确定,不支持动态扩展。
- 链表实现:链表是一种动态数据结构,可以灵活地添加和删除元素。
# 栈和队列栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。
- 栈的实现:可以使用数组或链表来实现栈。
栈的基本操作包括入栈(push)和出栈(pop)。
- 队列的实现:同样可以使用数组或链表实现队列。
队列的基本操作包括入队(enqueue)和出队(dequeue)。
# 树和二叉树树是一种层次结构的数据结构,其中每个节点有零个或多个子节点。
二叉树是树的一种特殊形式,每个节点最多有两个子节点。
- 二叉树遍历:包括前序遍历、中序遍历和后序遍历。
- 二叉搜索树:一种特殊的二叉树,其中每个节点的值都大于或等于其左子树中的所有节点的值,且小于或等于其右子树中的所有节点的值。
# 图图是由顶点(或称为节点)和边组成的数据结构。
图可以是无向的或有向的。
- 图的表示:图可以通过邻接矩阵或邻接表来表示。
- 图的遍历:包括深度优先搜索(DFS)和广度优先搜索(BFS)。
# 查找查找是数据结构中用于检索特定元素的过程。
- 顺序查找:在数组中按顺序查找元素。
- 二分查找:在有序数组中使用二分查找算法快速定位元素。
# 排序排序是将一组数据按照特定顺序排列的过程。
- 冒泡排序:通过重复遍历待排序的数列,比较每对相邻元素的大小,并在必要时交换它们的位置。
- 快速排序:一种分而治之的排序算法,通过选取一个“基准”元素并将数列分为两部分,一部分包含所有小于基准的元素,另一部分包含所有大于基准的元素。
数据结构习题集答案(C语言版严蔚敏)第2章线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
解:头指针是指向链表中第一个结点的指针。
首元结点是指链表中存储第一个数据元素的结点。
头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。
它可以对空表、非空表以及首元结点的操作进行统一处理。
2.2 填空题。
解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。
(2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。
单链表中逻辑上相邻的元素的物理位置不一定紧邻。
(3) 在单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的链域的值指示。
(4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。
2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。
2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。
解:2.5 画出执行下列各行语句后各指针及链表的示意图。
L=(LinkList)malloc(sizeof(LNode)); P=L;for(i=1;i<=4;i++){P->next=(LinkList)malloc(sizeof(LNode));P=P->next; P->data=i*2-1;}P->next=NULL;for(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2);for(i=1;i<=3;i++) Del_LinkList(L,i);解:2.6 已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
a. 在P结点后插入S结点的语句序列是__________________。