数据结构教程李春葆第4版知识点习题答案

数据结构教程李春葆第4版知识点习题答案
数据结构教程李春葆第4版知识点习题答案

第1章绪论

知识点归纳

一、数据结构概述

1.数据结构的定义

(1)基本概念

数据是描述客观事物的数和字符的集合,是计算机能操作的对象的总称,也是计算机处理信息的某种特定的符号表示形式。

(2)相关术语

① 数据元素

数据元素又称元素、节点、顶点、记录等。数据元素是数据的基本单位。有时候,一个数据元素可以由若干个数据项组成。

② 数据项

数据项又称字段或域,它是具有独立含义的最小数据单位。

③ 数据对象

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

(3)数据结构的内容

① 数据元素之间的逻辑关系,即数据的逻辑结构,它是数据结构在用户面前呈现的形式。

② 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,又称数据的物理结构。

③ 施加在数据上的操作,即数据的运算。

(4)逻辑结构

数据的逻辑结构是从逻辑关系(主要是指数据元素的相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

(5)存储结构

数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示(又称映像),也就是逻辑结构在计算机中的存储方式,它是依赖于计算机语言的。一般只在高级语言(例如C/C++语言)的层次上讨论存储结构。

数据的运算最终需在对应的存储结构上用算法实现。

总之,数据结构是一门讨论“描述现实世界实体的数学模型(通常为非数值计算)及其之上的运算在计算机中如何表示和实现”的学科。

(6)数据结构的表示

对于一种数据结构,其逻辑结构总是惟一的,但它可能对应多种存储结构,并且在不同的存储结构中,同一运算的实现过程可能不同。

描述数据结构通常采用二元组表示:

B=(D,R)

其中,B是一种数据结构,它由数据元素的集合D和D上二元关系的集合R组成,即:

D={d i | 1≤i≤n,n≥0}

R={r j | 1≤j≤m,m≥0}

其中d i表示集合D中的第i个数据元素(或节点),n为D中数据元素的个数,特别地,若n=0,则D 是一个空集。r j表示集合R中的第j个关系,m为R中关系的个数,特别地,若m=0,则R是一个空集,表明集合D中的数据元素间不存在任何关系,彼此是独立的,这和数学中集合的概念是一致的。

R中的一个关系r是序偶的集合,对于r中的任一序偶(x,y∈D),把x称作序偶的第一节点,把y称作序偶的第二节点,称序偶的第一节点为第二节点的前驱节点,称第二节点为第一节点的后继节点。若某个节点没有前驱节点,则称该节点为开始节点;若某个节点没有后继节点,则称该节点为终端节点。

对于对称序偶,即∈R,且∈R(x,y∈D),可用圆括号代替尖括号,即(x,y)∈R。

数据结构还可以利用图形形象地表示出来,图形中的每个节点对应一个数据元素,两节点之间的连线对应关系中的一个序偶。

2.逻辑结构类型

(1)集合

集合是指数据元素之间除了“同属于一个集合”的关系外,别无其他关系。

(2)线性结构

线性结构是指该结构中的节点之间存在一对一的关系。其特点是开始节点和终端节点都是惟一的,除了开始节点和终端节点以外,其余节点都有且仅有一个前驱,有且仅有一个后继。线性表就是一种典型的线性结构。

(3)树形结构

树形结构是指该结构中的节点之间存在一对多的关系。其特点是每个节点最多只有一个前驱,但可以有多个后继,且终端节点可以有多个。二叉树就是一种典型的树形结构。

(4)图形结构

图形结构是指该结构中的节点之间存在多对多的关系。其特点是每个节点的前驱和后继的个数都可以是任意的。图形结构可能没有开始节点和终端节点,也可能有多个开始节点、终端节点。

树形结构和图形结构统称为非线性结构。

3.存储结构类型

(1)顺序存储结构

① 存储方式

该结构是把逻辑上相邻的节点存储在物理位置上相邻的存储单元里,节点之间的逻辑关系由存储单元的邻接关系来体现。通常顺序存储结构是借助于计算机程序设计语言的数组来描述的。

② 优点

a.节省存储空间;

b.可实现对节点的随机存取。

③ 缺点

不便于修改,对节点进行插入、删除运算时,可能要移动一系列的节点。

(2)链式存储结构

① 存储方式

该结构不要求逻辑上相邻的节点在物理位置上也相邻,节点间的逻辑关系是由附加的指针字段表示的。通常链式存储结构要借助于计算机程序设计语言的指针类型来描述。

② 优点

便于修改,在进行插入、删除运算时,仅需修改相应节点的指针域,不必移动节点。

③ 缺点

a.与顺序存储方法相比,链式存储方法的主要缺点是存储空间的利用率较低;

b.由于逻辑上相邻的节点在存储空间中不一定相邻,所以不能对节点进行随机存取。

(3)索引存储结构

① 存储方式

该结构通常是在存储节点信息的同时,还建立附加的索引表。索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址),其中关键字惟一标识一个节点,地址是指向节点的指针。

② 优点

a.这种带有索引表的存储结构可以大大提高数据查找的速度;

b.可以对节点进行随机访问;

c.仍保持较高的数据修改运算效率。

③ 缺点

增加了索引表,降低了存储空间的利用率。

(4)散列(或哈希)存储结构

① 存储方式

该结构的基本思想是根据节点的关键字通过哈希(或散列)函数直接计算出一个值,并将这个值作为该节点的存储地址。

② 优点

查找速度快。

③ 缺点

哈希存储方法只存储节点的数据,不存储节点之间的逻辑关系。哈希存储方法一般只适合要求对数据进行快速查找和插入的场合。

上述4种基本的存储方法,既可以单独使用,也可以组合起来对数据结构进行存储映像。

4.数据类型和数据结构

(1)数据类型

① C/C++语言的基本数据类型

a.int型

int型是整型,可以有三个限定词short、long和unsigned,分别对应短整数、长整数和无符号整数。

b.bool型

bool型是逻辑型,其取值只能是false(假)和true(真)。

c.float型

float型是单精度浮点型。

d.double型

double型是双精度浮点型。

e.char型

char型是字符型,用于存放单个字符。

② C/C++语言的指针类型

存放地址的变量称作指针变量。有关指针的两个操作是:

a.定义了int i,则&i操作是取变量i的地址;

b.定义了int*p(这里的p是指向一个整数的指针),则*p操作是取p指针所指的值,即取p所指地址的内容。

③ C/C++语言的数组类型

