数据结构及算法课后习题答案解析

上传人:re****.1 文档编号:492532287 上传时间:2022-11-27 格式:DOC 页数:29 大小:556.50KB
返回 下载 相关 举报
数据结构及算法课后习题答案解析_第1页
第1页 / 共29页
数据结构及算法课后习题答案解析_第2页
第2页 / 共29页
数据结构及算法课后习题答案解析_第3页
第3页 / 共29页
数据结构及算法课后习题答案解析_第4页
第4页 / 共29页
数据结构及算法课后习题答案解析_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《数据结构及算法课后习题答案解析》由会员分享,可在线阅读,更多相关《数据结构及算法课后习题答案解析(29页珍藏版)》请在金锄头文库上搜索。

1、.2.3 课后习题解答2.3.2 判断题1线性表的逻辑顺序与存储顺序总是一致的。2顺序存储的线性表可以按序号随机存取。3顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。4线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。5在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。6在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。7线性表的链式存储结构优于顺序存储结构。8在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。9线性表的链式存储结构是用一组任意的存

2、储单元来存储线性表中数据元素的。10在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。11静态链表既有顺序存储的优点,又有动态链表的优点。所以它存取表中第i个元素的时间与i无关。12线性表的特点是每个元素都有一个前驱和一个后继。2.3.3 算法设计题1设线性表存放在向量Aarrsize的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。提示直接用题目中所给定的数据结构顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体,因为是顺序存储

3、,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,也可以从高下标端开始一边比较,一边移位然后插入x ,最后修改表示表长的变量。int insert /*设elenum为表的最大下标*/if return 0;/*表已满,无法插入*/else i=*elenum;while =0 & Aix/*边找位置边移动*/Ai+1=Ai;i-; Ai+1=x;/*找到的位置是插入位的下一位*/ +;return 1;/*插入成功*/时间复杂度为O。2已知一顺序表A,其元素值非递减有序排列,编写一个算法删除顺序表

4、中多余的值相同的元素。提示对顺序表A,从第一个元素开始,查找其后与之值相同的所有元素,将它们删除;再对第二个元素做同样处理,依此类推。void deletei=0;whileilast/*将第i个元素以后与其值相同的元素删除*/k=i+1;whileklast&A-datai=A-datakk+;/*使k指向第一个与Ai不同的元素*/n=k-i-1;/*n表示要删除元素的个数*/forj=k;jlast;j+A-dataj-n=A-dataj;/*删除多余元素*/A-last= A-last -n;i+;3写一个算法,从一个给定的顺序表A中删除值在xyx之间的所有元素,要求以较高的效率来实现。

5、提示对顺序表A,从前向后依次判断当前元素A-datai是否介于x和y之间,若是,并不立即删除,而是用n记录删除时应前移元素的位移量;若不是,则将A-datai向前移动n位。n用来记录当前已删除元素的个数。void deletei=0;n=0;whileilastif datai=x&A-datai n+;/*若A-datai 介于x和y之间,n自增*/else A-datai-n=A-datai;/*否则向前移动A-datai*/i+;A-last-=n;4线性表中有n个元素,每个元素是一个字符,现存于向量Rn中,试写一算法,使R中的字符按字母字符、数字字符和其它字符的顺序排列。要求利用原来的

6、存储空间,元素移动次数最小。提示对线性表进行两次扫描,第一次将所有的字母放在前面,第二次将所有的数字放在字母之后,其它字符之前。int fch/*判断c是否字母*/if=a&c=A&creturn ;elsereturn ;int fnum/*判断c是否数字*/if=0&c return ;else return ;void processlow=0;high=n-1;whilelow/*将字母放在前面*/whilelowhigh&fch low+;whilelowhigh&!fch high-;iflowk=Rlow;Rlow=Rhigh;Rhigh=k;low=low+1; high=n-

7、1;whilelow/*将数字放在字母后面,其它字符前面*/whilelowhigh&fnum low+;whilelowhigh&!fnum high-;iflowk=Rlow;Rlow=Rhigh;Rhigh=k;5线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换。即将线性表:a1, a2, , am, b1, b2, , bn改变为:b1, b2, , bn , a1, a2, , am。提示比较m和n的大小,若mn,则将表中元素依次前移m次;否则,将表中元素依次后移n次。voidprocessifmfori=1;ix=L-data0;

8、fork=1;klast;k+L-datak-1=L-datak;L-dataL-last=x;else fori=1;ix=L-dataL-last;forlast-1;k=0;k-L-datak+1=L-datak;L-data0=x;6已知带头结点的单链表L中的结点是按整数值递增排列的,试写一算法,将值为x 的结点插入到表L中,使得L仍然递增有序,并且分析算法的时间复杂度。LinkList insertp=L;whilenext&xp-next-datap=p-next;/*寻找插入位置*/s=mallocsizeof;/*申请结点空间*/s-data=x; /*填装结点*/s-next

9、=p-next;p-next=s;/*将结点插入到链表中*/return; 7假设有两个已排序递增的单链表A和B,编写算法将它们合并成一个链表C而不改变其排序性。LinkList CombineC=A;rc=C;pa=A-next;/*pa指向表A的第一个结点*/pb=B-next;/*pb指向表B的第一个结点*/free;/*释放B的头结点*/while/*将pa、pb所指向结点中,值较小的一个插入到链表C的表尾*/ifdatadatarc-next=pa;rc=pa;pa=pa-next;elserc-next=pb;rc=pb;pb=pb-next;ifrc-next=pa;elserc

10、-next=pb;/*将链表A或B中剩余的部分链接到链表C的表尾*/return;8假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写算法删除该结点的前驱结点。提示利用循环单链表的特点,通过s指针可循环找到其前驱结点p及p的前驱结点q,然后可删除结点*p。viod delepreLNode *p, *q;p=s;while next!=sq=p; p=p-next;q-next=s;free;9已知两个单链表A和B分别表示两个集合,其元素递增排列,编写算法求出A和B的交集C,要求C同样以元素递增的单链表形式存储。提示交集指的是两个单链表的元素值相同的结点的

11、集合,为了操作方便,先让单链表C带有一个头结点,最后将其删除掉。算法中指针p用来指向A中的当前结点,指针q用来指向B中的当前结点,将其值进行比较,两者相等时,属于交集中的一个元素,两者不等时,将其较小者跳过,继续后面的比较。LinkList IntersectLNode *q, *p, *r, *s; LinkList C;C= mallocsizeof;C-next=NULL;r=C;p=A; q=B;while if datadata p=p-next;elseif data=q-datas=mallocsizeof;s-data=p-data;r-next=s;r=s;p=p-next;

12、q=q-next;else q=q-next;r-next=NULL;C=C-next;return C;10设有一个双向链表,每个结点中除有prior、data和next域外,还有一个访问频度freq域,在链表被起用之前,该域的值初始化为零。每当在链表进行一次Locata运算后,令值为x的结点中的freq域增1,并调整表中结点的次序,使其按访问频度的非递增序列排列,以便使频繁访问的结点总是靠近表头。试写一个满足上述要求的Locata算法。提示在定位操作的同时,需要调整链表中结点的次序:每次进行定位操作后,要查看所查找结点的freq域,将其同前面结点的freq域进行比较,同时进行结点次序的调整。typedef struct dnodedatatype data;int freq;struct DLnode *prior,*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号