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

合集下载

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

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

第6章数组和广义表1.简述数组属于线性表的原因。

答:数组可以看成是线性表在下述含义上的扩展:线性表中的数据元素本身也是一个线性表。

在n维数组中的每个数据元素都受着n个关系的约束,在每个关系中,数据元素都有一个后继元素(除去最后一个元素)和一个前驱元素(除去最前一个元素)。

因此,这n个关系中的任一关系,就其单个关系而言仍是线性关系。

例如,m×n的二维数组的形式化定义如下:2.n阶对称矩阵A的下三角元素存储在一维数组B中,则B包含多少个元素?答:B中包含n阶对称矩阵A的下三角和主对角线上的元素,其元素个数为1+2+…+n=(n(n+1))/2,所以B包含(n(n+1))/2个元素。

3.设有三对角矩阵A n×n(从A1,1开始),将其三对角线上元素逐行存于数组B [1..m]中,使B[k]=A i,j,求:(1)用i,j表示k的下标变换公式;(2)用k表示i,j的下标变换公式。

答:在三对角矩阵中,除了第一行和最后一行各有两个元素外,其余各行均有三个非零元素,所以共有3n-2个非零元素。

(1)主对角线左下角的对角线上的元素的下标有关系式:i=j+1,此时的k有:k=3(i-1)=2(i-1)+j主对角线上的元素的下标有关系式:i=j,此时的k有:k=3(i-1)+1=2(i-1)+j主对角线右上角的对角线上的元素的下标有关系式:i=j-1,此时的k有:k=3(i-1)+2=2(i-1)+j综合起来得到:k=2(i-1)+j(2)k与i,j的变换公式为:i=k/3+1;j=k-2(i-1)4.用十字链表表示一个有k个非0元素的m×n的稀疏矩阵,则其总的节点数为多少?答:该十字链表有一个十字链表头节点,MAX(m,n)个行、列头节点。

另外,每个非零元素对应一个节点,即k个元素节点,所以共有MAX(m,n)+k+1个节点。

5.设定二维整数数组B[0..m-1,0..n-1]的数据在行、列方向上都按从小到大的顺序排序,且整型变量x中的数据在B中存在。

李春葆《数据结构教程》(第4版)模拟试题及详解(一)(圣才出品)

李春葆《数据结构教程》(第4版)模拟试题及详解(一)(圣才出品)

第四部分模拟试题李春葆《数据结构教程》(第4版)模拟试题及详解(一)一、单项选择题(每小题2分,共20分)1.队列的特点是()。

A.先进后出B.先进先出C.任意位置进出D.前面都不正确【答案】B2.有n个记录的文件,如关键字位数为d,基数为r,则基数排序共要进行()遍分配与收集。

A.nB.dC.rD.n-d【答案】B【解析】基数排序是按组成关键字的各位值进行分配收集而完成的。

3.在二叉树节点的先序序列、中序序列和后序序列中,所有叶子节点的先后顺序()。

A.都不相同B.完全相同C.先序和中序相同,而与后序不同D.中序和后序相同,而与先序不同【答案】B【解析】无论是哪种遍历方式,遍历叶子节点时,都是先访问左子树,后访问右子树。

4.限定在一端加入和删除元素的线性表称为()。

A.双向链表B.单向链表C.栈D.队列【答案】C【解析】根据栈后进先出的特性,可见栈都在一端对元素进行操作。

5.设内存工作区可容纳8个记录,初始文件共有64个关键字不同的记录,且已按关键字递减排列,如用置换.选择排序产生初始归并段,最长初始归并段所含记录数是()。

A.6B.7C.8D.9【答案】C【解析】对于置换选择排序,输入的文件是以关键字降序排列时,所得的初始归并段的最大长度为工作区的大小。

当输入的文件以关键字的升序排序时,只能得到一个长度为文件长度的初始归并段。

6.设森林F对应的二叉树为B,它有m个节点,B的根为p,p的右子树上的节点个数为n,森林F中第一棵树的节点个数是()。

A.m-n-1B.n+lC.m-n+1D.m-n【答案】D7.设有198个初始归并段,如采用K-路平衡归并三遍完成排序,则K值最大为()。