数组是同一类型的一组有序数据元素的集合。

数组有一维数组和多维数组。数组名标识一个数组,下标指示一个数组元素在该数组中的顺序位置。数组下标的最小值称为下界,在C/C++中数组下界总为0。数组下标的最大值称为上界,在C/

C++中数组上界为数组大小减1。

④ C/C++语言中的结构体类型

结构体由一组称作结构体成员的项组成,每个结构体成员都有自己的标识符。

⑤ C/C++语言中的共用体类型

共用体是把不同的成员组织为一个整体,在存储器中共享一段存储单元,但不同的成员以不同的方式被解释。

⑥ C/C++语言中的自定义类型

C/C++语言中允许使用typedef关键字来指定一个新的数据类型名。

⑦ 引用运算符

C++语言中提供了一种引用运算符“&”,当建立引用时,程序用另一个已定义的变量或对象(目标)的名字初始化它,从那时起,引用就作为目标的别名使用,对引用的改动实际就是对目标的改动。

引用常用于函数形参中,采用引用型形参时,在函数调用时会将形参的改变回传给实参。

(2)抽象数据类型

① 抽象数据类型定义

抽象数据类型(ADT)指的是用户进行软件系统设计时从问题的数学模型中抽象出来的逻辑数据结构和逻辑数据结构上的运算。

② 表示方法

其基本格式如下:

ADT抽象数据类型名

{

数据对象:数据对象的声明

数据关系:数据关系的声明

基本运算:基本运算的声明

}ADT抽象数据类型名

其中基本运算的声明格式为:

a.基本运算名(参数表):运算功能描述;

b.基本运算有两种参数:赋值参数,只为运算提供输入值;引用参数,以&打头,除可提供输入值外,还将返回运算结果。

③ 特征

抽象数据类型有两个重要特征:

a.数据抽象:强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法);

b.数据封装:是指将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。

抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)如C++中的类来实现。

二、算法及其描述,

1.算法概述

(1)定义

数据元素之间的关系有逻辑关系和物理关系,对应的运算有逻辑结构上的运算(抽象运算)和具体存储结构上的运算(运算实现)。算法是在具体存储结构上实现某个抽象运算。

算法是对特定问题的求解步骤的一种描述。.

(2)特点

① 有穷性;

② 确定性;

③ 可行性;

④ 有输入;

⑤ 有输出。

程序可以无穷循环,不一定满足有穷性,但算法必须满足有穷性。

2.算法描述

常用于描述算法的C/C++语言基本语句:

(1)输入语句

scanf(格式控制字符串,输入项表);

(2)输出语句

printf(格式控制字符串,输出项表);

(3)赋值语句

变量名=表达式;

(4)条件语句

if(条件)语句;

或者

if(条件)语句1 else语句2;

(5)循环语句

while(表达式)循环体语句;

do循环体语句;

while表达式;

或者

for(赋初值表达式1;条件表达式2;步长表达式3)循环体语句;(6)返回语句

return(返回表达式);

(7)定义函数语句

函数返回值类型函数名(类型名形参1,类型名形参2,…)

函数返回值类型函数名(类型名形参1,类型名形参2,…)

{

说明部分;

函数语句部分;

}

(8)调用函数语句

函数名(实参1,实参2,…);

三、算法分析

1.算法设计的目标

(1)正确性;

(2)可使用性;

(3)可读性;

(4)健壮性;

(5)高效率与低存储量需求。

2.算法效率分析

通常有两种衡量算法效率的方法:事后统计法和事前分析估算法。一般采用事前分析估算法来分析算法效率。

一个算法的执行时间可以由其中基本运算的执行次数来计量。

算法中基本运算执行次数T(n)是问题规模n的某个函数f(n),记作:

T(n)=O(f(n))

记号“O”读作“大O”(是Order的简写,意指数量级),它表示随问题规模n的增大,算法执行时间的

增长率和f(n)的增长率相同。各种不同数量级对应的值存在着如下关系:

O(1)

一般情况下,计算一个算法的基本运算次数是相当困难的,甚至是不可能的(因为一个算法的不同输入往往产生不同的运算次数,而一个算法的所有不同输入的数目可能十分庞大)。一种可行的方法是计算算法的平均运算次数。

定义设一个算法的输入规模为n,D n是所有输入的集合,任一输入I∈D n,P(I)是I出现的频率,有,T(I)是算法在输入I下所执行的基本运算次数,则该算法的期望时间复杂度为:

该算法的最坏时间复杂度为:

3.算法存储空间分析

一个算法的存储量包括输入数据所占空间、程序本身所占空间和辅助变量所占空间。空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的量度,一般也作为问题规模n的函数,以数量级形式给出,记作:

S(n)=O(g(n))

若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作或就地工作。若所需存储量依赖于特定的输入,则通常按最坏情况考虑。

对于递归算法,为了实现递归过程用到一个递归栈,所以需要根据递归深度得到算法的空间复杂度。

四、数据结构+算法=程序

1.程序和数据结构

著名的计算机科学家沃思(N.Wirth)指出,程序就是在数据的某些特定的表示方法和结构的基础

上,对抽象算法的具体表述,所以程序离不开数据结构。

程序是通过某种程序设计语言描述的,程序设计语言有实现数据结构和算法的机制,类型定义与对象说明和语句是其主要部分。程序设计语言中的类型定义与对象说明实现数据结构;程序设计语言中语句实现算法,描述了程序的行为。

2.算法和程序

由程序设计语言描述的算法就是计算机程序。对求解一个问题而言,算法就是解题的方法,没有算法,程序就成了无本之末,无源之水。算法在程序设计、软件开发甚至在整个计算机科学中的地位都是极其重要的。

3.算法和数据结构

通过分析算法的时间复杂度和空间复杂度等,可以得到好的算法,如图1-1所示。

图1-1 设计好算法的过程

存储结构对算法的影响主要在两方面:

(1)存储结构的存储能力

如果存储结构存储能力强、存储信息多,算法将会较好设计。反之对于过于简单的存储

结构,可能就要设计一套比较复杂的算法。在这一点上,经常存在时间与空间的矛盾,因为存储能力往往是与所使用的空间大小成正比的。

(2)存储结构应与所选择的算法相适应

设计算法与选择合适的数据结构是程序设计中相辅相成的两方面,缺一不可。

算法通常是决定程序效率的关键,但一切算法最终都要在相应的数据结构上实现,许多算法的精髓就是在于选择了合适的数据结构作为基础。在程序设计中,不但要注重算法设计,也要正确地选择数据结构,这样往往能够事半功倍。

