ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:27.67KB ,
资源ID:17010640      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17010640.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法与数据结构C语言版课后习题答案机械工业出版社第1章绪论习题参考答案Word文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法与数据结构C语言版课后习题答案机械工业出版社第1章绪论习题参考答案Word文档格式.docx

1、 kk50*; +; i(ij)j+; lse i; (3)=; ()91;y=100; fr(;i;i+) while(y) for(j=;j) x+; =1; y; for(k;kn;k) ; ese x+; 【解答】(1)n1 ()为偶数时,均为n div ;您为奇数时,分别为:( iv 2)+1 与n div ()n+1,n(n+1), 2,(n+1)n2, n3(4)10, 10004.有实现同一功能得两个算法1与2,其中A得时间复杂度为Tl(2n),A2得时间复杂度为T2=O(2),仅就时间复杂度而言,请具体分析这两个算法哪一个好?【解答】对算法1与A2得时间复杂度1与T取对数,得

2、nlog2与lgn。显然,当nt)=a; a=t; /a与b已正序else b=t;/ifrif(“%d,%d,%d”,a,);/最佳次比较,无移动;最差次比较,7个赋值6在数组An中查找值为k得元素,若找到则输出其位置i(n),否则输出0作为标志。设计算法求解此问题,并分析在最坏情况下得时间复杂度【题目分析】 从后向前查找,若找到与k值相同得元素则返回其位置,否则返回。int Seah(ElemTypA+,Eemye k)in;ie(i1)&(Ai!=k) i-;if(i=1) etun i;e reu0;当查找不成功时,总得比较次数为n+次,所以最坏情况下时间复杂度为()。第章 线性表 习

3、题参考答案2.1试述头指针、头结点、元素结点、首元结点得区别,说明头指针与头结点得作【解答】指向链表第一个结点(或为头结点或为首元结点)得指针称为头指针、“头指针”具有标识一个链表得作用,所以经常用头指针代表链表得名字,如链表L既就是指链表得名字就是,也就是指链表得第一个结点得地址存储在指针变量中,头指针为“NUL”则表示一个空表。有时,我们在整个线性链表得第一个元素结点之前加入一个结点,称为头结点,它得数据域可以不存储任何信息(也可以做监视哨或存放线性表得长度等附加信息),指针域中存放得就是第一个数据结点得地址,空表时为空、“头结点”得加入,使插入与删除等操作方便统一。元素结点即就是数据结点

4、,至少包括元素自身信息与其后继元素得地址两个域。首元结点就是指链表中第一个数据元素得结点;为了操作方便,通常在链表得首元结点之前附设一个结点,称为头结点。.2分析顺序存储结构与链式存储结构得优缺点,说明何时应该利用何种结构、【解答】从空间上来瞧,当线性表得长度变化较大,难以估计其规模时,选用动态得链表作为存储结构比较合适,但链表除了需要设置数据域外,还要额外设置指针域,因此当线性表长度变化不大,易于事先确定规模时,为了节约存储空间,宜采用顺序存储结构、从时间上瞧,顺序表具有按元素序号随机访问得特点,在顺序表中按序号访问数据元素得时间复杂度为O(1);而链表中按序号访问得时间复杂度为O(n)。所

5、以如果经常按序号访问数据元素,使用顺序表优于链表、在顺序表中做插入删除操作时,平均移动大约表中一半得元素,因此较大时顺序表得插入与删除效率低、在链表中作插入、删除,虽然也要找插入位置,但操作主要就是比较操作、从这个角度考虑显然链表优于顺序表、总之,两种存储结构各有长短,选择那一种存储结构,由实际问题中得主要因素决定、 分析在顺序存储结构下插入与删除结点时平均需要移动多少个结点。【解答】平均移动表中大约一半得结点,插入操作平均移动 个结点,删除操作平均移动 个结点、具体移动得次数取决于表长与插入、删除得结点得位置。为什么在单循环链表中常使用尾指针,若只设头指针,插入元素得时间复杂度如何?【解答】

6、单循环链表中无论设置尾指针还就是头指针都可以遍历表中任一个结点。设置尾指针时,若在表尾进行插入元素或删除第一元素,操作可在(1)时间内完成;若只设置头指针,表尾进行插入或删除操作,需要遍历整个链表,时间复杂度为O(n)。、5 在单链表、双链表、单循环链表中,若知道指针p指向某结点,能否删除该结点,时间复杂度如何?【解答:】以上三种链表中,若知道指针p指向某结点,都能删除该结点。双链表删除所指向得结点得时间复杂度为(1),而单链表与单循环链表上删除所指向得结点得时间复杂度均为O(n)。2、6下面算法得功能就是什么?inkedList Unnow(LinedLst la) LNoe *q,p; i