A.12B.13C.14D.15【答案】C【解析】k一路平衡归并,归并趟数公式s=[1og k m],m指归并段数,s指趟数。

要三遍完成遍历,那就看两遍完成排序的需遍历的最小数。

把s=2和m=198带入公式,可知两遍完成排序时k最小为15,所以k<15。

数据结构教程李春葆第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 是一个空集。

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

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

第2章线性表2.1 复习笔记一、线性表及其逻辑结构1.线性表的定义线性表是具有相同特性的数据元素的一个有限序列。

该序列中所含元素的个数叫做线性表的长度,用n表示,n≥0。

当n=0时,表示线性表是一个空表,即表中不包含任何元素。

2.线性表的表示设序列中第i(i表示逻辑序号)个元素为a i(1≤i≤n),则线性表的一般表示为:(a1,a2,…,a i,a i+1,…,a n)其中a1为第一个元素,又称做表头元素,a2为第二个元素,…,a n为最后一个元素,又称做表尾元素。

一个线性表可以用一个标识符来命名,如用L命名上面的线性表,则:L=(a1,a2,…,a i,a i+1,…,a n)线性表中的元素是与位置有关的,即第i个元素a i处在第i-1个元素a i-1的后面和第i+1个元素a i+1的前面。

这种位置上的有序性就是一种线性关系,所以线性表是一种线性结构,用二元组表示为:L=(D,R),其中:对应的逻辑结构如图2-1所示。

图2-1 线性表的逻辑结构示意图3.线性表的抽象数据类型描述抽象数据类型线性表的定义如下:二、线性表的顺序存储结构1.顺序表(1)线性表的存储结构线性表的顺序存储结构是把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续的存储空间中,如图2-2所示。

图2-2 线性表到顺序表的映射由于线性表中逻辑上相邻的两个元素在对应的顺序表中的存储位置也相邻,所以这种映射称为直接映射。

这样,线性表中第一个元素的存储位置就是指定的存储位置,第i+1个元素(1≤i≤n-1)的存储位置紧接在第i个元素的存储位置的后面。

假定线性表的元素类型为ElemType,则每个元素所占用存储空间大小(即字节数)为sizeof(ElemType),整个线性表所占用存储空间的大小为n×sizeof(ElemType),其中n表示线性表的长度。

在C/C++语言中,线性表的顺序存储结构是利用数组来实现的,数组的基本类型就是线性表中元素的类型,数组的大小要大于等于线性表的长度。

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

