数据结构教程李春葆课后答案第5章递归

合集下载

部分习题参考答案(数据结构 李春葆)

部分习题参考答案(数据结构 李春葆)
void Insert(DLinkList *&ha, DLinkList *&hb,int i) { DLinkList *p=ha->next,*q;
int lena=1,j=0; while (p->next!=ha)//求出ha的长度lena { lena++;
p=p->next; }
if (i==0) //将hb的所有数据结点插入到ha的头结点和第1个数据结点之间
{ p=hb->prior;
//p指向hb的最后一个结点/
p->next=ha->next;
//将*p链到ha的第1个数据结点前面
ha->next->prior=p;
ha->next=hb->next;
hb->next->prior=ha;
//将ha头结点与hb的第1个数据结点链起

}
else if (i<lena)
q->next->prior=q;
p->next=q;q->prior=p;
q=p->prior;
//q重指向*p的前趋节点
}
return true;
}
}
2.5 设ha=(a1,a2,…,an)和hb=(b1,b2, …,bm) 是两个带头结点的循环单链表,编写将 这两个表合并为带头结点的循环单链表hc的算法。
else
//找到的情况
{ p->freq++;
//频度增1
q=p->prior;
//*q为p前驱节点
while (q!=h && q->freq<p->freq)

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

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

数据结构(李春葆)习题与解析编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(数据结构(李春葆)习题与解析)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为数据结构(李春葆)习题与解析的全部内容。

数据结构(C语言篇)―习题与解析(修订版)清华大学出版社一、绪论选择题1.数据结构是一门研究非数值计算的程序设计问题计算机的以及它们之间的和运算等的学科.1 A.数据元素 B。

计算方法C。

逻辑存储 D.数据映像2 A.结构 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。

《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法及其分析》课后选择题答案及详解第1 章——概论1.下列关于算法的说法中正确的有()。

Ⅰ.求解某一类问题的算法是唯一的Ⅱ.算法必须在有限步操作之后停止Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊Ⅳ.算法执行后一定产生确定的结果A.1个B.2个C.3个D.4个2.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是()。

A.T(n)=T(n-1)+1,T(1)=1B.T(n)=2nC.T(n)= T(n/2)+1,T(1)=1D.T(n)=3nlog2n答案解析:1.答:由于算法具有有穷性、确定性和输出性,因而Ⅱ、Ⅲ、Ⅳ正确,而解决某一类问题的算法不一定是唯一的。

答案为C。

2.答:选项A的时间复杂度为O(n)。

选项B的时间复杂度为O(n)。

选项C 的时间复杂度为O(log2n)。

选项D的时间复杂度为O(nlog2n)。

答案为C。

第3 章─分治法1.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。

这要求原问题和子问题()。

A.问题规模相同,问题性质相同B.问题规模相同,问题性质不同C.问题规模不同,问题性质相同D.问题规模不同,问题性质不同2.在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n个元素进行划分,如何选择划分基准?下面()答案解释最合理。

A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。

但不同方法,算法复杂度上界可能不同3.对于下列二分查找算法,以下正确的是()。

A.intbinarySearch(inta[],intn,int x){intlow=0,high=n-1;while(low<=high){intmid=(low+high)/2;if(x==a[mid])returnmid;if(x>a[mid])low=mid;elsehigh=mid;}return –1;}B.intbinarySearch(inta[],intn,int x) { intlow=0,high=n-1;while(low+1!=high){intmid=(low+high)/2;if(x>=a[mid])low=mid;elsehigh=mid;}if(x==a[low])returnlow;elsereturn –1;}C.intbinarySearch(inta[],intn,intx) { intlow=0,high=n-1;while(low<high-1){intmid=(low+high)/2;if(x<a[mid])high=mid;elselow=mid;}if(x==a[low])returnlow;elsereturn –1;}D.intbinarySearch(inta[],intn,int x) {if(n>0&&x>=a[0]){intlow= 0,high=n-1;while(low<high){intmid=(low+high+1)/2;if(x<a[mid])high=mid-1;elselow=mid;}if(x==a[low])returnlow;}return –1;}答案解析:1.答:C。

李春葆《数据结构教程》(第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)的时间复杂度。

《数据结构》第五章习题参考答案

《数据结构》第五章习题参考答案

《数据结构》第五章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、知道一颗树的先序序列和后序序列可唯一确定这颗树。

( ×)2、二叉树的左右子树可任意交换。

(×)3、任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序不发生改变。

(√)4、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。

(√)5、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。

( ×)6、完全二叉树中,若一个结点没有左孩子,则它必是叶子结点。

( √)7、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。

(×)8、度为2的树就是二叉树。

(×)二、单项选择题1.具有10个叶结点的二叉树中有( B )个度为2的结点。

A.8 B.9 C.10 D.112.树的后根遍历序列等同于该树对应的二叉树的( B )。

A. 先序序列B. 中序序列C. 后序序列3、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG 。

该二叉树根的右子树的根是:( C )A. EB. FC. GD. H04、在下述结论中,正确的是( D )。

①具有n个结点的完全二叉树的深度k必为┌log2(n+1)┐;②二叉树的度为2;③二叉树的左右子树可任意交换;④一棵深度为k(k≥1)且有2k-1个结点的二叉树称为满二叉树。

A.①②③B.②③④C.①②④D.①④5、某二叉树的后序遍历序列与先序遍历序列正好相反,则该二叉树一定是( D )。

A.空或只有一个结点B.完全二叉树C.二叉排序树D.高度等于其结点数三、填空题1、对于一棵具有n个结点的二叉树,对应二叉链接表中指针总数为__2n____个,其中___n-1_____个用于指向孩子结点,___n+1___个指针空闲着。

2、一棵深度为k(k≥1)的满二叉树有_____2k-1______个叶子结点。

李春葆数据结构教程第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)的时间复杂度。