4.数据结构的发展

早期的计算机主要应用于科学计算,随着计算机的发展和应用范围的拓宽,要求人们对计算机加工处理的对象进行系统的研究,即研究数据的特性、数据之间存在的关系,以及如何有效地组织、管理存储数据,从而提高计算机处理数据的效率。数据结构这门学科就是在这样的背景下逐渐形成和发展起来的。

数据结构的概念最早由C.A.R.Hoare和N.Wirth于1966年提出,而对数据结构发展作出杰出贡献的是D.E.Kunth和C.A.R.Hoare。

习题解答

1.简述数据与数据元素的关系与区别。

答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。数据元素是数据的基本单位,是数据的个体。数据与元素之间的关系是元素与集合之间的关系。

2.数据结构和数据类型有什么区别?

答:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。

3.设3个表示算法频度的函数f、g和h分别为:

f(n)=100n3+n2+1000

g(n)=25n3+5000n2 h

(n)=n1.5+5000nlog2n

求它们对应的时间复杂度。

答:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3),

当n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n= O(n1.5)。

4.用C/C++语言描述下列算法,并给出算法的时间复杂度。

(1)求一个n阶方阵的所有元素之和。

(2)对于输入的任意三个整数,将它们按从小到大的顺序输出。

(3)对于输入的任意n个整数,输出其中的最大和最小元素。

答:(1)算法如下:

本算法的时间复杂度为O(n2)。

(2)算法如下:

本算法的时间复杂度为O(1)。

(3)算法如下:

本算法的时间复杂度为O(n)。

5.设n为正整数,给出下列各种算法关于n的时间复杂度。

(1)

(2)

(3)

答:(1)设while循环语句执行次数为T(n),则:

(2)算法中的基本运算语句是if(b[k]>b[j])k=j,其执行次数T(n)为:

(3)设while循环语句执行次数为T(n),则:

李春葆数据结构习题与解析

一、绪论 选择题 1.数据结构是一门研究非数值计算的程序设计问题计算机的以及它们之间的和运算等的学科。 1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2 A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是的有限集,R是K上的有限集。 1 A.算法 B.数据元素 C.数据操作 D.逻辑结构 2 A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4.线性结构的顺序存储结构是一种的存储结构,线性表的链式存储结构是一种的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是,算法分析的两个主要方面是。 1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.正确性和简单性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是,它必须具备输入、输出和等5个特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。 A.正确 B.不正确 8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续不连续都可以 9.以下的叙述中,正确的是。 A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表 C.栈的操作方式是先进先出 D.队列的操作方式是先进后出 10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。 A.正确 B.不正确 填空题 1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。 2.在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3.在树形结构中,树根结点没有结点,其余每个结点有且只有个前驱结点;叶子结点没有结点,其余每个结点的后续可以。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以。 5.线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结

数据结构教程李春葆第4版知识点习题答案