李春葆《数据结构教程》(第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的长度;(4)在串s的第9个字符位置插入串s1而产生串s2;(5)输出串s2;(6)删除串s第2个字符开始的5个字符而产生串s2;(7)输出串s2;(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2;(9)输出串s2;(10)提取串s的第2个字符开始的10个字符而产生串s3;(11)输出串s3;(12)将串s1和串s2连接起来而产生串s4;(13)输出串s4。

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

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

第6章数组和广义表一、选择题1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。

A.13B.33C.18D.40【答案】B【解析】对于对称矩阵,a i,j=a j,i。

为了节省存储空间,为多个相同的元素只分配一个存储空间。

对于对称矩阵,元素下表之间的对应关系为:当i>=j时,k=i(i-1)/2+j -1;当i< =j 时,k=j(j-1)/2+i-1。

其中k相当于地址空间的标号,i为行号,j为列号。

因为第一个元素存储地址为1,所以最后计算的k需要加1。

所以a85的存储位置为8*(8-1)/2+5=33。

2.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。

A.BA+141B.BA+180C.BA+222D.BA+225【答案】B【解析】在计算中,可以考虑按照列存放时,A[5,8]在内存的位置,比较容易计算元素的首地址。

比如A[5,8]顺序存放时,它是第7*8+5=61个元素,由于首地址为BA,所以它的存储首地址为BA+(61-1)*3=180+BA。

3.数组通常具有的两种基本操作是()。

A.查找和修改B.查找和索引C.索引和修改D.建立和删除【答案】A【解析】数组中的元素是顺序存放的,通过下标可以很好地查找数组元素,同时通过对应的指针可以修改数组元素的值,因此数组通常具有的两种基本操作是查找和修改。

根据数组的性质,数组通常具有的两种基本运算是排序和查找。

4.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1..298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。

A.198B.195C.197【答案】B【解析】将对角矩阵a[i][j]存入b[k],三对角矩阵压缩地址计算公式如下:k=2i+j-2。

数据结构教程李春葆课后答案第10章内排序

数据结构教程李春葆课后答案第10章内排序

2 else d=d/3; } }
数据结构教程学习指导
(1)指出fun(a,n)算法的功能。 (2)当a[]={5,1,3,6,2,7,4,8}时,问fun(a,8)共执行几趟排序,各趟的排序 结果是什么? 答:(1)fun(a,n)算法的功能是采用增量递减为1/3的希尔排序方法对a数组中元素进 行递增排序。 (2)当a[]={5,1,3,6,2,7,4,8}时,执行fun(a,8)的过程如下: d=2:2 1 3 6 4 7 5 8 d=1:1 2 3 4 5 6 7 8 共有两趟排序。 4. 在实现快速排序的非递归算法时,可根据基准元素,将待排序序列划分为两个子 序列。若下一趟首先对较短的子序列进行排序,试证明在此做法下,快速排序所需要的栈 的深度为 O(log2n)。 答:由快速排序的算法可知,所需递归工作栈的深度取决于所需划分的最大次数。在 排序过程中每次划分都把整个待排序序列根据基准元素划分为左、右两个子序列,然后对 这两个子序列进行类似的处理。 设S(n)为对n个记录进行快速排序时平均所需栈的深度, 则: S(n)=
KeyType QuickSelect(RecType R[],int s,int t,int k) //在 R[s..t]序列中找第 k 小的元素 { int i=s,j=t; RecType tmp; if (s<t) //区间内至少存在 2 个元素的情况 { tmp=R[s]; //用区间的第 1 个记录作为基准 while (i!=j) //从区间两端交替向中间扫描,直至 i=j 为止 { while (j>i && R[j].key>=tmp.key) j--; //从右向左扫描,找第 1 个关键字小于 tmp 的 R[j] R[i]=R[j]; //将 R[j]前移到 R[i]的位置 while (i<j && R[i].key<=tmp.key) i++; //从左向右扫描,找第 1 个关键字大于 tmp 的 R[i] R[j]=R[i]; //将 R[i]后移到 R[j]的位置 } R[i]=tmp; if (k-1==i) return R[i].key; else if (k-1<i) return QuickSelect(R,s,i-1,k); //在左区间中递归查找 else return QuickSelect(R,i+1,t,k); //在右区间中递&& s==k-1) return R[k-1].key; else return -1; }

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

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

第二部分课后习题第1章绪论1.简述数据与数据元素的关系与区别。

答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。

数据元素是数据的基本单位,是数据的个体。

数据与元素之间的关系是元素与集合之间的关系。

2.数据结构和数据类型有什么区别?答:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。

而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。

3.设3个表示算法频度的函数f、g和h分别为:f(n)=100n3+n2+1000g(n)=25n3+5000n2h(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),则:则6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:求mergesort(a,0,n-1)的时间复杂度。

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

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

第二部分课后习题第1章绪论1.简述数据与数据元素的关系与区别。

答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。

数据元素是数据的基本单位,是数据的个体。

数据与元素之间的关系是元素与集合之间的关系。

2.数据结构和数据类型有什么区别?答:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。

而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。

3.设3个表示算法频度的函数f、g和h分别为:f(n)=100n3+n2+1000g(n)=25n3+5000n2h(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),则:则6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:求mergesort(a,0,n-1)的时间复杂度。

数据结构教程李春葆课后答案 图

