华中科技大学数据结构(C语言版第2版_李云清)习题答案2012-12

合集下载

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语言版)第2版习题答案—严蔚敏教材

数据结构(C语言版)第2版习题答案—严蔚敏教材

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据结构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语言版第2版课后习题答案

数据结构C语言版第2版课后习题答案

A . 110 答案: B
B . 108
解释:顺序表中的数据连续存储,所以第
C . 100
D . 120
5 个元素的地址为: 100+2*4=108 。
( 2)在 n 个结点的顺序表中,算法的时间复杂度是
O(1) 的操作是(
)。
A .访问第 i 个结点( 1≤ i ≤ n)和求第 i 个结点的直接前驱( 2≤ i≤ n)
54
第 8 章 排序 ................................................................................................................
65
II
第 1 章 绪论
1 .简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结
情况下,数据元素也称为元素、结点、记录等。数据元素用于完整地描述一个对象,如一个
学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项 :是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信
息表中的学号、姓名、性别等都是数据项。
数据对象 :是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是
13
第 4 章 串、数组和广义表 .........................................................................................
26
第 5 章 树和二叉树 .....................................................................................................

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

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

国家计算机等级考试二级C语言公共基础知识总结第一章数据结构与算法1.1 算法算法:是指解题方案的准确而完整的描述。

算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。

算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。

