算法与数据结构C语言版课后习题参考答案机械工业出版社1绪论习题详细答案文档格式.docx
- 文档编号:15965914
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:20
- 大小:27.10KB
算法与数据结构C语言版课后习题参考答案机械工业出版社1绪论习题详细答案文档格式.docx
《算法与数据结构C语言版课后习题参考答案机械工业出版社1绪论习题详细答案文档格式.docx》由会员分享,可在线阅读,更多相关《算法与数据结构C语言版课后习题参考答案机械工业出版社1绪论习题详细答案文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
有穷性、确定性、可行性、输入和输出。
2.数据的逻辑结构分哪几种,为什么说逻辑结构是数据组织的主要方面?
【解答】数据的逻辑结构分为线性结构和非线性结构。
(也可以分为集合、
线性结构、树形结构和图形即网状结构)。
逻辑结构是数据组织的某种“本质性”的东西:
(1)逻辑结构与数据元素本身的形式、内容无关。
(2)逻辑结构与数据元素的相对位置无关。
(3)逻辑结构与所含数据元素的个数无关。
3.试举一个数据结构的例子,叙述其逻辑结构、存储结构、运算三方面的内容。
【解答】如学生成绩表,逻辑结构是线性结构,可以顺序存储(也可以链式存储),运算可以有插入、删除、查询、等等。
4.简述算法的五个特性,对算法设计的要求。
【解答】算法的五个特性是:
有穷性、确定性、可行性、零至多个输入和一至多个输出。
1/11
对算法设计的要求:
正确性,易读性,健壮性,和高的时空间效率(运算速度快,存储空间小)。
5.设n是正整数,求下列程序段中带@记号的语句的执行次数。
(1)i=1;
k=0;
(2)i=1;
j=0;
while
(i<
n)
while(i+j<
=n)
{k=k+50*i;
i++;
@
{
if(i>
j)j++;
}
else
i++;
}@
(3)x=y=0;
(4)x=91;
y=100;
for(i=0;
i<
n;
i++)
while(y>
0)
for(j=0;
j<
j++)
if(x>
100)
{x++;
{x=x-10;
y--;
for(k=0;
k<
k++)@
y++;
elsex++;
【解答】
(1)n-1
(2)n
为偶数时,均为ndiv2;
你为奇数时,分别为:
(ndiv2)+1
和ndiv2
(3)n+1,n(n+1),n
2,(n+1)n2,n3
(4)100,1000
6.有实现同一功能的两个算法A1和A2,其中A1的时间复杂度为Tl=O(2n),A2的时间复杂度为T2=O(n2),仅就时间复杂度而言,请具体分析这两个算法哪一个好?
【解答】对算法A1和A2的时间复杂度T1和T2取对数,得nlog2和2logn。
显然,当n<
4时,算法A1好于A2;
当n=4时,两个算法时间复杂度相同;
当n>
4时,算法A2好于A1。
7.选择题:
算法分析的目的是()
A、找出数据结构的合理性B、研究算法中的输入和输出的关系
C、分析算法的效率以求改进D、分析算法的易懂性和文档特点
【解答】C
二、算法设计题
8.已知输入x,y,z三个不相等的整数,设计一个“高效”算法,使得这三个数按从小到大输出。
“高效”的含义是用最少的元素比较次数、元素移动次数和
2/11
输出次数。
voidBest()
{//按序输出三个整数的优化算法inta,b,c,t;
scanf(“%d%d%d”,&
a,&
b,&
c);
if(a>
b)
{t=a;
a=b;
b=t:
}//a和b已正序
if(b>
c)
{t=c;
c=b;
//c已到位
if(a>
t){b=a;
a=t;
elseb=t;
}//if
printf(“%d,%d,%d\n”,a,b,c);
//最佳2次比较,无移动;
最差3次比较,7个赋值
9.在数组A[n]中查找值为k的元素,若找到则输出其位置i(1≤i≤n),否则输出0作为标志。
设计算法求解此问题,并分析在最坏情况下的时间复杂度
【题目分析】从后向前查找,若找到与k值相同的元素则返回其位置,否则返
回0。
intSearch(ElemTypeA[n+1],ElemTypek)
{i=n;
wile(i>
=1)&
&
(A[i]!
=k))i--;
if(i>
=1)returni;
elsereturn0;
当查找不成功时,总的比较次数为n+1次,所以最坏情况下时间复杂度为O(n)。
3/11
第2章线性表习题参考答案
一、基础知识题
2.1试述头指针、头结点、元素结点、首元结点的区别,说明头指针和头结点的作
【解答】指向链表第一个结点(或为头结点或为首元结点)的指针称为头指针。
“头指针”
具有标识一个链表的作用,所以经常用头指针代表链表的名字,如链表
L既是指链表的名
字是L,也是指链表的第一个结点的地址存储在指针变量
L中,头指针为“NULL”则表示
一个空表。
有时,我们在整个线性链表的第一个元素结点之前加入一个结点,
称为头结点,它的数据域
可以不存储任何信息(也可以做监视哨或存放线性表的长度等附加信息)
,指针域中存放的
是第一个数据结点的地址,空表时为空。
“头结点”的加入,使插入和删除等操作方便统
一。
元素结点即是数据结点,至少包括元素自身信息和其后继元素的地址两个域。
首元结点是指链表中第一个数据元素的结点;
为了操作方便,通常在链表的首元结点之前附
设一个结点,称为头结点。
2.2分析顺序存储结构和链式存储结构的优缺点,说明何时应该利用何种结构。
【解答】①从空间上来看,当线性表的长度变化较大,难以估计其规模时,
选用动态的链表
作为存储结构比较合适,但链表除了需要设置数据域外,
还要额外设置指针域,因此当线性
表长度变化不大,易于事先确定规模时,为了节约存储空间,宜采用顺序存储结构。
②从时间上看,顺序表具有按元素序号随机访问的特点,
在顺序表中按序号访问数据元素的
时间复杂度为O
(1);
而链表中按序号访问的时间复杂度为
O(n)。
所以如果经常按序号访问
数据元素,使用顺序表优于链表。
在顺序表中做插入删除操作时,
平均移动大约表中一半的元素,
因此n较大时顺序表的插入
和删除效率低。
在链表中作插入、删除,虽然也要找插入位置,但操作主要是比较操作。
从
这个角度考虑显然链表优于顺序表。
总之,两种存储结构各有长短,选择那一种存储结构,由实际问题中的主要因素决定。
2.3分析在顺序存储结构下插入和删除结点时平均需要移动多少个结点。
【解答】平均移动表中大约一半的结点,
插入操作平均移动
个结点,删除操作平均移动
个
结点。
具体移动的次数取决于表长和插入、删除的结点的位置。
2.4为什么在单循环链表中常使用尾指针,若只设头指针,插入元素的时间复杂度如何?
【解答】单循环链表中无论设置尾指针还是头指针都可以遍历表中任一个结点。
设置尾指针
时,若在表尾进行插入元素或删除第一元素,操作可在
O
(1)时间内完成;
若只设置头指针,
表尾进行插入或删除操作,需要遍历整个链表,时间复杂度为
2.5在单链表、双链表、单循环链表中,若知道指针
p指向某结点,能否删除该结点,时间
复杂度如何?
【解答:
】以上三种链表中,若知道指针
p指向某结点,都能删除该结点。
双链表删除
p所
指向的结点的时间复杂度为
O
(1),而单链表和单循环链表上删除
p所指向的结点的时间复
杂度均为O(n)。
2.6下面算法的功能是什么?
LinkedListUnknown(LinkedListla)
{LNode*q,*p;
if(la&
la->
next)
{q=la;
la=la->
next;
p=la;
while(p->
next)p=p->
4/11
p->
next=q;
q->
next=null;
returnla;
【解答】将首元结点删除并插入到表尾(设链表长度大于1)。
2.7选择题:
在循环双链表的*p结点之后插入*s结点的操作是()
la、p->
next=s;
s->
prior=p;
p->
next->
prior=s;
next=p->
B、p->
lc、s->
next:
=s;
D、s->
s>
next=p>
p>
prior=s;
【解答】D
2.8选择题:
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除
运算,则利用()存储方式最节省时间。
la.顺序表B.双链表lc.带头结点的双循环链表D.单循环链表
【解答】la
2.9设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两
个有序链表合并成一个非递增有序的单链表。
要求使用原链表空间,表中无重复数据。
【题目分析】因为两链表已按元素值非递减次序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 语言版 课后 习题 参考答案 机械工业 出版社 绪论 详细 答案