数据结构教程李春葆课后答案 图
(3)对于邻接矩阵表示的无向图,顶点i的度等于第i行中元素为1的个数;对于邻接矩 阵表示的有向图,顶点i的出度等于第i行中元素为1的个数,入度等于第i列中元素为1的个 数,顶点i度等于它们之和。
对于邻接表G表示的无向图,顶点i的度等于G->adjlist[i]为头结点的单链表中边表结点 个数。
对于邻接表G表示的有向图,顶点i的出度等于G->adjlist[i]为头结点的单链表中边表结 点的个数;入度需要遍历所有的边结点,若G->adjlist[j]为头结点的单链表中存在编号为i 的边结点,则顶点i的入度增1,顶点i的度等于入度和出度之和。
4
数据结构教程学习指导
中。因为在采用Kruskal算法构造最小生成树时,选择这3条权最小的边加入时,有可能出 现回路。例如,如图8.5所示的带权无向图,有3条边的权均为1,它们一定不会同时都出现 在其任何最小生成树中。
1 1
1 0
1
3
3 2
图 8.5 一个带权无向图
8. 对于如图8.6所示的带权有向图,采用Dijkstra算法求出从顶点0到其他各顶点的最短 路径及其长度,要求给出求解过程。
0
0
1
2
4
5
1
2
4
5
6
3
6
(a) 一个有向图
3 (b) 3 个强连通分量
图 8.2 一个有向图及其强连通分量
3. 对于稠密图和稀疏图,采用邻接矩阵和邻接表哪个更好些? 答:邻接矩阵适合于稠密图,因为邻接矩阵占用的存储空间与边数无关。邻接表适合 于稀疏图,因为邻接表占用的存储空间与边数有关。
4. 对 n 个顶点的无向图和有向图(均为不带权图),采用邻接矩阵和邻接表表示时, 如何求解以下问题:

数据结构教程李春葆课后答案第8章图

数据结构教程李春葆课后答案第8章图

3
6. 对于如图 8.4 所示的带权无向图, 给出利用 Prim 算法 (从顶点 0 开始构造) 和 Kruskal 算法构造出的最小生成树的结果,要求结果按构造边的顺序列出。 答:利用普里姆算法从顶点0出发构造的最小生成树为:{(0,1),(0,3),(1,2),(2, 5),(5,4)}。利用克鲁斯卡尔算法构造出的最小生成树为:{(0,1),(0,3),(1,2),(5, 4),(2,5)}。
3
3
3
3 5 3
图 8.10 图 G
图 8.11 图 G 中的关键路径
14. 假设不带权有向图采用邻接矩阵 g 存储,设计实现以下功能的算法: (1)求出图中每个顶点的入度。 (2)求出图中每个顶点的出度。 (3)求出图中出度为0的顶点数。 解:利用邻接矩阵的特点和相关概念得到如下算法:
0
1
2
3
4
5
图 8.3 一个无向图 G
答:无向图 G 的所有的深度优先遍历序列如下:
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 5 4 5 1 1 3 3 1 1 2 2 5 4 5 4 4 5 1 1 4 5 1 1 2 2 3 3 5 4 4 5 5 4 4 5 3 3 2 2 3 3 5 4 2 2 5 4
从 0 到 1 的最短路径长度为:1,路径为:0,1 从 0 到 2 的最短路径长度为:4,路径为:0,1,2 从 0 到 3 的最短路径长度为:2,路径为:0,3 从 0 到 4 的最短路径长度为:8,路径为:0,1,4 从 0 到 5 的最短路径长度为:10,路径为:0,3,5
第8章 图
5
9. 对于一个带权连通图, 可以采用 Prim 算法构造出从某个顶点 v 出发的最小生成树, 问该最小生成树是否一定包含从顶点 v 到其他所有顶点的最短路径。如果回答是,请予以 证明;如果回答不是,请给出反例。 答:不一定。例如,对于如图8.7(a)所示带权连通图,从顶点0出发的最小生成树如 图8.7(b)所示,而从顶点0到顶点2的最短路径为02,而不是最小生成树中的012。

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

李春葆数据结构教程第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),则:则6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:求mergesort(a,0,n-1)的时间复杂度。

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