数据结构第五章参考答案

数据结构第五章参考答案

习题51.填空题(1)已知二叉树中叶子数为50,仅有一个孩子的结点数为30,则总结点数为(___________)。

答案:129(2)3个结点可构成(___________)棵不同形态的二叉树。

答案:5(3)设树的度为5,其中度为1~5的结点数分别为6、5、4、3、2个,则该树共有(___________)个叶子。

答案:31(4)在结点个数为n(n>1)的各棵普通树中,高度最小的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。

高度最大的树的高度是(___________),它有(___________)个叶子结点,(___________)个分支结点。

答案:2 n-1 1 n 1 n-1(5)深度为k的二叉树,至多有(___________)个结点。

答案:2k-1(6)(7)有n个结点并且其高度为n的二叉树的数目是(___________)。

答案:2n-1(8)设只包含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为(___________),最小结点数为(___________)。

答案:2k+1-1 k+1(9)将一棵有100个结点的完全二叉树按层编号,则编号为49的结点为X,其双亲PARENT (X)的编号为()。

答案:24(10)已知一棵完全二叉树中共有768个结点,则该树中共有(___________)个叶子结点。

答案:384(11)(12)已知一棵完全二叉树的第8层有8个结点,则其叶子结点数是(___________)。

答案:68(13)深度为8(根的层次号为1)的满二叉树有(___________)个叶子结点。

答案:128(14)一棵二叉树的前序遍历是FCABED,中序遍历是ACBFED,则后序遍历是(___________)。

答案:ABCDEF(15)某二叉树结点的中序遍历序列为ABCDEFG,后序遍历序列为BDCAFGE,则该二叉树结点的前序遍历序列为(___________),该二叉树对应的树林包括(___________)棵树。

《数据结构与算法》PPT课堂课件-第5章-递归

《数据结构与算法》PPT课堂课件-第5章-递归