第1章绪论 知识点归纳 一、数据结构概述 1.数据结构的定义 (1)基本概念 数据是描述客观事物的数和字符的集合,是计算机能操作的对象的总称,也是计算机处理信息的某种特定的符号表示形式。 (2)相关术语 ① 数据元素 数据元素又称元素、节点、顶点、记录等。数据元素是数据的基本单位。有时候,一个数据元素可以由若干个数据项组成。 ② 数据项 数据项又称字段或域,它是具有独立含义的最小数据单位。 ③ 数据对象 数据对象是性质相同的数据元素的集合,它是数据的子集。 (3)数据结构的内容 ① 数据元素之间的逻辑关系,即数据的逻辑结构,它是数据结构在用户面前呈现的形式。 ② 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,又称数据的物理结构。 ③ 施加在数据上的操作,即数据的运算。 (4)逻辑结构 数据的逻辑结构是从逻辑关系(主要是指数据元素的相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。 (5)存储结构 数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示(又称映像),也就是逻辑结构在计算机中的存储方式,它是依赖于计算机语言的。一般只在高级语言(例如C/C++语言)的层次上讨论存储结构。 数据的运算最终需在对应的存储结构上用算法实现。 总之,数据结构是一门讨论“描述现实世界实体的数学模型(通常为非数值计算)及其之上的运算在计算机中如何表示和实现”的学科。 (6)数据结构的表示 对于一种数据结构,其逻辑结构总是惟一的,但它可能对应多种存储结构,并且在不同的存储结构中,同一运算的实现过程可能不同。 描述数据结构通常采用二元组表示:

李春葆《数据结构教程》(第4版)笔记和课后习题详解(第8~10章)【圣才出品】

李春葆《数据结构教程》(第4版)笔记和课后习题详解 第8章图 8.1复习笔记 一、图的基本概念 1.图的定义 图都是由顶点和边构成的。采用形式化的定义,图G由两个集合V和E组成,记为G =(V,E),其中V是顶点的有限集合,记为V(G),E是连接V中两个不同顶点(顶点对)的边的有限集合,记为E(G)。 抽象数据类型图的定义如下: 2.图的基本术语 (1)端点和邻接点 在一个无向图中,若存在一条边(i,j),则称顶点i和顶点j为该边的两个端点,并称它们互为邻接点,即顶点i是顶点j的一个邻接点,顶点j也是顶点i的一个邻接点。

(2)顶点的度、入度和出度 ①度 在无向图中,某顶点所具有的边的数目称为该顶点的度。 ②入度 在有向图中,顶点i的度又分为入度和出度,以顶点i为终点的入边的数目,称为该顶点的入度。 ③出度 以顶点i为起点的出边的数目,称为该顶点的出度。一个顶点的入度与出度的和为该顶点的度。 (3)完全图 若无向图中每两个顶点之间都存在一条边,或有向图中每两个顶点之间都存在着方向相反的两条边,则称此图为完全图。 (4)稠密图和稀疏图 ①稠密图 当一个图接近完全图时,称为稠密图。 ②稀疏图 当一个图含有较少的边数(即当e<<n(n-1))时,则称为稀疏图。 (5)子图 设有两个图G=(V,E)和G′=(V′,E′),若V′是V的子集,即V′≤V,且E′是E的子集,即E′≤E,则称G′是G的子图。 (6)路径和路径长度 ①路径

在一个图G=(V,E)中,从顶点i到顶点j的一条路径是一个顶点序列(i,i1,i2,…,i m),若此图G是无向图,则边(i,i1),(i1,i2),…,(i m-1,i m),(i m,j)属于E(G);若此图是有向图,N,…,属于E(G)。 ②路径长度 路径长度是指一条路径上经过的边的数目。 (7)回路或环 若一条路径上的开始点与结束点为同一个顶点,则称此路径为回路或环。开始点与结束点相同的简单路径称为简单回路或简单环。 (8)连通、连通图和连通分量 ①连通 在无向图G中,若从顶点i到顶点j有路径,则称顶点i和顶点j是连通的。 ②连通图 若图G中任意两个顶点都连通,则称G为连通图,否则称为非连通图。 ③连通分量 无向图G中的极大连通子图称为G的连通分量。 (9)连通、强连通图和强连通分量 ①强连通图 在有向图G中,若从顶点i到顶点j有路径,则称从顶点i到顶点j是连通的。若图G 中的任意两个顶点i和顶点j都连通,即从顶点i到顶点j和从顶点j到顶点i都存在路径,则称图G是强连通图。 ②强连通分量 有向图G中的极大强连通子图称为G的强连通分量。显然,强连通图只有一个强连通

李春葆《数据结构教程》(第4版)课后习题-查找(圣才出品)

第9章查找 1.对于有序表A[0..10],采用二分查找法时,求成功和不成功时的平均查找长度。对于有序表{12,18,24,35,47,50,62,83,90,115,134},当用二分查找法查找90时,需进行多少次查找可确定成功?查找47时,需进行多少次查找可确定成功?查找100时,需进行多少次查找才能确定不成功? 答:对于A[0..10]有序表构造的判定树如图9-1(a)所示。因此有: 对于本题给定的有序表构造的判定树如图9-1(b)所示,由此可知本题答案分别为2、4和3。 图9-1 一棵判定树 2.将整数序列{4,5,7,2,1,3,6}中的数依次插入到一棵空的二叉排序树中,试构造相应的二叉排序树,要求用图形给出构造过程,不需编写程序。 答:构造一棵二叉排序树过程如图9-2所示。

图9-2 构造二叉排序树过程 3.将整数序列{4,5,7,2,1,3,6}中的数依次插入到一棵空的平衡二叉树中,试构造相应的平衡二叉树,要求用图形的方式给出构造过程,不需编写程序。 答:构造一棵平衡二叉树过程如图9-3所示。

图9-3 构造平衡二叉树过程 4.编写一个算法,输出在一棵二叉排序树中查找某个关键字k经过的路径。 答:使用path数组存储经过的节点,当找到所要找的节点时,输出path数组中的元素值,从而输出以根节点到当前节点的路径。对应的算法如下:

查找关键字3:3425 从中看到,两者输出的路径相反,SearchBSTl()更灵活些,它可以对路径上经过的节点进行相应的处理。 5.编写一个算法,判断给定的二叉树是否是二叉排序树。 答:对二叉排序树来说,其中序遍历序列为一个递增有序序列。因此,对给定的二叉树进行中序遍历,如果始终能保持前一个值比后一个值小,则说明该二叉树是一棵二叉排序树。对应的算法如下: 6.已知一个关键字序列为if、while、for、case、do、break、else、struct、union、int、double、float、char、long、bool共15个字符串,哈希函数H(key)为关键字的第一个字母在字母表中的序号,哈希表的表长为26。 (1)若处理冲突的方法采用线性探查法,设计一个算法输出每个关键字对应的H(key)、输出哈希表并求成功情况下的平均查找长度。 (2)若处理冲突的方法采用链地址法,设计一个算法输出哈希表并计算成功情况下和

李春葆《数据结构教程》笔记和课后习题详解(绪论)【圣才出品】

第1章绪论 1.1 复习笔记 一、数据结构 1.概述 (1)计算机对具体问题的处理 在用计算机解决一个具体的问题时,大致需要经过以下几个步骤: ①分析问题,确定数据模型。 ②设计相应的算法。 ③编写程序,运行并调试程序,直至得到正确的结果。 (2)数据的含义 ①数据是描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序处理的符号的集合。从计算机的角度看,数据是所有能被输入到计算机中,且能被计算机处理的符号的集合。它是计算机操作的对象的总称,也是计算机所处理信息的某种特定的符号表示形式。 ②数据元素是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,有些情况下数据元素也称为元素、结点、记录等。一个数据元素可以由若干个数据项组成。数据项是具有独立含义的数据的最小单位,也称为域。 ③数据对象是性质相同的有限个数据元素的集合,它是数据的一个子集。 默认情况下,数据结构中的数据指的都是数据对象。 (3)数据结构的定义

数据结构是指所有数据元素以及数据元素之间的关系,可以看作是相互之间存在特定关系的数据元素的集合,因此,可时把数据结构看成是带结构的数据元素的集合。数据结构包括以下几个方面: ①数据元素之间的逻辑关系,即数据的逻辑结构,它是数据结构在用户面前呈现的形式。 数据的逻辑结构是从逻辑关系(主要指数据元素的相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。 ②数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,也称为数据的物理结构。 数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示(也称为映像),也是指逻辑结构在计算机中的存储方式,它是依赖于计算机语言的。一般情况下,只在高级语言(如C、C++、Java语言)的层次上讨论存储结构。 ③施加在该数据上的操作,即数据的运算。 数据的运算是定义在数据的逻辑结构之上的,每种逻辑结构都有一组相应的运算。最常用的运算有检索、插入、删除、更新、排序等。数据的运算最终需要在对应的存储结构上用算法实现。 因此,数据结构是一门讨论“描述现实世界实体的数学模型(通常为非数值计算)及其之上的运算在计算机中如何表示和实现”的学科。 2.数据的逻辑结构 讨论数据结构的目的是为了用计算机求解问题,分析并弄清数据的逻辑结构是求解问题的基础。 数据的逻辑结构是用户根据需要建立起来的数据组织形式,它反映数据元素之间的逻辑

李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)

第4章串 1.采用顺序结构存储串,编写一个实现串通配符匹配的算法pattern______index(),其中的通配符只有“?”,它可以和任一字符匹配成功,例如,pattern______index(″? re″,″there are″)返回的结果是2。 答:本题的基础是Brute—Force模式匹配算法,只是增加了“?”的处理功能。对应的算法如下: 2.有两个串s1和s2,设计一个算法求这样一个串,该串中的字符是s1和s2中的公共字符。 答:扫描s1,对于当前字符s1.data[i],若在s2中,则将其加入到串s3中。最后返回s3串。对应的算法如下:

3.设目标为t=’abcaabbabcabaacbacba’,模式p=’abcabaa’。(1)计算模式P的nextval函数值。 (2)不写算法,只画出利用KMP算法进行模式匹配时的每一趟匹配过程。答:(1)先计算next数组,在此基础上求nextval数组,如表4-1所示。 表4-1 计算next数组和nextval数组 (2)采用KMP算法求子串位置的过程如下(开始时i=0,j=0): 第1趟匹配: 此时i=4,j=4,匹配失败,而nextval[4]=0,则i=4,j=nextval[4]=0,即:

第2趟匹配: 此时i=6,j=2,匹配失败,而nextval[2]=0,则i=6,j=nextval[2]=0,即: 第3趟匹配: 此时i=6,j=0,匹配失败,而nextval[0]=-1,则i=6,j=nextval[0]=-1。因j=-1,执行i=i+1=7,j=j+1=0,即: 第4趟匹配: 此时i=14,j=7,匹配成功,返回v=i-t.1ength=14-7=7。 上机实验题4 实验题1编写一个程序algo4-1.cpp,实现顺序串的各种基本运算,并在此基础上设计一个程序exp4-1.cpp完成如下功能: (1)建立串s=″abcdefghefghijklmn″和串sl=″xyz″; (2)输出串s; (3)输出串s的长度;

李春葆数据结构习题与解析(修订版)知识分享

李春葆编著:数据结构(C语言篇)――习题与解析(修订版) 清华大学出版社 一、绪论 选择题 1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。 1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2 A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。 1 A.算法 B.数据元素 C.数据操作 D.逻辑结构 2 A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是1,算法分析的两个主要方面是2。 1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.正确性和简单性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。 A.正确 B.不正确 8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续不连续都可以 9.以下的叙述中,正确的是。 A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表 C.栈的操作方式是先进先出 D.队列的操作方式是先进后出 10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。 A.正确 B.不正确 填空题 1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。 2.在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3.在树形结构中,树根结点没有结点,其余每个结点有且只有个前驱结点;叶子结点没有结点,其余每个结点的后续可以。

数据结构教程李春葆课后答案第9章查找

第9章 查找 教材中练习题及参考答案 1. 设有5个数据do 、for 、if 、repeat 、while ,它们排在一个有序表中,其查找概率分别是p 1=0.2,p 2=0.15,p 3=0.1,p 4=0.03,p 5=0.01。而查找它们之间不存在数据的概率分别为q 0=0.2,q 1=0.15,q 2=0.1,q 3=0.03,q 4=0.02,q 5=0.01,该有序表如下: (1)试画出对该有序表分别采用顺序查找和折半查找时的判定树。 (2)分别计算顺序查找的查找成功和不成功的平均查找长度。 (3)分别计算折半查找的查找成功和不成功的平均查找长度。 答:(1)对该有序表分别采用顺序查找和折半查找时的判定树分别如图9.2和9.3所示。 (2)对于顺序查找,成功查找到第i 个元素需要i 次比较,不成功查找需要比较的次数为对应外部结点的层次减1: ASL 成功=(1p 1+2p 2+3p 3+4p 4+5p 5)=0.97。 ASL 不成功=(1q 0+2q 1+3q 2+4q 3+5q 4+5q 5)=1.07。 (3)对于折半查找,成功查找需要比较的次数为对应内部结点的层次,不成功查找需要比较的次数为对应外部结点的层次减1: ASL 成功=(1p 3+2(p 1+p 4)+3(p 2+p 5))=1.04。 ASL 不成功=(2 q 0 q 5

图9.3 有序表上折半查找的判定树 2. 对于A [0..10]有序表,在等概率的情况下,求采用折半查找法时成功和不成功的平均查找长度。对于有序表(12,18,24,35,47,50,62,83,90,115,134),当用折半查找法查找 90时,需进行多少次查找可确定成功;查找47时需进行多少次查找可确定成功;查找100时,需进行多少次查找才能确定不成功。 答:对于A [0..10]有序表构造的判定树如图9.4(a )所示。因此有: ASL 成功= 114 4342211?+?+?+?=3 ASL 不成功= 12 4 834?+?=3.67 对于题中给定的有序表构造的判定树如图9.4(b )所示。查找 90时,关键字比较次序是50、90,比较2次。查找47时,关键字比较次序是50、24、35、47,比较4次。查找100时,关键字比较次序是50、90、115,比较3次。 图9.4 两棵判定树 3. 有以下查找算法: int fun(int a[],int n,int k) (a ) (b )

李春葆《数据结构教程》(第4版)课后习题-第一章至第十二章(圣才出品)

第二部分课后习题 第1章绪论 1.简述数据与数据元素的关系与区别。 答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。数据元素是数据的基本单位,是数据的个体。数据与元素之间的关系是元素与集合之间的关系。 2.数据结构和数据类型有什么区别? 答:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。 3.设3个表示算法频度的函数f、g和h分别为: f(n)=100n3+n2+1000 g(n)=25n3+5000n2 h(n)=n1.5+5000nlog2n 求它们对应的时间复杂度。 答:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3), 当n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n=O(n1.5)。

4.用C/C++语言描述下列算法,并给出算法的时间复杂度。(1)求一个n阶方阵的所有元素之和。 (2)对于输入的任意三个整数,将它们按从小到大的顺序输出。(3)对于输入的任意n个整数,输出其中的最大和最小元素。答:(1)算法如下: 本算法的时间复杂度为O(n2)。 (2)算法如下: 本算法的时间复杂度为O(1)。 (3)算法如下:

本算法的时间复杂度为O(n)。 5.设n为正整数,给出下列各种算法关于n的时间复杂度。(1) (2) (3)

李春葆《数据结构教程》(C++语言描述)模拟试题及详解(一~二)【圣才出品】

李春葆《数据结构教程》(C++语言描述)模拟试题及详解(一) 一、单项选择题(每小题2分,共20分) 1.队列的特点是()。 A.先进后出 B.先进先出 C.任意位置进出 D.前面都不正确 【答案】B 2.有n个记录的文件,如关键字位数为d,基数为r,则基数排序共要进行()遍分配与收集。 A.n B.d C.r D.n-d 【答案】B 【解析】基数排序是按组成关键字的各位值进行分配收集而完成的。 3.在二叉树节点的先序序列、中序序列和后序序列中,所有叶子节点的先后顺序()。 A.都不相同

B.完全相同 C.先序和中序相同,而与后序不同 D.中序和后序相同,而与先序不同 【答案】B 【解析】无论是哪种遍历方式,遍历叶子节点时,都是先访问左子树,后访问右子树。 4.限定在一端加入和删除元素的线性表称为()。 A.双向链表 B.单向链表 C.栈 D.队列 【答案】C 【解析】根据栈后进先出的特性,可见栈都在一端对元素进行操作。 5.设内存工作区可容纳8个记录,初始文件共有64个关键字不同的记录,且已按关键字递减排列,如用置换.选择排序产生初始归并段,最长初始归并段所含记录数是()。 A.6 B.7 C.8 D.9 【答案】C

【解析】对于置换选择排序,输入的文件是以关键字降序排列时,所得的初始归并段的最大长度为工作区的大小。当输入的文件以关键字的升序排序时,只能得到一个长度为文件长度的初始归并段。 6.设森林F对应的二叉树为B,它有m个节点,B的根为p,p的右子树上的节点个数为n,森林F中第一棵树的节点个数是()。 A.m-n-1 B.n+l C.m-n+1 D.m-n 【答案】D 7.设有198个初始归并段,如采用K-路平衡归并三遍完成排序,则K值最大为()。A.12 B.13 C.14 D.15 【答案】C 【解析】k一路平衡归并,归并趟数公式s=[1og k m],m指归并段数,s指趟数。要三遍完成遍历,那就看两遍完成排序的需遍历的最小数。把s=2和m=198带入公式,可知两遍完成排序时k最小为15,所以k<15。

大数据结构李春葆习题与解析汇报

标准 数据结构(C语言篇)―习题与解析(修订版)清华大学 一、绪论 选择题 1.数据结构是一门研究非数值计算的程序设计问题计算机的以 及它们之间的和运算等的学科。 1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2 A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是的有限集,R是K 上的有限集。 1 A.算法 B.数据元素 C.数据操作 D.逻辑结构 2 A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.部结构和外部结构 4.线性结构的顺序存储结构是一种A 的存储结构,线性表的链式 存储结构是一种B 的存储结构。

A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是C ,算法分析的两个主要方面是AB 。 1 A.找出数据结构的合理性 B.研究算法中的输入和输出文案.标准 的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.正确性和简单性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是C ,它必须具备输入、输出和B 等5个 特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法 B 。 A.正确 B.不正确 8线性表若采用链式存储结构时,要求存中可用存储单元的地址 D 。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续

李春葆《数据结构教程》(第4版)课后习题-树和二叉树(圣才出品)

第7章树和二叉树 1.设二叉树bt的存储结构如下所示: 其中,bt为树根节点指针;lchild、rchild分别为节点的左、右孩子指针域,在这里使用节点编号作为指针域值,0表示指针域值为空;data为节点的数据域。请完成下列各题:(1)画出二叉树bt的树形表示; (2)写出按先序、中序和后序遍历二叉树bt所得到的节点序列; (3)画出二叉树bt的后序线索树。 答:(1)二叉树bt的树形表示如下图所示: (2)先序遍历序列:abcedfhgij 中序遍历序列:ecbhfdjiga 后序遍历序列:echfjigdba (3)二叉树bt的后序遍历序列为echfjigdba,则后序线索树如图所示:

2.已知一棵二叉树的中序序列为cbedahgijf,后序序列为cedbhjigfa,给出该二叉树树形表示。 答:如图所示: 3.设给定权集w={2,3,4,7,8,9},试构造关于w的一棵哈夫曼树,并求其带权路径长度WPL。 答:由权值集合w构造的哈夫曼树如图所示。其带权路径长度WPL=(9+7+8)

×2+4×3+(2+3)×4=80。 4.一棵具有n个节点的完全二叉树以顺序方式存储在数组A中,假设每个节点的元素为单个字符,没有对应节点时A中元素取值为“#”。设计一个算法构造该二叉树的二叉链存储结构。 答:对于以顺序方式存储在数组A(其大小为MaxSize)中的一棵完全二叉树,节点A[i]的左孩子为A[2i](如果存在左孩子),右孩子为A[2i+1](如果存在右孩子)。采用递归方式创建该二叉树的二叉链存储结构。对应的算法如下: 5.假设二叉树中每个节点的值为单个字符。设计一个算法将一棵以二叉链方式存储的

数据结构李春葆习题与解析

数据结构(C语言篇)―习题与解析(修订版)清华大学出版社 一、绪论 选择题 1.数据结构是一门研究非数值计算的程序设计问题计算机的以 及它们之间的和运算等的学科。 1A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是的有限集,R是K 上的有限集。 1A.算法 B.数据元素 C.数据操作 D.逻辑结构 2A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4.线性结构的顺序存储结构是一种A的存储结构,线性表的链式 存储结构是一种B的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是C,算法分析的两个主要方面是AB。

1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.正确性和简单性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是C,它必须具备输入、输出和B等5个 特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法B。 A.正确 B.不正确 8线性表若采用链式存储结构时,要求内存中可用存储单元的地址D。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续不连续都可以 9.以下的叙述中,正确的是B。 A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表

李春葆《数据结构教程》(第4版)章节题库-线性表(圣才出品)

第2章线性表 一、选择题 1.线性表是具有n个()的有限序列(n>0)。 A.表元素 B.字符 C.数据元素 D.数据项 E.信息项 【答案】C 【解析】一个线性表是n个数据元素的有限序列。至于每个数据元素的具体含义,在不同的情况下各不相同。 2.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。 A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表 【答案】A 【解析】线性表采用顺序表,便于进行存取任一指定序号的元素;线性表采用链表,便于进行插入和删除操作。但该题是在最后进行插入和删除运算,所以利用顺序表存储方式最

节省时间。 3.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。 A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表 【答案】D 【解析】仅有尾指针的单循环链表,在最后插入元素和删除第一个元素都会用到这个尾指针。 4.若线性表最常用的操作是存取第I个元素及其前驱和后继元素的值,为节省时间应采用的存储方式()。 A.单链表 B.双向链表 C.单循环链表 D.顺序表 【答案】D 【解析】线性表采用顺序表,便于进行存取任一指定序号的元素。 5.静态链表中指针表示的是()。

A.下一元素的地址 B.内存储器的地址 C.下一元素在数组中的位置 D.左链或右链指向的元素的地址 【答案】C 【解析】静态链表的一般结构为:struct static______list{ ElemType data; int next;} 这种结构是预先分配一个较大的空间,类似于一次申请一个较大的数组,但是元素的增删操作都不会移动元素,只需要移动next成员就行。因此,静态链表中的指针实际上表示的就是下一个元素在数组中的位置。 6.链表不具有的特点是()。 A.插入、删除不需要移动元素 B.可随机访问任一元素 C.不必事先估计存储空间 D.所需空间与线性长度成正比 【答案】B 【解析】B项是顺序表的特点。只要确定了顺序线性表的起始位置,线性表中的任一数据元素都可随机存取。 7.单链表中,增加一个头结点的目的是为了()。 A.使单链表至少有一个结点 B.标识表结点中首结点的位置

李春葆《数据结构教程》(第4版)配套题库-模拟试题(圣才出品)

第四部分模拟试题 李春葆《数据结构教程》(第4版)模拟试题及详解(一) 一、单项选择题(每小题2分,共20分) 1.队列的特点是()。 A.先进后出 B.先进先出 C.任意位置进出 D.前面都不正确 【答案】B 2.有n个记录的文件,如关键字位数为d,基数为r,则基数排序共要进行()遍分配与收集。 A.n B.d C.r D.n-d 【答案】B 【解析】基数排序是按组成关键字的各位值进行分配收集而完成的。 3.在二叉树节点的先序序列、中序序列和后序序列中,所有叶子节点的先后顺序

()。 A.都不相同 B.完全相同 C.先序和中序相同,而与后序不同 D.中序和后序相同,而与先序不同 【答案】B 【解析】无论是哪种遍历方式,遍历叶子节点时,都是先访问左子树,后访问右子树。 4.限定在一端加入和删除元素的线性表称为()。 A.双向链表 B.单向链表 C.栈 D.队列 【答案】C 【解析】根据栈后进先出的特性,可见栈都在一端对元素进行操作。 5.设内存工作区可容纳8个记录,初始文件共有64个关键字不同的记录,且已按关键字递减排列,如用置换.选择排序产生初始归并段,最长初始归并段所含记录数是()。 A.6 B.7 C.8 D.9

【答案】C 【解析】对于置换选择排序,输入的文件是以关键字降序排列时,所得的初始归并段的最大长度为工作区的大小。当输入的文件以关键字的升序排序时,只能得到一个长度为文件长度的初始归并段。 6.设森林F对应的二叉树为B,它有m个节点,B的根为p,p的右子树上的节点个数为n,森林F中第一棵树的节点个数是()。 A.m-n-1 B.n+l C.m-n+1 D.m-n 【答案】D 7.设有198个初始归并段,如采用K-路平衡归并三遍完成排序,则K值最大为()。 A.12 B.13 C.14 D.15 【答案】C 【解析】k一路平衡归并,归并趟数公式s=[1og k m],m指归并段数,s指趟数。要三遍完成遍历,那就看两遍完成排序的需遍历的最小数。把s=2和m=198带入公式,可知两遍完成排序时k最小为15,所以k<15。

李春葆数据结构教程第4版习题答案

1章答案 1.简述数据与数据元素的关系与区别。 解:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。数据元素是数据的基本单位,是数据的个体。数据与元素之间的关系是元素与集合之间的关系。 2.数据结构和数据类型有什么区别? 解:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。 3.设3个表示算法频度的函数f、g和h分别为: f(n)=100n3+n2+1000 g(n) =25n3+5000n2 h(n) =n1.5+5000nlog2n 求它们对应的时间复杂度。 解:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3),当 n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n= O(n1.5)。 4.用C/C++语言描述下列算法,并给出算法的时间复杂度。 (1)求一个n阶方阵的所有元素之和。 (2)对于输入的任意三个整数,将它们按从小到大的顺序输出。 (3)对于输入的任意n个整数,输出其中的最大和最小元素。 解:(1)算法如下: 本算法的时间复杂度为O(n2)。 (2)算法如下:

