第2章线性表习题解答.docx

上传人:h**** 文档编号:916570 上传时间:2018-11-06 格式:DOCX 页数:12 大小:29.40KB
下载 相关 举报
第2章线性表习题解答.docx_第1页
第1页 / 共12页
第2章线性表习题解答.docx_第2页
第2页 / 共12页
第2章线性表习题解答.docx_第3页
第3页 / 共12页
第2章线性表习题解答.docx_第4页
第4页 / 共12页
第2章线性表习题解答.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、 1第 2 章习题 .1第 2 章习题2.1 若将顺序表中记录其长度的分量 listlen 改为指向最后一个元素的位置 last,在实现各基本运算时需要做那些修改?【解】/用线性表最后一个元素的下标 last 代替 listLen 实现顺序表#define MAXLEN 100typedef int elementType;typedef struct sllLastelementType dataMAXLEN;int last;seqList;/初始化void initialList(seqList /求表长度int listLength(seqList S)return S.last+1;

2、/按序号取元素bool getElement(seqList S,int i,elementType elsex=S.datai-1;return true;2/查找元素 x,成功:返回元素编号;失败:返回 0int listLocate(seqList S,elementType x)int i;for(i=0;iMAXLEN-1)return 0; /表满,返回 0else if(iS.last+2)return 1; /插入位置查处范围,返回 1elsefor(k=S.last;k=i-1;k-)S.datak+1=S.datak;S.datai-1=x;S.last+;return 2

3、;/删除元素int listDelete(seqList if(S.last=-1)return 0; /空表,返回 0else if(iS.last+1)return 1; /删除元素编号超出范围,返回 1else3for(k=i;k=0)coutx;while(x!=-9999)L.last+;L.dataL.last=x;coutx;4/随机数创建顺序表void rndCList(seqList int n,m;L.last=-1;coutn;if(nMAXLEN-1)coutm; srand(unsigned)time(NULL); /产生随机数种子/srand(unsigned)Ge

4、tTickCount(); /产生随机数种子for(i=0;i=0 i-;L.datai+1=x; /插入 xL.listLen+; /修改表长度return i+2; /成功插入,返回 x 在顺序表中的插入位置(元素编号)【算法分析】时间复杂度:O(n)2.5 假设顺序表 L 中的元素递增有序,设计算法在顺序表中插入元素 x,并要求在插入后也没有相同的元素,即若表中存在相同的元素,则不执行插入操作。【解】与上题相似,只是在移动插入元素之前,检查 L 中是否已经存在值 x,若存在,插入失败,返回-2。/空间满:返回值-1;x 已经存在返回-2 ;正确插入:返回表中的插入位置7int incIn

5、sert(seqList if(L.listLen=MAXLEN)return -1; /表空间已满,不能插入新的元素else for(i=0;i=0 i-;L.datai+1=x; /插入 xL.listLen+; /修改表长度return i+2; /成功插入 ,返回 x 在顺序表中的插入位置(元素编号)2.6 设计算法以删除顺序表中重复的元素,并分析算法的时间性能。【解】【分析】三重循环实现。第一层循环,从左往右依次取出 L 元素,用 i 指示;第二层循环,对i 元素在 L 中循环查重,用下标 j 指示;第三重循环,删除重复元素。查重和删除从 j=L.listLen-1 开始,效率稍微好

6、一点,因为这样重复元素本身不需重复移动。如果从 i+1 开始查重、删除,则 j+1 以后的重复元素会被移动。【算法描述】void DeleteRepeatData(seqList if(L.listLen=0)couti; j-) /从后往前删除,效率较高if(L.datai=L.dataj) /元素重复,调用删除listDelete( /调用删除函数,下标差 1,所以+1/以下部分代码是直接删除,没有调用删除函数/int k;/for(k=j; kB.dataib,当前元素为非交集元素,只需移动 ib,即 ib+重复以上过程,直至 A、B 中至少一个表结束。修改 A 表长度为 i+1。【算法描述】void InterSet(seqList /为了最后更新交集元素表长度操作一致,初始化为-1int ia=0, ib=0; /A、B 表当前元素的数组下标while(iaB.dataib,ia 指示的元素可能在 B 表 ib 指示的元素后面,ia 不动,移动ib,即 ib+。(3) A.dataiaB.dataib,ia 指示的元素不可能在 B 中出现,故比为 A-B 中元素。需要

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

当前位置:首页 > 教育教学资料库 > 参考答案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。