7、f(la & la-next) =la; lal-et; p=a; hile(-x) p=p-nex; pnxtq; qnxt=nul; rt la; 【解答】将首元结点删除并插入到表尾(设链表长度大于)。2.7 选择题:在循环双链表得结点之后插入s结点得操作就是( )la、p-nexts; s-piop; p-nextprir=s; -et=pnet;B、nexts; p-nex-prio=;pi=; sext=p-next;lc、s-ior=; s-next=p-ext; pext:=s; -next-rir=; D、s-prorp; sext=pnext; pnxprir =s; pex

8、t=;【解答】D2.8 选择题:若某线性表最常用得操作就是存取任一指定序号得元素与在最后进行插入与删除运算,则利用( )存储方式最节省时间。la。顺序表 B.双链表 l.带头结点得双循环链表 D、单循环链表【解答】9设与h分别就是两个带头结点得非递减有序单链表得头指针,试设计算法, 将这两个有序链表合并成一个非递增有序得单链表、要求使用原链表空间,表中无重复数据。【题目分析】因为两链表已按元素值非递减次序排列,将其合并时,均从第一个结点起进行比较,将小得链入链表中,同时后移链表工作指针,若遇值相同得元素,则删除之、该问题要求结果链表按元素值非递增次序排列,故在合并得同时,将链表结点逆置。Lin

9、keLtUnion(Lnket ha,h) h,hb分别就是带头结点得两个单链表得头指针,链表中得元素值按递增序排列本算法将两链表合并成一个按元素值递减次序排列得单链表,并删除重复元素 aanex; pa就是链表ha得工作指针pb=hbnxt; b就是链表hb得工作指针 h-extull; h作结果链表得头指针,先将结果链表初始化为空 wie(pa!=nul &pb!null) 当两链表均不为空时作 hle(pa-net& padata=a-xt-daa) upa paet=unxt; free(u)删除p链表中得重复元素hi(b-next &pata=pb-next-daa) =pb pbn

10、xt=-et; free()删除b链表中得重复元素 if(adatapbdata) =panet; 将 得后继结点暂存于r pa-next=ha-next; 将a结点链于结果表中,同时逆置ha-ext=p;pa=r; 恢复pa为当前待比较结点 es if(pbdatapa-dt)r=pb-next; 将p得后继结点暂存于rbnext=a-net; 将pb结点链于结果表中,同时逆置hanext=pb;pb=; 恢复pb为当前待比较结点 eleu=;p=pnext;free()删除链表pb与a中得重复元素 / whil(p!=nul &pb!=nu) f(a)pb=; 避免再对pa写下面得whe语

11、句 hile(pb!=null) 将尚未到尾得表逆置到结果表中 r=pbnet; pbnet=h-net; hanex=pb; pb; retrn h 算法Unin结束2、11设p指向头指针为la得单链表中某结点,试编写算法,删除结点p得直接前驱结点、【题目分析】设就是单链表中某结点,删除结点得直接前驱结点,要找到*p得前驱结点得前驱pe、进行如下操作:urent; prext=et;free(u);LnestnkedListDe(Lnkedist la,Node *p)删除单链表la上得结点p得直接前驱结点,假定存在prla;i(prenext=p) intf(“*p就是链表第一结点,无前驱

12、n”); ext(0) whle(prenexnext !=p) re=pe-next;=renex; pre-nex=unex; fee(u);eturn(la); 、12 设计一算法,将一个用循环链表表示得稀疏多项式分解成两个多项式,使这两个多项式各自仅有奇次幂或偶次幂项,并要求利用原链表中得结点空间来构造这两个链表。【题目分析】设循环链表表示得多项式得结点结构为: tpef stnd ntower; 幂 fla oe; 系数 ElemTypeother; 其她信息 strt ode nex; 指向后继得指针 PNoe,PlyLnkedis;则可以从第一个结点开始,根据结点得幂就是奇数或偶