本算法的时间复杂度为O(1)。 (3)算法如下: 本算法的时间复杂度为O(n)。 5.设n为正整数,给出下列各种算法关于n的时间复杂度。 (1) (2) (3) 解:(1)设while循环语句执行次数为T(n),则: (2)算法中的基本运算语句是if(b[k]>b[j])k=j,其执行次数T(n)为: (3)设while循环语句执行次数为T(n),则:

李春葆《数据结构教程》(第4版)课后习题-递归(圣才出品)

第5章递归 1.有以下递归函数: 分析调用fun(5)的输出结果。 答:调用递归函数fun(5)时,先递推直到递归出口,然后求值。这里的递归出口语句是,递推时执行的语句是,求值时执行的语句是调用fun(5)的输出结果如下: 2.已知A[n]为整数数组,编写一个递归算法求n个元素的平均值。 答:设avg(A,i)返回A[0..i]这i+1个元素的平均值,则递归模型如下: 对应的递归算法如下:

求A[n]中n个元素平均值的调用方式为:avg(A,n-1)。 3.设计一个算法求整数n的位数。 答:设f(n)为整数n的位数,其递归模型如下: 对应的递归算法如下: 4.设有一个不带表头节点的单链表L,其节点类型如下: 设计如下递归算法: (1)求以L为首节点指针的单链表的节点个数。 (2)正向显示以L为首节点指针的单链表的所有节点值。(3)反向显示以L为首节点指针的单链表的所有节点值。(4)删除以L为首节点指针的单链表中值为x的第一个节点。(5)删除以L为首节点指针的单链表中值为x的所有节点。