(2) if(n==1)
(3) move(x,z);
(4) else{
(5)
hanoi(n-1,x,z,y);
(6)
move(x,z);
(7)
hanoi(n-1,y,x,z);
(8) }
(9) }
A
B
C
2BAC 8 3ABC 0
1BCA6 2BAC 8 3ABC 0
A
B
C
2BAC 8 3 A B C 0 15
O(n)。对比循环结构的Fib2(n)和递归结构的Fib(n)可发现,循环结构
的Fib2(n)算法在计算第n项的斐波那契数列时保存了当前已经计算得到
的第n-1项和第n-2项的斐波那契数列,因此其时间复杂度为O(n);而递
归结构的Fib(n)算法在计算第n项的斐波那契数列时,必须首先计算第n -1项和第n-2项的斐波那契数列,而某次递归计算得出的斐波那契数列, 如Fib(n-1)、Fib(n-2)等无法保存,下一次要用到时还需要重新递归计
{ printf(“参数错!”);
return -1;
}
if(n == 0) return 1;
else {y = Fact(n - 1); /*递归调用*/
return n * y; }
}
5
为说明该递归算法的执行过程,设计主函数如下
void main(void) {
long int fn;
fn = Fact(3); }
(1) {
(2) if(n= =1)
(3) move(x,z);
(4) else{
(5)
hanoi(n-1,x,z,y);
(6)
move(x,z);

李春葆《数据结构教程》(第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件物品中选取一部分物品的方案,使选中物品的总重量不超过指定的限制重量,但选中物品的总价值最大。

数据结构与算法第5章课后答案

数据结构与算法第5章课后答案

page: 1The Home of jetmambo - 第 5 章树和二叉树第 5 章树和二叉树(1970-01-01) -第 5 章树和二叉树课后习题讲解1. 填空题⑴树是n(n&ge;0)结点的有限集合,在一棵非空树中,有()个根结点,其余的结点分成m (m>0)个()的集合,每个集合都是根结点的子树。

【解答】有且仅有一个,互不相交⑵树中某结点的子树的个数称为该结点的(),子树的根结点称为该结点的(),该结点称为其子树根结点的()。

【解答】度,孩子,双亲⑶一棵二叉树的第i(i&ge;1)层最多有()个结点;一棵有n(n&gt;0)个结点的满二叉树共有()个叶子结点和()个非终端结点。

【解答】2i-1,(n+1)/2,(n-1)/2【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。

⑷设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是(),最小值是()。

【解答】2h -1,2h-1【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。

⑸深度为k的二叉树中,所含叶子的个数最多为()。

【解答】2k-1【分析】在满二叉树中叶子结点的个数达到最多。

⑹具有100个结点的完全二叉树的叶子结点数为()。

【解答】50【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。

⑺已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。

则该树中有()个叶子结点。

【解答】12【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。

⑻某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是()。

数据结构课后习题及解析第五章

数据结构课后习题及解析第五章

第五章习题5.1 假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址。

已知A的基地址为1000,计算:数组A共占用多少字节;数组A的最后一个元素的地址;按行存储时元素A36的地址;按列存储时元素A36的地址;5.2 设有三对角矩阵An×n ,将其三条对角线上的元素逐行地存于数组B(1:3n-2)中,使得B[k]= aij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i,j的下标变换公式。

5.3假设稀疏矩阵A和B均以三元组表作为存储结构。

试写出矩阵相加的算法,另设三元组表C存放结果矩阵。

5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。

5.5写一个在十字链表中删除非零元素aij的算法。

5.6画出下面广义表的两种存储结构图示:((((a), b)), ((( ), d), (e, f)))5.7求下列广义表运算的结果:(1)HEAD[((a,b),(c,d))];(2)TAIL[((a,b),(c,d))];(3)TAIL[HEAD[((a,b),(c,d))]];(4)HEAD[TAIL[HEAD[((a,b),(c,d))]]];(5)TAIL[HEAD[TAIL[((a,b),(c,d))]]];实习题若矩阵Am×n 中的某个元素aij是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵中的一个马鞍点。

假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。

第五章答案5.2设有三对角矩阵A n×n,将其三条对角线上的元素逐行的存于数组B[1..3n-2]中,使得B[k]=a ij,求:(1)用i,j表示k的下标变换公式;(2)用k表示i、j的下标变换公式。

【解答】(1)k=2(i-1)+j(2) i=[k/3]+1, j=[k/3]+k%3 ([ ]取整,%取余)5.4在稀疏矩阵的快速转置算法5.2中,将计算position[col]的方法稍加改动,使算法只占用一个辅助向量空间。

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】
7 三个进程共享四个同类资源,这些资源的分配与释放只能一次 一个。已知每一个进程最多需要两个该类资源,则该系统( )。[华中 科技大学考研真题]
A.有某进程可能永远得不到该类资源 B.必然死锁 C.进程请求该类资源立刻能得到 D.必然无死锁 【答案】D
【解析】3×(2-1)+1=4,所以不会发生死锁。
目 录
第一部分 名校考研真题 一、选择题 二、综合应用题
第二部分 课后习题 第1章 绪 论 第2章 线性表 第3章 栈和队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查 找 第9章 内排序 第10章 外排序 第11章 数据结构和STL
第三部分 章节题库 第1章 绪 论 第2章 线性表 第3章 栈和队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查 找 第9章 内排序 第10章 外排序 第11章 数据结构和STL(无)
A.时间片转移 B.静态优先及调度 C.非抢占式作业优先
D.抢占式短作业优先 【答案】A 【解析】时间片转移方法能在一个周期内使每个进程都得到一个时 间片的CPU使用时间,不会产生饥饿的现象,其余三个都会产生饥饿。
15 火车站的售票系统属于( )系统。[北京理工大学考研真题] A.单道批处理 B.多道批处理 C.分时 D.实时 【答案】D 【解析】实时操作系统(RTOS)是指当外界事件或数据产生时,能 够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之 内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源 完成实时任务,并控制所有实时任务协调一致运行的操作系统。火车站 售票系统是典型的实时系统。
A.是不可能出现的 B.是没法解决的 C.就是死锁 D.以上均不正确 【答案】D 【解析】首先,这种情况在多道程序系统中是可能出现的,甚至是 会经常出现的,A项不正确;同时,死锁是指多个进程因竞争资源而形 成的一种僵持局面,若无外力作用,这些进程都将永远不能再向前推 进,B项不正确;通常情况下,进程都在等待彼此已经占据的资源。本 题中的情况没有构成死锁,C项不正确。 22.下列措施中,能加快虚实地址转换的是1增大快表(TLB)2让 页表常驻内存3增大交换区( )。[2014年联考真题] A.仅1 B.仅2 C.仅1,2 D.仅2,3 【答案】C 【解析】加大快表能增加快表的命中率,即减少了访问内存的次 数;让页表常驻内存能够使cpu不用访问内存找页表,从也加快了虚实 地址转换。而增大交换区只是对内存的一种扩充作用,对虚实地址转换

李春葆《数据结构教程》(C++语言描述)课后习题(第5~8章)【圣才出品】

李春葆《数据结构教程》(C++语言描述)课后习题(第5~8章)【圣才出品】

三、算法设计题 (1)设定二维整数数组 B[0..m-1,0..n-1]的数据在行、列方向上都按从小到大的顺序 排序,且整型变量 x 中的数据在 B 中存在。试设计一个算法,找出一对满足 B[i,j]=x 的 i、 j 值,要求比较次数不超过 m+n。 答: void FindX(int &a,int x) {
(4)一个稀疏矩阵经过压缩后,和直接采用二维数组存储相比会失去______特性。 A.顺序存储 B.随机存取 C.输入/输出 D.以上都不对 【答案】B 【解析】稀疏矩阵可以采用三元组顺序表或是十字链表压缩存储,无论采取哪种方式, 均会使稀疏矩阵不再具有随机存取功能,答案为 B 项。
(5)当 m 行 n 列的稀疏矩阵采用十字链表表示时,其中单链表的个数为______。
(3)简述广义表、数组和线性表之间的异同。 答:一维数组可以看做是一个线性表,类似的也可以采用链式存储和顺序存储结构,但 是在计算机中直接将其视为连续的存储单元集合,二维数组同理可以视为每一个元素都是相 同类型的线性表的线性表,以此类推,任何多维数组都可以看做是线性表,其中每一个数据 元素也是一个线性表,所以说多维数组是线性表的推广。 广义表也是线性表的推广,其一般表示业余线性表相同,只不过其每一个元素既可以是 一个线性表,也可以是一个单个数据元素(原子),而线性表中的每一个元素只能是单个的 数据,这也就使得广义表一般只能用链式结构来表示,二线性表可以用顺序结构和链式结构 表示。
答:下三角矩阵的示意图如下图所示:
4 / 73
圣才电子书

十万种考研考证电子书、题库视频学习平台
a00 a10a11 a20a31a32 aij a 1 ij
在 A[i,j]之前共有 i 行,每行元素个数递增,同时此行有 j 个元素在其之前,因此其前

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(第2版)配套练习题参考答案———————数据结构简明教程———————1.练习题1参考答案1.单项选择题(1)D (2)C (3)C (4)A (5)C (6)B (7)C (8)A (9)C (10)B 2.填空题(1)①逻辑结构 ②存储结构 ③运算(不限制顺序)(2)①线性结构 ②非线性结构(不限制顺序)(3)①数据元素 ②关系(4)①没有 ②没有(5)①前驱 ②一 ③后继 ④任意多个(6)任意多个(7)①顺序 ②链式 ③索引 ④哈希(不限制顺序)(8)①时间 ②空间(不限制顺序)(9)问题规模(通常用n 表示)。

(10)辅助或临时空间3.简答题(1)答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。

它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。

不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是处理步骤。

(2)答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。

(3)答:j =0,第1次循环:j =1,s =10。

第2次循环:j =2,s =30。

第3次循环:j =3,s =60。

第4次循环:j =4,s =100。

while 条件不再满足。

所以,其中循环语句的执行次数为4。

(4)答:语句s ++的执行次数2)2)(3(3)1()1(12121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i i nj。

(5)答:其中x ++语句为基本运算语句,∑∑∑=+==-=-==n i n i j ni n n i n n T 1112)1()(1)(=O(n 2)。

(6) 答:由于内循环j 的取值范围,所以i ≤n /2,则,该程序段的时间复杂度为O(n 2)。

∑∑∑-===--==2/122/124/))12((n i nij n i n i n m 3log 2n2.练习题2参考答案1.单项选择题(1)A (2)C (3)A (4)B (5)C(6)D (7)C (8)B (9)A (10)C(11)B (12)A (13)C (14)D (15)D(16)D (17)A (18)C (19)A (20)D2.填空题(1)L.length=0(2)O(1)(3)O(n)(4)n-i(5)①物理存储位置②指针域(6)①前驱 ②O(n)(7)q=p->next; p->next=q->next; free(q);(8)s->next= p->next; p->next=s;(9)O(1)(10)L->next==L3.简答题(1)答:顺序存储结构中,逻辑上相邻元素的存储空间也是相邻的,无需额外空间表示逻辑关系,所以存储密度大,同时具有随机存取特性。

数据结构课后习题答案第五章数组与广义表

数据结构课后习题答案第五章数组与广义表

第五章数组与广义表一、假设有二维数组A6*8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000。

计算:1、数组A的体积(即存储量);2、数组A的最后一个元素a57的第一个字节的地址;3、按行存储时,元素a14的第一个字节的地址;4、按列存储时,元素a47的第一个字节的地址;答案:1、(6*8)*6=2882、loc(a57)=1000+(5*8+7)*6=1282或=1000+(288-6)=12823、loc(a14)=1000+(1*8+4)*6=10724、loc(a47)=1000+(7*6+4)*6=1276二、假设按低下标(行优先)优先存储整数数组A9*3*5*8时第一个元素的字节地址是100,每个整数占四个字节。

问下列元素的存储地址是什么?(1)a0000(2)a1111(3)a3125 (4)a8247答案:(1)100(2)loc(a1111)=100+(1*3*5*8+1*5*8+1*8+1)*4=776(3) loc(a3125)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784(4) loc(a8247)=100+(8*3*5*8+2*5*8+4*8+7)*4=4416五、设有一个上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B[m]中,(m 充分大),使得B[k]=aij且k=f1(i)+f2(j)+c。

试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)。

答:K=n+(n-1)+(n-2)+…..+(n-(i-1)+1)+j-i=(i-1)(n+(n-i+2))/2+j-i所以f1(i)=(n+1/2)i-1/2i2f2(j)=jc=-(n+1)九、已知A为稀疏矩阵,试从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成∑aii运算的优缺点。

(对角线求和)解:1、二维数组For(i=1;i<=n;i++)S=s+a[i][i];时间复杂度:O(n)2、for(i=1;i<=m.tu;i++)If(a.data[k].i==a.data[k].j) s=s+a.data[k].value;时间复杂度:O(n2)二十一、当稀疏矩阵A和B均以三元组表作为存储结构时,试写出矩阵相加的算法,其结果存放在三元组表C中。

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】
A.DIV R0,R1;(R0)/(R1)→R0 B.INT n;产生软中断 C.NOT R0;寄存器R0的内容取非 D.MOV R0,addr;把地址处的内存数据放入寄存器R0中 【答案】C 【解析】A项,除法操作出现除数为零的情况时,会产生内中断, CPU切换为内核态进行中断处理;B项,直接产生中断,会切换到内核 态;D项,addr出现非法地址,会出现中断,进而切换到内核态。
D.1用C语言写的某单位的认识管理程序语言,2操作系统,3编译
程序 【答案】B 【解析】计算机系统的组成如下图所示:
其中,C语言写的某单位的认识管理程序语言属于应用程序,编译 程序属于语言处理程序。
3 假定下列指令已装入指令寄存器。则执行时不可能导致CPU从 用户态变为内核态(系统态)的是( )。[2015年联考真题]
5 下列说法中( )不是创建进程必须的。[上海交通大学考研真 题]
A.建立一个进程的进程表项 B.为进程分配内存 C.为进程分配CPU D.将进程表项放入就绪队列 【答案】C 【解析】进程刚被创建后,实际上是处于就绪状态的,所以不许为 进程分配CPU。
6 若系统S1采用死锁避免方法,S2采用死锁检测方法,下列叙述 中正确的是( )。[2015年联考真题]
4 下列选项中会导致进程从执行态变为就绪态的事件是( )。 [2015年联考真题]
A.执行P(wait)操作 B.申请内存失败 C.启动I/0设备 D.被高优先级进程抢占 【答案】D 【解析】D项,被高优先级进程抢占,进程会由执行态变为就绪 态。ABC三项,程序由于缺少资源而由执行态转为阻塞态。
目录
第一部分 名校考研真题 一、选择题 二、综合应用题
第二部分 课后习题 第1章 绪 论 第2章 线性表 第3章 栈和队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查 找 第9章 内排序 第10章 外排序 第11章 数据结构和STL

第五章-数据结构教程(Java语言描述)-李春葆-清华大学出版社

第五章-数据结构教程(Java语言描述)-李春葆-清华大学出版社
和安全漏洞的时候,增加一个数字(现在是 第三个数)来表示,如 3.0.18。
Mainline是主线 版本,
Stable 是稳定 版,由
Longterm是长 期支持版
Linux是一个内核运行在单独的内核地址空间的单内核,但是
汲取了微内核的精华如模块化设计、抢占式内核、支持内核线 程以及动态装载内核模块等特点。
5.1.2 ARM-Linux内核版本及特点
ARM-Linux内核版本变化与Linux内核版本变 化保持同步。
嵌入式linxu系统内核(如ARM_Linux内核)往往在标准linux基 础上通过安装patch实现,如ARM_Linux内核就是对linux安装 rmk补丁形成的,只有安装了这些补丁,内核才能顺利地移植 到ARM_Linux上。 当然也可以通过已经安装好补丁的内核源码包实现。
Linux存在着许多不同的版本,但它们都使用了 Linux内核。
Linux是一个一体化内核(monolithic kernel)系统。
这里的“内核”指的是一个提供硬件 抽象层、磁盘及文件系统控制、多任 务等功能的系统软件,一个内核不是 一套完整的操作系统。一套建立在 Linux内核的完整操作系统叫作Linux操 作系统,或是GNU/Linux。
以2.6版本为例,其主要特点有:
(1)支持动态加载内核模块机制。 (2)支持对称多处理机制(SMP)。 (3) O(1)的调度算法。 (4) linux内核可抢占,linux内核具有允许在内核运行的任务 优先执行的能力。 (5) linux不区分线程和其他一般的进程,对内核来说,所有 的进程都一样(仅部分共享资源)。 (6)linux提供具有设备类的面向对象的设备模块、热插拔事 件,以及用户空间的设备文件系统。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9. 设有一个不带表头结点的单链表 L,设计两个递归算法,maxnode(L)返回单链表 L
4
数据结构教程学习指导
中最大结点值,minnodel(L)返回单链表 L 中最小结点值。 解:对应的递归算法如下:
ElemType maxnode(LinkNode *L) { ElemType max; if (L->next==NULL) return L->data; max=maxnode(L->next); if (max>L->data) return max; else return L->data; } ElemType minnode(LinkNode *L) { ElemType min; if (L->next==NULL) return L->data; min=minnode(L->next); if (min>L->data) return L->data; else return min; }
b:5 b:4 b:3 b:2 a:1 c:2 c:3 c:4 c:5
2. 已知 A[0..n-1]为整数数组,设计一个递归算法求这 n 个元素的平均值。 解:设avg(A,i)返回A[0..i]共i+1个元素的平均值,则递归模型如下:
avg(A,i)=A[0] avg(A,i)=(avg(A,i-1)*i+A[i])/(i+1) 当i=0 其他情况
第 5 章 递归 return i-1; else return -1; }
5
#include "sqstring.cpp" //顺序串的基本运算算法 findpat(SqString s,SqString t) { int i=0,j=0,k; while (i<s.length && j<t.length) { if (t.data[j]=='*') { k=findpat(SubStr(s,i+2,s.length-i-1),SubStr(t,j+2,t.length-j-1)); j++; if (k>-1) return i-1; else return -1; } else if (s.data[i]==t.data[j]) { i++; j++; } else { i=i-j+1; j=0; } } if (j>=t.length)
int fun(int n) { if (n==1 || n==2) return n; else return fun(n-1)+fun(n-2); }
5. 设计一个递归算法,利用顺序串的基本运算求串 s 的逆串。 解:经分析,求逆串的递归模型如下:
f(s) = s f(s) = Concat(f(SubStr(s,2,StrLength(s)-1)),SubStr(s,1,1)) 若s=Φ 其他情况
第 5 章 递归
教材中练习题及参考答案
1. 有以下递归函数:
void fun(int n) { if (n==1) printf("a:%d\n",n); else { printf("b:%d\n",n); fun(n-1); printf("c:%d\n",n); } }
分析调用 fun(5)的输出结果。 解:调用递归函数 fun(5)时,先递推到递归出口,然后求值。这里的递归出口语句是 printf("a:%d\n",n),递推时执行的语句是 printf("b:%d\n",n),求值时执行的语句是 printf("c:%d\n",n)。调用 fun(5)的输出结果如下:
f(n)=1 f(n)=f(n/10)+1 当 n<10 时 其他情况
对应的递归算法如下:
int fun(int n) { if (n<10) return 1; else return fun(n/10)+1; }
4. 上楼可以一步上一阶,也可以一步上两阶。设计一个递归算法,计算共有多少种不 同的走法。 解:设 f(n)表示 n 阶楼梯的不同的走法数,显然 f(1)=1,f(2)=2(两阶有一步一步走和 两步走 2 种走法) 。f(n-1)表示 n-1 阶楼梯的不同的走法数,f(n-2)表示 n-2 阶楼梯的不同的 走法数, 对于 n 阶楼梯, 第 1 步上一阶有个 f(n-1)种走法, 第 1 步上两阶有个 f(n-2)种走法, 则 f(n)= f(n-1)+ f(n-2)。对应的递归算法如下:
8. 设有一个不带表头结点的单链表 L,设计两个递归算法,del(L,x)删除单链表 L 中 第一个值为 x 的结点,delall(L,x)删除单链表 L 中所有值为 x 的结点。 解:对应的递归算法如下:
void del(LinkNode *&L,ElemType x) { LinkNode *t; if (L==NULL) return; if (L->data==x) { t=L; L=L->next; free(t); return; } del(L->next,x); } void delall(LinkNode *&L,ElemType x) { LinkNode *t; if (L==NULL) return; if (L->data==x) { t=L; L=L->next; free(t); } delall(L->next,x); }
7. 设有一个不带表头结点的单链表 L,设计两个递归算法,traverse(L)正向输出单链表 L 的所有结点值,traverseR(L)反向输出单链表 L 的所有结点值。 解:对应的递归算法如下:
void traverse(LinkNode *L) { if (L==NULL) return; printf("%d ",L->data); traverse(L->next); } void traverseR(LinkNode *L) { if (L==NULL) return; traverseR(L->next); printf("%d ",L->data); }
递归思路是:对于 s=“s1s2„sn”的串,假设“s2s3„sn”已求出其逆串即 f(SubStr(s,2, StrLength(s)-1)),再将 s1(为 SubStr(s,1,1))单个字符构成的串连接到最后即得到 s 的逆 串。对应的递归算法如下:
#include "sqstring.cpp" //顺序串的基本运算算法 SqString invert(SqString s) { SqString s1,s2; if (StrLength(s)>0) { s1=invert(SubStr(s,2,StrLength(s)-1)); s2=Concat(s1,SubStr(s,1,1)); } else StrCopy(s2,s); return s2;
对应的递归算法如下:
float avg(int A[],int i) { if (i==0) return(A[0]); else return((avg(A,i-1)*i+A[i])/(i+1)); }
2
数据的调用方式为:avg(A,n-1)。 3. 设计一个算法求正整数 n 的位数。 解:设 f(n)为整数 n 的位数,其递归模型如下:
10. 设计一个模式匹配算法,其中模板串 t 含有通配符'*',它可以和任意子串匹配。对 于目标串 s,求其中匹配模板 t 的一个子串的位置('*'不能出现在 t 的最开头和末尾) 。 解:采用 BF 模式匹配的思路,当是 s[i]和 t[j]比较,而 t[j]为'*'时,取出 s 中对应'*'的 字符之后的所有字符构成的字符串,即 SubStr(s,i+2,s.length-i-1),其中 i+2 是 s 中对应 '*'字符后面一个字符的逻辑序号。再取出 t 中'*'字符后面的所有字符构成的字符串,即 SubStr(t,j+2,t.length-j-1),递归对它们进行匹配,若返回值大于-1,表示匹配成功,返 回 i。否则返回-1。对应的递归算法如下:
第 5 章 递归 }
3
6. 设有一个不带表头结点的单链表 L,设计一个递归算法 count(L)求以 L 为首结点指 针的单链表的结点个数。 解:对应的递归算法如下:
int count(LinkNode *L) { if (L==NULL) return 0; else return count(L->next)+1; }
相关文档
最新文档