13、数而将其插入到奇次幂或偶次幂项得链表中、假定用原链表保存偶次幂,要为奇次幂得链表生成一个表头,为了保持链表中结点得原来顺序,用一个指针指向奇次幂链表得表尾,注意链表分解时不能“断链”。vid PyDs(PoyLinkedLis poly)将pol表示得多项式链表分解为各含奇次幂或偶次幂项得两个循环链表PlkeLit poly2=(PoyLnkeList)mal(iof(Noe); poy2表示只含奇次幂得多项式 2=oly2; r2就是只含奇次幂得多项式链表得尾指针 1=oly; r1就是只含偶次幂得多项式链表当前结点得前驱结点得指针 p=ly- 链表带头结点,p指向第一个元素 while(p

14、!=poly) f(or 2)处理奇次幂 =p-next; 暂存后继 r2next=p; 结点链入奇次幂链表=p; 尾指针后移 =r; 恢复当前待处理结点 lse 处理偶次幂 r1next=p;r1=p; ppnext; r-ext=poly2; r1nxtpl; 构成循环链表 PolyDs、4 设单向链表得头指针为head,试设计算法,将链表按递增得顺序就地排序、【题目分析】本题中得“就地排序”,可理解为不另辟空间,这里利用直接插入原则把链表整理成递增有序链表。LkedLsLinkListIsrtSort(LinkdList head) hea就是带头结点得单链表,本算法利用直接插入原则将链

15、表整理成递增得有序链表 f(eadnext!=nl) 链表不为空表 =hanextnext; 指向第一结点得后继eadnex-next=null;直接插入原则认为第一元素有序,然后从第二元素起依次插入hile(p!=null) r=-net; 暂存p得后继 qhea; whie(-ex &q-next-datapdaa)qq查找插入位置 -nextqne; 将结点链入链表 q-nexp; p=r;2.15已知递增有序得三个单链表分别代表集合A,B与C,设计算法实现A=A(BC),并使结果链表仍保持递增。要求算法得时间复杂度为O(+|)、其中,A为集合A得元素个数、【题目分析】本题首先求B与C得

16、交集,即求B与C中共有元素,再与求并集,同时删除重复元素,以保持结果A递增。ikedLit uni(inkdLis A,B,)A、B与C均就是带头结点得递增有序得单链表,本算法实现A=A(BC)使结果表A保持递增有序p=A-nex;bB-net;pcCxt;设置三个工作指针 r=A; pre指向结果链表中当前待合并结点得前驱Adata=MaxEemye;同类型元素最大值,起监视哨作用while(p |b pc) while(pb & pc) if(p-datadata-aa) pc=next; serk; 表与C表有公共元素 if(pb& pc) whil(p & paatnext=p;re=

17、pa;a= if(predata!=pb-dta)pr-next=p;pre=pb;pb=pb-next;pc=cxt; seb=ppcp-ext; 若中已有,C公共元素,则不再存入结果表 il(a|p&pc) if(p)prenexpa;ese penext=nul;当,无公共元素,将A中剩余链入算法nion结束16 顺序表la与lb非递减有序,顺序表空间足够大。试设计一种高效算法,将b中元素合到la中,使新得la得元素仍保持非递减有序。高效指最大限度地避免移动元素。【题目分析】顺序存储结构得线性表得插入,其时间复杂度为(n),平均移动近一半得元素。线性表la与b合并时,若从第一个元素开始,

18、一定会造成元素后移,这不符合本题“高效算法”得要求、应从线性表得最后一个元素开始比较,大者放到最终位置上。设两线性表得长度各为与 ,则结果表得最后一个元素应在m+位置上、这样从后向前,直到第一个元素为止。eqLit Uio(SeqList , SeLi lb)la与b就是顺序存储得非递减有序线性表,本算法将lb合并到中,元素仍非递减有序 m、last;n=l、las;m,n分别为线性表l与lb得长度 m+1; k为结果线性表得工作指针(下标) i=m-1;j1;,j分别为线性表a与lb得工作指针(下标) whie(i0 &0) if(la、datailb。daaj) la。dtak-la。da

19、tai; ese la、daak-=b、data; whle(=) la。daa=b.ataj; l、la=+; eturnla; 【算法讨论】算法中数据移动就是主要操作。在最佳情况下(l得最小元素大于la得最大元素),仅将lb得n个元素移(拷贝)到中,时间复杂度为(n),最差情况,la得所有元素都要移动,时间复杂度为O(m)、因数据合并到la中,所以在退出第一个ile循环后,只需要一个ile循环,处理lb中剩余元素。第二个循环只有在b有剩余元素时才执行,而在a有剩余元素时不执行。本算法 “最大限度得避免移动元素”,就是“一种高效算法”。、7 已知非空线性链表由head指出,试写一算法,将链表

20、中数据域值最小得那个结点移到链表得最前面。要求:不得额外申请新得链结点。【题目分析】 本题要求将链表中数据域值最小得结点移到链表得最前面。首先要查找最小值结点、将其移到链表最前面,实质上就是将该结点从链表上摘下(不就是删除并回收空间),再插入到链表得最前面。LinedList Delinset(inkeLis ead)本算法将非空线性链表head中数据域值最小得那个结点移到链表得最前面phead-p就是链表得工作指针pre=hed; pr指向链表中数据域最小值结点得前驱=p; 指向数据域最小值结点,初始假定就是第一结点ile (pex) if(-ext-dtai(!head-ext) 若最小值就是第一元素结点,则不需再操作prenxt=q-net; 将最小值结点从链表上摘下q-ext=he-将q结点插到链表最前面heanext=q;einsert2.9三个带头结点得线性链表la、lb与c中得结点均依元素值自小至大非递减排列(可能存在两个以上值相同得结点),编写算法对表进行如下操作:使操作后得a中仅留下三个表中均包含得数据元素得结点,且没有值相

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1