(6)输出以L为首节点指针的单链表中最大节点值。 (7)输出以L为首节点指针的单链表中最小节点值。 答:根据单链表的基本知识,设计与各小题对应的递归算法如下:(1) (2) (3) (4) (5)

(6) (7) 上机实验题5 实验题1 编写一个程序exp5-1.cpp,求解皇后问题:在n×n的方格棋盘上,放置n 个皇后,要求每个皇后不同行、不同列、不同左右对角线。要求: (1)皇后的个数n由用户输入,其值不能超过20,输出所有的解。 (2)采用递归方法求解。 实验题2编写一个程序exp5-2.cpp,求解背包问题:设有不同价值、不同重量的物品

李春葆《数据结构教程》(第4版)章节题库-第九章至第十二章(圣才出品)

第9章查找 一、选择题 1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为()。 A.(n-1)/2 B.n/2 C.(n+1)/2 D.n 【答案】C 【解析】最快查找一次成功,最慢查找n次成功。平均查找次数为(1+2+3+…+n)/n,那么ASL=(n+1)/2。 2.在一个有N个元素的有序单链表中查找具有给定关键字的结点,平均情况下的时间复杂性为()。 A.O(1) B.O(N) C.O(N2)D.O(NlogN) 【答案】B 【解析】二分查找的时间复杂度为O(logn)。在一个用N个元素的有序单链表中查找具有给定关键字的结点,因为查找是从头结点开始的,需要使用指针顺序往下查找,因此时间复杂度为0(N)。