特征包括:(1)可行性;(2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义;(4)拥有足够的情报。

算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。

指令系统:一个计算机系统能执行的所有指令的集合。

基本运算包括:算术运算、逻辑运算、关系运算、数据传输。

算法的控制结构:顺序结构、选择结构、循环结构。

算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。

算法复杂度:算法时间复杂度和算法空间复杂度。

算法时间复杂度是指执行算法所需要的计算工作量。

算法空间复杂度是指执行这个算法所需要的内存空间。

1.2 数据结构的基本基本概念数据结构研究的三个方面:(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。

数据结构是指相互有关联的数据元素的集合。

数据的逻辑结构包含:(1)表示数据元素的信息;(2)表示各数据元素之间的前后件关系。

数据的存储结构有顺序、链接、索引等。

线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。

非线性结构:不满足线性结构条件的数据结构。

1.3 线性表及其顺序存储结构线性表是由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。

在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。

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

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

第1章绪论5.:CCBDCA6.分析下面各程序段的复度。

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( n)第2章线性表1.babadbcabdcddac2.算法〔6〕一个算法,通一趟遍在表中确定最大的点。

ElemTypeMax(LinkListL){if(L->next==NULL)returnNULL;pmax=L->next;// 假定第一个点中数据具有最大p=L->next->next;while(p!=NULL){// 如果下一个点存在if(p->data>pmax->data)pmax=p;p=p->next;}returnpmax->data;〔7〕一个算法,通遍一趟,将表中所有点的接方向逆,仍利用原表的存空。

voidinverse(LinkList&L){ 逆置点的表Lp=L->next;L->next=NULL;while(p){q=p->next; //q指向*p的后p->next=L->next;L->next=p; //*p插入在点之后p=q;}}〔10〕度n的性表A采用序存构,写一复度O(n)、空复度O(1)的算法,算法除性表中所有item的数据元素。

[目分析] 在序存的性表上除元素,通常要涉及到一系列元素的移〔第个元素,第i+1至第n个元素要依次前移〕。

此题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。

因此可以考虑设头尾两个指针〔 i=1,j=n〕,从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。

void Delete 〔ElemTypeA[] ,int n〕∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素。

数据结构C语言版习题详细答案资料

数据结构C语言版习题详细答案资料
数据对象:D={r,i|r,i 为实数} 数据关系:R={<r,i>} 基本操作:
InitComplex(&C,re,im) 操作结果:构造一个复数 C,其实部和虚部分别为 re 和 im
DestroyCmoplex(&C) 操作结果:销毁复数 C
Get(C,k,&e) 操作结果:用 e 返回复数 C 的第 k 元的值
int Time(int n) { count = 0; x=2; while(x<n/2) { x *= 2; count++; } return count;
}
解: o(log 2 n)
count= log 2 n 2
1.11 已知有实现同一功能的两个算法,其时间复杂度分别为 O 2n 和 O n10 ,假设现实计算机可连续
1.14 判断下列各对函数 f n 和 g n ,当 n 时,哪个函数增长更快?
(1) f n 10n2 ln n!10n3 , gn 2n4 n 7
1.6 在程序设计中,常用下列三种不同的出错处理方式: (1) 用 exit 语句终止执行并报告错误; (2) 以函数的返回值区别正确返回或错误返回; (3) 设置一个整型变量的函数参数以区别正确返回或某种错误返回。
试讨论这三种方法各自的优缺点。 解:(1)exit 常用于异常错误处理,它可以强行中断程序的执行,返回操作系统。 (2)以函数的返回值判断正确与否常用于子程序的测试,便于实现程序的局部控制。 (3)用整型函数进行错误处理的优点是可以给出错误类型,便于迅速确定错误。
} 解:(1) n-1 (2) n-1 (3) n-1
n(n 1)
(4) n+(n-1)+(n-2)+...+1=

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案1. 简介数据结构是计算机科学领域中非常重要的一门学科,它研究的是数据的组织、存储和管理方式。

本文将针对《数据结构(C语言版)(第2版)》的课后习题提供答案,帮助读者更好地理解和应用数据结构。

2. 第一章: 绪论在第一章中,主要介绍了数据结构的基本概念、分类和基本操作。

以下是部分习题的答案:2.1 习题1习题描述:什么是数据结构?答案:数据结构是指数据对象中元素之间的关系,以及对这些关系进行操作的方法和技术的集合。

2.2 习题2习题描述:数据结构的分类有哪些?答案:数据结构可以分为线性结构和非线性结构。

线性结构包括线性表、栈、队列等;非线性结构包括树、图等。

3. 第二章: 线性表第二章介绍了线性表的定义、分类和实现。

以下是部分习题的答案:3.1 习题1习题描述:什么是线性表?答案:线性表是由n个数据元素a1, a2, ..., an组成的有限序列,其中元素之间存在着一一对应的关系。

3.2 习题2习题描述:线性表的分类有哪些?答案:线性表可以分为顺序表和链表。

顺序表是用一段地址连续的存储单元一次存储线性表的所有元素,而链表是采用链式存储结构,通过每个元素存储其后继元素的地址来实现元素之间的逻辑关系。

4. 第三章: 栈与队列第三章讲解了栈和队列的定义、特性和实现。

以下是部分习题的答案:4.1 习题1习题描述:栈和队列有什么区别?答案:栈是一种后进先出的线性表,只能在表尾进行插入和删除操作;队列是一种先进先出的线性表,只能在表的一端进行插入和删除操作。

4.2 习题2习题描述:栈的应用有哪些?答案:栈在计算机科学中有广泛的应用,如函数的调用和返回、括号匹配、表达式求值等。

5. 第四章: 串第四章讲解了串的定义、模式匹配和实现。

以下是部分习题的答案:5.1 习题1习题描述:什么是串?答案:串是由零个或多个字符组成的有限序列,串中的字符个数称为串的长度。

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

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

数据结构(c版)第二版课后习题答案在计算机科学中,数据结构是组织、管理和存储数据的方式,它对程序的效率和性能有着直接的影响。

《数据结构(C版)》第二版是一本广泛使用的教材,它详细介绍了各种基本的数据结构以及它们在C语言中的实现。

课后习题是帮助学生巩固理论知识和提高编程技能的重要部分。

以下是一些可能的习题答案示例,但请注意,实际的习题答案应根据具体习题内容来确定。

习题1:数组和链表问题:编写一个函数,该函数接受一个整数数组和它的大小,然后返回数组中的最大值。

答案:```c#include <stdio.h>int findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}int main() {int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);printf("The maximum value in the array is: %d\n", findMax(arr, size));return 0;}```习题2:栈问题:实现一个栈的数据结构,并编写一个函数来检查一个字符串是否是回文。

答案:```c#include <stdio.h>#include <string.h>#include <stdbool.h>#define MAX_SIZE 100typedef struct {char data[MAX_SIZE];int top;} Stack;void initializeStack(Stack *s) {s->top = -1;}bool isEmpty(Stack s) {return s.top == -1;}void push(Stack *s, char item) {if (s->top < MAX_SIZE - 1) {s->top++;s->data[s->top] = item;}}char pop(Stack *s) {if (!isEmpty(*s)) {return s->data[s->top--];}return '\0';}bool isPalindrome(const char *str) {Stack s;initializeStack(&s);int length = strlen(str);for (int i = 0; i < length; i++) {push(&s, str[i]);}for (int i = 0; i < length / 2; i++) { char c1 = str[i];char c2 = pop(&s);if (c1 != c2) {return false;}}return true;}int main() {char str[] = "radar";if (isPalindrome(str)) {printf("The string is a palindrome.\n");} else {printf("The string is not a palindrome.\n");}return 0;}```习题3:队列问题:实现一个循环队列,并编写一个函数来模拟银行的顾客服务,顾客到达和离开。

数据结构C语言版题集答案

数据结构C语言版题集答案

数据结构(c 语言版)习题集答案第1章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。

在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

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

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

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

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

是对一般数据类型的扩展。

1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。

在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

解:1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。

解:ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={<r,i>} 基本操作: InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部和虚部分别为re 和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e) 操作结果:用e 返回复数C 的第k 元的值 Put(&C,k,e) 操作结果:改变复数C 的第k 元的值为e IsAscending(C) 操作结果:如果复数C 的两个元素按升序排列,则返回1,否则返回0 IsDescending(C) 操作结果:如果复数C 的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0 IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0 Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

数据结构(C语言版)第2版习题-答案

数据结构(C语言版)第2版习题-答案

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据结构课后习题详解(超完整-超经典)

数据结构课后习题详解(超完整-超经典)

第1章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。

解:数据是对客观事物的符号表示。

在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

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

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

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

存储结构是数据结构在计算机中的表示。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

是对一般数据类型的扩展。

1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。

一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。

抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。

在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。

解:1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。

解:ADT Complex{数据对象:D={r,i|r,i 为实数}数据关系:R={<r,i>}基本操作:InitComplex(&C,re,im) 操作结果:构造一个复数C ,其实部和虚部分别为re 和imDestroyCmoplex(&C) 操作结果:销毁复数CGet(C,k,&e)操作结果:用e 返回复数C 的第k 元的值Put(&C,k,e)操作结果:改变复数C 的第k 元的值为eIsAscending(C)操作结果:如果复数C 的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C 的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e 返回复数C 的两个元素中值较大的一个Min(C,&e)操作结果:用e 返回复数C 的两个元素中值较小的一个 }ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0 IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0 Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。

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

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

数据结构c版第二版课后习题答案数据结构是计算机科学中的一个重要概念,它涉及到数据的组织、管理和存储方式,以及对数据进行操作的算法。

C语言是一种广泛使用的编程语言,它提供了丰富的数据结构实现方式。

《数据结构(C语言版)》第二版是一本经典的教材,它详细地介绍了各种数据结构的C 语言实现,以及相关的算法。

课后习题是帮助读者巩固和深化理解的重要部分。

以下是这本书课后习题的一些答案,仅供参考。

1. 线性表线性表是最基本的数据结构,它由一系列元素组成,这些元素具有线性关系。

线性表的实现方式有顺序表和链表两种。

习题1:实现一个顺序表的插入、删除和查找操作。

- 插入操作通常在表的末尾进行,需要为新元素分配空间,并将其插入到正确的位置。

- 删除操作需要找到要删除的元素,并将其从表中移除,同时更新表的长度。

- 查找操作则是遍历表,直到找到目标元素或遍历结束。

习题2:实现一个单链表的插入、删除和逆序输出操作。

- 单链表的插入操作需要在链表的指定位置插入新节点,并更新前后节点的指针。

- 删除操作需要找到要删除的节点,并更新其前一个节点的指针,使其指向被删除节点的下一个节点。

- 逆序输出操作需要从链表的尾部开始遍历,直到链表的头部。

2. 栈和队列栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。

习题3:实现一个栈的入栈、出栈和判断栈空操作。

- 入栈操作是将元素压入栈顶。

- 出栈操作是将栈顶元素弹出。

- 判断栈空操作是检查栈顶指针是否为空。

习题4:实现一个循环队列的入队、出队和判断队列空操作。

- 入队操作是将元素添加到队列的尾部,并更新队列的长度。

- 出队操作是将队列头部的元素移除,并更新队列的长度。

- 判断队列空操作是检查队列的长度是否为零。

3. 树和二叉树树是具有层次结构的数据结构,二叉树是树结构的一种特殊形式,每个节点最多有两个子节点。

习题5:实现一个二叉树的前序、中序和后序遍历。

- 前序遍历是先访问根节点,然后递归地遍历左子树和右子树。

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

数据结构(C语言版)(第2版)习题解析揭安全李云清杨庆红编著江西师范大学计算机信息工程学院联系方式:*****************2012年12月第1章绪论1.1什么是数据结构?【答】:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合。

1.2 数据结构涉及哪几个方面?【答】:数据结构涉及三个方面的内容,即数据的逻辑结构、数据的存储结构和数据的运算集合。

1.3 两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有一个运算的定义不一样,它们是否可以认作是同一个数据结构?为什么?【答】:不能,运算集合是数据结构的重要组成部分,不同的运算集合所确定的数据结构是不一样的,例如,栈与队列它们的逻辑结构与存储结构可以相同,但由于它们的运算集合不一样,所以它们是两种不同的数据结构。

1.4 线性结构的特点是什么?非线性结构的特点是什么?【答】:线性结构元素之间的关系是一对一的,在线性结构中只有一个开始结点和一个终端结点,其他的每一个结点有且仅有一个前驱和一个后继结点。

而非线性结构则没有这个特点,元素之间的关系可以是一对多的或多对多的。

1.5 数据结构的存储方式有哪几种?【答】:数据结构的存储方式有顺序存储、链式存储、散列存储和索引存储等四种方式。

1.6 算法有哪些特点?它和程序的主要区别是什么?【答】:算法具有(1)有穷性(2)确定性(3)0个或多个输入(4)1个或多个输出(5)可行性等特征。

程序是算法的一种描述方式,通过程序可以在计算机上实现算法。

1.7 抽象数据类型的是什么?它有什么特点?【答】:抽象数据类型是数据类型的进一步抽象,是大家熟知的基本数据类型的延伸和发展。

抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。

对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。

一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。

抽象数据类型的设计者根据这些描述给出操作的具体实现,抽象数据类型的使用者依据这些描述使用抽象数据类型。

1.8 算法的时间复杂度指的是什么?如何表示?【答】:算法执行时间的度量不是采用算法执行的绝对时间来计算的,因为一个算法在不同的机器上执行所花的时间不一样,在不同时刻也会由于计算机资源占用情况的不同,使得算法在同一台计算机上执行的时间也不一样,另外,算法执行的时间还与输入数据的状态有关,所以对于算法的时间复杂性,采用算法执行过程中其基本操作的执行次数,称为计算量来度量。

算法中基本操作的执行次数一般是与问题规模有关的,对于结点个数为n的数据处理问题,用T(n)表示算法基本操作的执行次数。

为了评价算法的执行效率,通常采用大写O符号表示算法的时间复杂度,大写O符号给出了函数f的一个上限。

其它义如下:定义:f (n)=O (g (n)) 当且仅当存在正的常数c和n0,使得对于所有的n≥n0,有f (n) ≤c g(n)。

上述定义表明,函数f顶多是函数g的c倍,除非n 小于n0。

因此对于足够大的n (如n≥n0),g是f 的一个上限(不考虑常数因子c)。

在为函数f 提供一个上限函数g 时,通常使用比较简单的函数形式。

比较典型的形式是含有n的单个项(带一个常数系数)。

表1-1列出了一些常用的g函数及其名称。

对于表1-1中的对数函数logn,没有给出对数基,原因是对于任何大于1的常数a和b都有log a n =log b n/log b a,所以log a n和log b n都有一个相对的乘法系数1/log b a,其中a是一个常量。

表1-1常用的渐进函数1.9 算法的空间复杂度指的是什么?如何表示?【答】:算法的空间复杂度是指算法在执行过程中占用的额外的辅助空间的个数。

可以将它表示为问题规模的函数,并通过大写O符号表示空间复杂度。

1.10 对于下面的程序段,分析带下划线的语句的执行次数,并给出它们的时间复杂度T(n)。

(1)i++;(2)for(i=0;i<n;i++)if (a[i]<x) x=a[i];(3)for(i=0;i<n;i++)for(j=0;j<n;j++)printf(“%d”,i+j);(4)for (i=1;i<=n-1;i++){ k=i;for(j=i+1;j<=n;j++)if(a[j]>a[j+1]) k=j;t=a[k]; a[k]=a[i]; a[i]=t;}(5)for(i=0;i<n;i++)for(j=0;j<n;j++){++x;s=s+x;}【答】:(1)O(1);(2)O(n);(3)O(n2);(4)O(n2);(5)O(n2)第2章线性表及其顺序存储2.1 选择题(1)表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(E),删除一个元素所需移动元素的平均个数为(A)。

A.(n−1)/2 B.n C.n+1 D.n−1E.n/2 F.(n+1)/2 G.(n−2)/2(2)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列为e2、e4、e3、e6、e5和e1,则栈S 的容量至少应该为(C)。

A.6 B.4 C.3 D.2(3)设栈的输入序列为1、2、3…n,若输出序列的第一个元素为n,则第i个输出的元素为(B)。

A.不确定B.n−i+1 C.i D.n−i(4)在一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动(A)个元素。

A.n−i B.n−i+1 C.n−i−1 D.i(5)若长度为n的线性表采用顺序存储结构存储,在第i个位置上插入一个新元素的时间复杂度为(A)。

A.O(n) B.O(1) C.O(n2) D.O(n3) (6)表达式a*(b+c)−d的后缀表达式是(B)。

A.abcd*+−B.abc+*d−C.abc*+d−D.−+*abcd (7)队列是一种特殊的线性表,其特殊性在于(C)。

A.插入和删除在表的不同位置执行B.插入和删除在表的两端位置执行C.插入和删除分别在表的两端执行D.插入和删除都在表的某一端执行(8)栈是一种特殊的线性表,具有(B)性质。

A.先进先出B.先进后出C.后进后出D.顺序进出(9)顺序循环队列中(数组的大小为n),队头指示front指向队列的第1个元素,队尾指示rear指向队列最后元素的后1个位置,则循环队列中存放了n 1个元素,即循环队列满的条件为(B)。

A.(rear+1)%n=front−1B.(rear+1)%n=frontC.(rear)%n=front D.rear+1=front(10)顺序循环队列中(数组的大小为6),队头指示front和队尾指示rear的值分别为3和0,当从队列中删除1个元素,再插入2个元素后,front和rear的值分别为(D)。

A.5和1 B.2和4 C.1和5 D.4和22.2什么是顺序表?什么是栈?什么是队列?【答】:当线性表采用顺序存储结构时,即为顺序表。

栈是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入与删除操作只能在这种线性表的同一端进行(即栈顶),因此,栈具有先进后出、后进先出的特点。

队列也是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入在表的一端进行,数据的删除在表的另一端进行,因此队列具有先进先出,后进后出的特点。

2.3设计一个算法,求顺序表中值为x的结点的个数。

【答】:顺序表的存储结构定义如下(文件名seqlist.h):#include <stdio.h>#define N 100 /*预定义最大的数据域空间*/typedef int datatype; /*假设数据类型为整型*/typedef struct {datatype data[N]; /*此处假设数据元素只包含一个整型的关键字域*/int length; /*线性表长度*/} seqlist; /*预定义的顺序表类型*/算法countx(L,x)用于求顺序表L中值为x的结点的个数。

int countx(seqlist *L,datatype x){ int c=0;int i;for (i=0;i<L->length;i++)if (L->data[i]==x) c++;return c;}2.4 设计一个算法,将一个顺序表倒置。

即,如果顺序表各个结点值存储在一维数组a中,倒置的结果是使得数组a中的a[0]等于原来的最后一个元素,a[1] 等于原来的倒数第2个元素,…,a的最后一个元素等于原来的第一个元素。

【答】:顺序表的存储结构定义同题2.3,实现顺序表倒置的算法程序如下:void verge(seqlist *L){int t,i,j;i=0;j=L->length-1;while (i<j){ t=L->data[i];L->data[i++]=L->data[j];L->data[j--]=t;}}2.5已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为x的结点,使顺序表中的结点仍然是从小到大有序。

【答】:顺序表的定义同题2.3,实现本题要求的算法程序如下:void insertx(seqlist *L,datatype x){int j;if (L->length<N){ j=L->length-1;while (j>=0 && L->data[j]>x){ L->data[j+1]=L->data[j];j--;}L->data[j+1]=x;L->length++;}}2.6 将下列中缀表达式转换为等价的后缀表达式。

(1)5+6*7(2)(5-6)/7(3)5-6*7*8(4)5*7-8(5)5*(7-6)+8/9(6)7*(5-6*8)-9【答】:(7)5+6*7 后缀表达式:5 6 7*+(8)(5-6)/7 后缀表达式:5 6-7/(9)5-6*7*8 后缀表达式:5 6 7*8*-(10)5*7-8 后缀表达式:5 7* 8-(11)5*(7-6)+8/9 后缀表达式:5 7 6-*8 9/+(12)7*(5-6*8)-9 后缀表达式:7 5 6 8*-*9-2.7 循环队列存储在一个数组中,数组大小为n,队首指针和队尾指针分别为front和rear,请写出求循环队列中当前结点个数的表达式。

相关文档
最新文档