DS线性表习题参考解答.doc
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《DS线性表习题参考解答.doc》由用户(2023DOC)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS 线性 习题 参考 解答
- 资源描述:
-
1、第2章 线 性 表 习题参考解答一、 简答题1试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。【答】头指针:是指向链表中的第一个结点的指针。头结点:在开始结点之前附加上的一个结点。开始结点:链表的第一个结点。 头指针是一个指向地址的变量,用于表示一个链表的开始。引入头结点可以更加方便的进行链表是否为空的判断,同时方便了插入和删除结点。开始结点用于存储链表的第一个数据元素。2何时选用顺序表、何时选用链表作为线性表的存储结构为宜?【答】顺序表中查找元素、获取表长非常容易,但是,要插入或者删除一个元素却需要移动大量的元素;相反,链表中却是方便插入或者删除元素,在查找元素的是,需要进
2、行遍历。因此,当所涉及的问题常常进行查找等操作,而插入、删除相对较少的是,适合采用顺序表;当常常需要插入、删除的时候,适合采用链表。3为什么在单循环链表中设置尾指针比设置头指针更好?【答】在单循环链表中,设置尾指针,可以更方便的判断链表是否为空。4在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?【答】本题分三种情况讨论:1、单链表:当知道指针p指向某结点时,能够根据该指针找到其直接后继,但是不知道头指针,因此不能找到该结点的直接前趋,因此,无法删除该结点。2、双链表:根据指针p可以找到该结点的直接前趋和直接后继,因此,能够删除该结点。3
3、、单循环链表:和双链表类似,根据指针p也可以找到该结点的直接前趋和直接后继,因此,也可以删除该结点。5下述算法的功能是什么? LinkList Demo(LinkList *L) /* L是无头结点单链表*/ LNode *Q,*P; if(L&L-next) Q=L;L=L-next;P=L; while (P-next) P=P-next; P-next=Q; Q-next=NULL; return L; /* Demo */【答】将原来的第一个结点变成末尾结点,原来的第二个结点变成链表的第一个结点。二、算法设计题1试分别用顺序表和单链表作为存储结构,实现将线性表(a0,a1,.an-1)
4、就地逆置的操作,所谓就地指辅助空间应为O(1)。【答】分两种情况讨论如下。 顺序表:要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:void reverlist(sequenlist *L) datatype t; /* 设置临时空间用于存放data */int i;for (i=0;ilength/2;i+) t=L-datai; /* 交换数据 */L-datai=L-dataL-length-1-i;L-dataL-length-1-i=t; 链表:可以利用指针的指向转换来达到表逆置的目的。算法是这样的:LinkL
5、ist *reverselist(LinkList *head)/* 将head 所指的单链表逆置 */ LNode *p,*q ; /* 设置两个临时指针变量 */ if(head-next!=NULL) & (head-next-next!=NULL) /* 当链表不是空表或单结点时 */ p=head-next; q=p-next; p-next=NULL; /*将开始结点变成终端结点 */ while (q) /* 每次循环将后一个结点变成开始结点 */ p=q; q=q-next; p-next= head- next; head-next=p; return head; retur
6、n head; /* 如是空表或单结点表,直接返回head */2顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。【答】因已知顺序表L是递增有序表,所以只要从头找起找到第一个比它大(或相等)的结点数据,把x插入到这个数所在的位置就是了。算法如下:void InsertIncreaseList( Sequenlist *L , Datatype x ) int i; for (i=0; ilength & L-datainext ) p=p-next; /* 查找终端结点 */ p-next = q-next ; /* 将L2的开始结点链接在L1之后 */ return
展开阅读全文