3.对线性表进行折半查找时,要求线性表必须()。 A.以顺序方式存储 B.以顺序方式存储,且数据元素有序 C.以链接方式存储 D.以链接方式存储,且数据元素有序 【答案】B 【解析】二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。折半查找方法适用于对以顺序方式存储的有序表的查找,查找效率较高。 4.下列二叉排序树中查找效率最高的是()。 A.平衡二叉树 B.二叉查找树 C.没有左子树的二叉排序树 D.没有右子树的二叉排序树 【答案】A 【解析】平衡二叉树的左子树和右子树的深度之差的绝对值不超过1。这就保证了二叉树的深度是log2n级别的。二叉查找树或者是一颗空数;或者是具有下列性质的二叉树:①若左子树不空,则左子树上所有结点的值均小于它的根结点的值;②若右子树不空,则右子树上所有结点的值均大于它的根结点的值;③左、右子树也分别为二叉排序树。B、C、D 三项均不能保证左子树和右子树的深度之差的绝对值不超过1,甚至很大,因此查找效率低。

李春葆《数据结构教程》(第4版)笔记和课后习题详解(外排序)【圣才出品】

第11章外排序 11.1 复习笔记 一、外排序概述 文件存储在外存上,因此外排序方法与各种外存设备的特征有关。外排序的基本方法是归并排序法。它分为以下两个步骤: 1.生成若干初始归并段(顺串) 将一个文件(含待排序的数据)中的数据分段读入内存,在内存中对其进行内排序,并将经过排序的数据段(有序段)写到多个外存文件上。 2.多路归并 对这些初始归并段进行多遍归并,使得有序的归并段逐渐扩大,最后在外存上形成整个文件的单一归并段,也就完成了这个文件的外排序。 二、磁盘排序 1.磁盘排序概述 磁盘是直接存取设备,读/写一个数据块的时间与当前读/写头所处的位置关系不大,存放在磁盘中的文件的排序属典型的外排序。 磁盘排序过程如图11-1所示.