李春葆《数据结构教程》(第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,求解背包问题:设有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的方案,使选中物品的总重量不超过指定的限制重量,但选中物品的总价值最大。

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

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

第9章查找一、选择题1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为()。

A.(n-1)/2B.n/2C.(n+1)/2D.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,甚至很大,因此查找效率低。

5.当在一个有序的顺序存储表上查找一个数据时,既可用折半查找,也可用顺序查找,但前者比后者的查找速度()。

李春葆《数据结构教程》(第4版)名校考研真题-综合应用题(圣才出品)

李春葆《数据结构教程》(第4版)名校考研真题-综合应用题(圣才出品)

二、综合应用题1.用单链表保存m个整数,节点的结构为(data,link),且|data|<n(n为正整数)。

现要求设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留第一次出现的节点而删除其余绝对值相等的节点。

[2015年联考真题]例如若给定的单链表head如下:删除节点后的head为:要求:(1)给出算法的基本思想。

(2)使用c或c++语言,给出单链表节点的数据类型定义。

(3)根据设计思想,采用c或c++语言描述算法,关键之处给出注释。

(4)说明所涉及算法的时间复杂度和空间复杂度。

答:(1)算法思想:定义一个大小为n的布尔数组flag,初始时所有的元素都赋值为false,用来标识遍历过程中是否出现元素绝对值为flag的节点。

然后遍历链表,遍历过程中,每一个当前结点data域的绝对值所对应的flag位:若为真,则删除该结点;若为假(false),则将flag位置为真(true)。

(2)节点的数据结构定义如下:(3)bool flag[n];//全局数组标志节点的绝对值是否出现过Node * deleteABSEnqualNode(Node * head){memset(flag, false, sizeof(flag));Node *pre =head;Node *p =head->next;while(p !=NULL ){if(flag[ abs(p->data)] ){ //如果此绝对值已经在节点值的绝对值中出现过则删除该节点pre->next =p->next;delete p;p =pre->next;} else {//否则,将flag中对应的位置置为true,并将指针指向下一个元素flag[ abs(p->data)] =true;p =p->next;}}return head;}(4)只遍历一次链表,所以时间复杂度为O(m)(m为单链表中元素的个数),申请大小为n的数组,所以空间复杂度为O(n)(n为节点绝对值的最大值)。

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

李春葆《数据结构教程》笔记和课后习题详解(线性表)【圣才出品】
二、线性表的顺序存储结构 1.线性表的顺序存储结构—顺序表 (1)定义
2 / 69
圣才电子书 十万种考研考证电子书、题库视频学习平台

线性表的顺序存储结构是把线性表中的所有元素按照其逻辑顺序依次存储到从计算机 存储器中指定存储位置开始的一块连续的存储空间中。线性表的顺序存储结构称为顺序表。
圣才电子书 十万种考研考证电子书、题库视频学习平台

第 2 章 线性表
2.1 复习笔记 一、线性表 1.线性表的定义 线性表是具有相同特性的数据元素的一个有限序列。 2.线性表的特征 线性表的特征有: (1)所有数据元素的类型相同; (2)线性表是由有限个数据元素构成的; (3)线性表中的数据元素是与位置有关的,通常从 1 开始编号,每个数据元素有唯一 的序号,这一点表明线性表不同于集合; (4)线性表中的数据元素可以重复出现,而集合中的数据元素不会重复出现。 3.线性表的逻辑结构 (1)逻辑结构表示 线性表的逻辑结构一般表示为(a1,a2,…,ai,ai+1,…,an),用图形表示逻辑结构 如图 2-1 所示。
(2)实现 ①具体实现方法 采用 C++语言中的一维数组 data 来实现顺序表,并设定该数组的长度为常量 MaxSize, 图 2-2 所示为将长度为 n 的线性表存放在 data 数组中。
图 2-2 长度为 n 的线性表存放在顺序表中
②说明 数组的长度是指存放线性表的存储空间的长度,存储分配后这个量一般是不变的,而线 性表的长度是指线性表中的数据元素的个数,随着线性表的插入和删除操作而发生变化,但 在任何时刻都不能大于数组的长度 MaxSize。由于线性表的长度小于可以数组 data 的长度, 此时该数组中有一部分是空闲的,所以设计一个变量 length 表示顺序表的长度,即顺序表 data 数组中实际数据元素的个数。 线性表中的元素 a(i 1≤i≤n)的逻辑序号为 i,在对应顺序表中该元素的物理序号为 i-1。 算法形参中的序号 i 通常指逻辑序号。 (3)类模板的声明 ①具体声明方法 采用一个类模板 SqListClass<T>来定义顺序表,其中包含 data 和 length 等数据成员。 类模板 SqListCiass<T>的声明如下:

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

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

第12章文件12.1 复习笔记一、文件的基本概念1.文件概述(1)定义文件是性质相同的记录的集合。

(2)按关键字划分①单关键字文件若文件中的记录只有一个惟一标识记录的主关键字,则称之为单关键字文件;②多关键字文件若文件中的记录除了含有一个主关键字外,还含有若干个次关键字,则称之为多关键字文件。

(3)按是否定长划分①定长文件若文件中各记录含有的信息长度相同,则称这类记录为定长记录,由这种定长记录组成的文件称作定长文件;②不定长文件若文件中各记录含有的信息长度不等,则称作不定长文件。

2.文件的逻辑结构及操作(1)文件的逻辑结构文件中各记录之间存在着逻辑关系,当一个文件的各个记录按照某种次序排列起来时,各记录之间就自然地形成了一种线性关系。

在这种次序下,文件中每个记录最多只有一个直接后继记录和一个直接前驱记录,而文件的第一个记录只有直接后继没有直接前驱,文件的最后一个记录只有直接前驱而没有直接后继。

此时,文件可看成是一种线性结构。

(2)文件操作①检索文件检索就是在文件中查找满足给定条件的记录,它既可以按记录的逻辑号(即记录存入文件时的顺序编号)查找,也可以按关键字查找。

②维护文件维护主要是指对文件进行记录的插入、删除及修改等更新操作。

此外,为提高文件的效率,还要进行再组织操作、文件被破坏后的恢复操作以及文件中数据的安全保护等。

3.文件的存储结构(1)概念文件的存储结构是指文件在外存上的组织方式。

采用不同的组织方式就得到不同的存储结构。

(2)基本的组织方式①顺序组织;②索引组织;③哈希组织;④链组织。

文件组织的各种方式往往是这四种基本方式的结合。

二、顺序文件1.定义顺序文件是指按记录进入文件的先后顺序存放、其逻辑顺序跟物理顺序一致的文件。

若顺序文件中的记录按其主关键字有序,则称此顺序文件为顺序有序文件;否则称为顺序无序文件。

2.优点顺序文件的主要优点是连续存取的速度较快,即若文件中第i个记录刚被存取过,而下一个要存取的是第i+1个记录,则这种存取将会很快完成。

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

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

第12章文件一、选择题1.哈希文件使用哈希函数将记录的关键字值计算转化为记录的存放地址,因为哈希函数是一对一的关系,则选择好的()方法是哈希文件的关键。

A.哈希函数B.除余法中的质数C.冲突处理D.哈希函数和冲突处理【答案】D【解析】哈希表是根据文件中关键字的特点设计一种哈希函数和处理冲突的方法将记录散列到存储设备上。

2.下述文件中适合于磁带存储的是()。

A.顺序文件B.索引文件C.哈希文件D.多关键字文件【答案】A【解析】磁带存储是一种顺序存储,顺序文件(sequential file)是记录按其在文件中的逻辑顺序依次进入存储介质而建立的,即顺序文件中物理记录的顺序和逻辑记录的顺序是一致的。

因此顺序文件适合磁带存储。

二、判断题1.倒排文件是对次关键字建立索引。

()【答案】√【解析】倒排文件是对每一个次关键字项建立次关键字索引(称为倒排表),将所有具有相同次关键字的记录的物理记录号都填入倒排表为此次关键字的表中。

2.倒排序文件的优点是维护简单。

()【答案】×【解析】倒排文件的优点是检索记录较快。

特别是对某些询问,不用读取记录,就可得到解答。

3.哈希表与哈希文件的唯一区别是哈希文件引入了“桶”的概念。

()【答案】×【解析】哈希文件是使用一个函数(算法)来完成一种将关键字映射到存储器地址的映射,根据用户给出的关键字,经函数计算得到目标地址,再进行目标的检索。

哈希表是根据关键码值而直接进行访问的数据结构。

4.文件系统采用索引结构是为了节省存储空间。

()【答案】×【解析】是为了缩短查找的时间,牺牲了一部分存储空间。

5.对处理大量数据的外存介质而言,索引顺序存取方法是一种方便的文件组织方法。

()【答案】×【解析】索引顺序存取方法插入操作比较麻烦,对于处理大量数据,会有大量的记录进入溢出区,而基本区中又浪费很多空间。

6.对磁带机而言,ISAM是一种方便的文件组织方法。

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

李春葆《数据结构教程》(第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<i,i1>,<i1,i2>,…,<i m-1,i m>,<i m,j>属于E(G)。

②路径长度路径长度是指一条路径上经过的边的数目。

(7)回路或环若一条路径上的开始点与结束点为同一个顶点,则称此路径为回路或环。

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

李春葆《数据结构教程》(第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<i,i1>,<i1,i2>,…,<i m-1,i m>,<i m,j>属于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的强连通分量。

显然,强连通图只有一个强连通
分量即本身,非强连通图有多个强连通分量。

(10)关节点和重连通图
假如在删除图G 中顶点i 以及与其相关联的各边后,图的一个连通分量被分割成两个或多个连通分量,则称顶点i 为该图的关节点。

一个没有关节点的连通图称为重连通图。

(11)权和网
图中每一条边都可以附有一个对应的数值,这种与边相关的数值称为权。

权可以表示从一个顶点到另一个顶点的距离或花费的代价。

边上带有权的图称为带权图,又称网。

二、图的存储结构
1.邻接矩阵存储方法
(1)邻接矩阵的表示方法
邻接矩阵是表示顶点之间相邻关系的矩阵。

设G=(V,E)是含有n(n>0)个顶点的图,各顶点的编号为0~(n-1),则G 的邻接矩阵A 是n 阶方阵,其定义如下:
①如果G 是不带权无向图,则:
⎩⎨⎧∈=其他
)若( 0)(,i 1]][[A G E j j i ②如果G 是不带权有向图,则:
⎩⎨⎧>∈<=其他
若 0)(,i 1]][[A G E j j i ③如果G 是带权无向图,则:
⎪⎩
⎪⎨⎧∞=∈≠=其他)(),且(若 j i 0G E j i j i ]][[A ij w j i ④如果G 是带权有向图,则:
⎪⎩
⎪⎨⎧∞=>∈<≠=其他)(,且若 j i 0G E j i j i ]][[A ij w j i (2)邻接矩阵的特点
①图的邻接矩阵表示是惟一的;
②邻接矩阵适合于存储边的数目较多的稠密图;
③无向图的邻接矩阵一定是一个对称矩阵;
④对于无向图,邻接矩阵的第i 行(或第i 列)非零元素(或非∞元素)的个数正好是顶点i 的度;
⑤对于有向图,邻接矩阵的第i 行(或第i 列)非零元素(或非∞元素)的个数正好是顶点i 的出度(或入度);
⑥用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连。

(3)数据类型定义
邻接矩阵的数据类型定义如下:
2.邻接表存储方法
(1)邻接表的存储
图的邻接表存储方法是一种顺序分配与链式分配相结合的存储方法。

在表示含n 个顶点的图的邻接表中,为每个顶点建立一个单链表,第i(0≤i≤n-1)个单链表中的节点表示
依附于顶点i的边(对有向图是以顶点i为尾的边)。

每个单链表上附设一个表头节点,将所有表头节点构成一个表头节点数组。

边节点(或表节点)和表头节点的结构如下:
(2)邻接表的特点
①邻接表表示不惟一;
②对于有n个顶点和e条边的无向图,其邻接表有n个表头节点和2e个边节点;对于有n个顶点和e条边的有向图,其邻接表有n个表头节点和e个边节点。

③对于无向图,邻接表的顶点i(0≤i≤n-1)对应的i号链表的边节点数目正好是顶点i 的度;
④对于有向图,邻接表的顶点i(0≤i≤n-1)对应的i号链表的边节点数目仅仅是顶点i 的出度。

顶点i的入度为邻接表中所有adjvex域值为i的边节点数目。

(3)存储类型定义
图的邻接表存储类型的定义如下:。

相关文档
最新文档