c语言求n维方阵的对角线元素之和,李春葆数据结构教程第4版习题答案.docx

1章 答案

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

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

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

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

设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)。

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

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

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

对于输入的任意n个整数,输出其中的最大和最小元素。解:(1)算法如下:

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

算法如下:

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

算法如下:

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

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

(1)

(2)

(3)

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

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

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

有以下递归算法用于对数组a[i..j]的元素进行归并排序:

求mergesort(a,0,n-1)的时间复杂度。其中,merge(a,i,j,m)用于两个有序子序列

a[i..m]和a[m+l..j]的合并,是一个非递归函数,它的时间复杂度为O(合并的元素个数)。解:设mergesort(a,0,n-1)的执行次数为T(n),分析得到以下递归关系:

O(n)为merge()所需的时间,设为cn(c为常量)。因此:

由于 趋近于1,则k=log2n。所以

上机实验题1

实验题1设计一个程序expl-1.cpp,输出所有小于等于n(n为一个大于2的正整数)的素数。要求:

每行输出10个素数;(2)尽可能采用较优的算法。’

实验题2编写一个程序expl-2.cpp,计算任一输入的正整数的各位数字之和,并分析算法的时间复杂度。

实验题3编写一个程序expl-3.cpp,判断一个字符串是否为“回文”(顺读和倒读都一样的字符串称为“回文”),并分析算法的时间复杂度。

2章 答案

叙述线性表两种存储结构各自的主要特点。

解:线性表的两种存储结构分别是顺序存储结构和链式存储结构。顺序存储结构的主要特点如下:

节点中只有自身的数据域,没有指针域。因此,顺序存储结构的存储密度大,存储空间利用率高;

可以通过序号直接访问任何数据元素,即可以随机存取;

插入和删除操作会引起大量元素的移动。链式存储结构的主要特点如下:

节点中除自身的数据域还有表示关联信息的指针域。因此链式存储结构比顺序存储结构的存储密度小,存储空间利用率较低;

在逻辑上相邻的节点在物理上不比相邻,因此不可以随机存取,只能顺序存取;

插入和删除操作方便灵活。不必移动节点,只需修改节点中的指针域即可。

设计一个算法,将x插入到一个有序(从小到大排序)的线性表(顺序存储结构)的适当位置上,并保持线性表的有序性。

解:通过比较在顺序表L中找到插入x的位置i,将该位置及后面的元素后移一个位置,将x插入到位置i中,最后将L的长度增1。对应的算法如下:

假设一个顺序表L中所有元素为整数,设计一个算法调整该顺序表,使其中所有小于零的元素放在所有大于等于零的元素的前面。

解:i、j分别置初值为0和L.1ength-1,当i

设计一个算法,将一个带头节点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有节点逆置,即第一个节点的数据域变为an,……,最后一个节点的数据域变为a1。

解:用P指针扫描单链表,将当前节点*P采用头插法插入到新建的单链表中。对应的算法如下:

设有一个带头节点的单链表L,节点的结构为(data,next),data为整数元素,next为后继节点的指针。设计一个算法,按递减次序输出该单链表中各节点的数据元素,并释放节点所占的存储空间, 并要求算法的空间复杂度为O(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值