图11-1 磁盘排序过程 磁盘中的F in文件包括待排序的数据,通过相关算法将F in文件中数据一部分一部分地调入内存(每个记录被读一次)处理,产生若干个文件F1~F n(每个记录被写一次),它们都是有序的,称为顺串。然后再次将F1~F n文件中的记录调入内存(每个记录被读一次),通过相关归并算法产生一个有序的F out文件(每个记录被写一次),从而达到数据排序的目的。 可见,提高排序速度很重要的一个方面是减少对数据的扫描遍数。 2.生成初始归并段 使用置换—选择的排序算法用于生成较长的初始归并段。 采用置换—选择排序算法生成初始归并段时,内排序基于选择排序,即从若干个记录中通过关键字比较选择一个最小的记录,同时在此过程中进行记录的输入和输出,最后生成若干个长度可能各不相同的有序文件。基本步骤如下: (1)从待排序文件F in中按内存工作区WA的容量(设为w)读入w个记录,设归并段编号i=1; (2)从WA中选出关键字最小的记录R min;

李春葆《数据结构教程》笔记和课后习题详解(外排序)【圣才出品】

第10章外排序 10.1 复习笔记 一、外排序概述 1.外存设备分类 外存设备大体上分为两类: (1)顺序存取设备,例如磁带; (2)直接存取设备,例如磁盘。 在本章中主要介绍磁盘排序。 2.磁盘 (1)磁盘的结构 磁盘是一种直接存取的外存设备,它不仅能够进行顺序存取,还能直接存取任何记录,它的存取速度比磁带快得多。目前,磁盘多使用带有可移动式磁头的磁盘,磁盘结构的实物图如图10-1所示。

图10-1 磁盘结构实物图 对应的示意图如图10-2所示。 图10-2 磁盘结构示意图 (2)影响磁盘存取时间的因素 对于磁盘而言,影响存取时间的因素有3个: ①搜索时间 磁头定位到指定柱面所需要的时间。 ②等待时间 磁头定位到磁道的指定扇区所需要的时间。

③传送时间 从磁盘或向磁盘传送一个物理块的数据所需要的时间。 3.外排序的步骤 外排序的基本方法是归并排序法,它主要分为以下两个步骤: (1)生成若干初始归并段(顺串) 将一个文件(含待排序的数据)中的数据分段读入内存,在内存中对其进行内排序,并将经过排序的数据段(有序段)写到多个外存文件上。 (2)多路归并 对这些初始归并段进行多遍归并,使得有序的归并段逐渐扩大,最后在外存上形成整个文件的单一归并段,也就完成了这个文件的外排序。 二、磁盘排序 1.磁盘排序过程 磁盘排序过程如图10-3所示。 图10-3 磁盘排序过程 磁盘中的F m文件包括待排序的全部数据,根据内存大小采用相关算法将F m文件中的

数据一部分、一部分地调入内存(每个记录被读一次)排序,产生若干个文件F1~F n(每个记录被写一次),它们都是有序的,称为顺串。然后再次将F1~F n文件中的记录调入内存(每个记录被读一次),通过相关归并算法产生一个有序文件F out(每个记录被写一次),从而达到数据排序的目的。 6个归并段的归并过程如图10-4所示,基本上是二路平衡归并的算法。 图10-4 6个归并段的归并过程 2.生成初始归并段 采用常规内排序方法,所生成的归并段的大小正好等于一次能放入内存中的记录个数,存在局限性,对此可以利用置换-选择排序算法生成长度较大的初始归并段。 在采用置换-选择排序算法生成初始归并段时,内排序基于选择排序,即从若干个记录中通过关键字比较选择一个最小的记录,同时在此过程中伴随记录的输入和输出,最后生成若干个长度可能各不相同的有序文件,即初始归并段。其基本步骤如下: (1)从待排序文件F in中按内存工作区WA的容量(设为ω)读入W个记录,设当前初始归并段编号i=1;

相关文档
最新文档