- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
练习题2
习题2.2、23、24、2.5和2.6。
2.2设计一个算法,将x插入到一个有序(从小到大排序)的
线性表(顺序存储结构)的适当位置上,并保持线性表的有
序性
void Insert(sqList*L, ElemType x)
i int i=0,j;
while (iL-length Ldataix)i++
for (=Llength-l: j=i:j--)
LdataLj+1=L-datal;
L-datad=x
L-length++
23设计一个算法,将一个带头结点的数据域依次为a1,a2,…,
an(n3)的单链表的所有结点逆置,即第一个结点的数据域
变为an,…,最后一个结点的数据域为a1
void Reverse(LinkListL)
i LinkListp=L-next, q
L-nextENULL
while (p=NULL)
∥扫描所有的结点
q=p-next;
∥让q指向中p结点的下一个结点
p-next=L-next
∥总是将中结点作为第一个数据结点
p=gE
∥p指向下一个结点
24设有一个双链表,每个结点中除有pror、data和nxt三个
域外,还有一个访问频度域freq,在链表被起用之前,其值
均初始化为零。每当进行 Locatenode(h,x)运算时,令元素
值为x的结点中freq域的值加1,并调整表中结点的次序,使
其按访问频度的递减序排列,以便使频繁访问的结点总是靠
近表头。试写一符合上述要求的 Locatenode运算的算法。
bool LocateNode(DLinklist h, Elem Type x)
I DLinkList p=h-next, q:
while(p=NULL p-data!=x)
p=p-next;
∥找data域值为x的节点中p
if (p==NULL)
∥.找到的情况
return false:
∥找到的情况
I p-freq+
∥烦度增1
g=p-prior,
∥~q为p前驱节点
while(ql=h q-freqp-freq)
(p- prior=q prior;p- priornext=p;∥/交换ψp和咚q的位置
g-next=p-next:
if(q-next!NULL)∥p不为最后一个节点时
q-next-prior=q:
p-next=q: q-prior=p;
q=p-prior:
重指向中p的前趋节点
return true
25设ha=(a1a2…,;an)和hb=(b1,b2,…,bm)是两个带头结点的
循环单链表,编写将这两个表合并为带头结点的循环单链表
hc的算法。
void Merge (* ha, LinkList*hb, LinkList*hc)
I LinkListp=ha-next;
hc=h
while(p-next!ha)∥找到ha的最后一个节点中p
p=p-next
pnext=hb-next;∥将ha的最后一个节点的nex指向b的第一个数据节点
while(p-next!hb)p=pnext;/找到hb的最后一个节点p
p-next=hc
∥构成循环单链表
free(hb)
∥释放hb单链表的头节点
26设非空线性表ha和hb都用带头节点的循环双链表表示。设
计一个算法 Insert(ha,hb,i)。其功能是:i=0时,将线性表hb插
入到线性表ha的最前面;当0时,将线性表hb插入到线性表
ha中第i个节点的后面;当i大于等于线性表ha的长度时,将线
性表hb插入到线性表ha的最后面。
void Insert(DLinkList* ha, DLinkList*hb, int i)
DLinklistp=ha-next, q:
int lena=l j=0;
while(p-next!-ha)∥求出ha的长度lea
lena++;
p=p-next
if(i=0)∥将hb的所有数据结点插入到ha的头结点和第1个数据结点之间
p=hb-prior
指向hb的最后一个结点/
p-next=ha-next;
∥将中p链到ha的第1个数据结点前面
ha-next-prior=p;
ha-next=hb-next
hb-next-prior=ha;
∥将ha头结点与hb的第1个数据结点链起来
else if (ilena)
∥将hb插入到ha中间
p=ha-next
while gii)
∥在ha中查找第i个结点p
p=p-next;
q=p-next
/指向中结点的后继结点/
p-next=hb-next;
/hb- prior指向hb的最后一个结点
hb-next-prior=p;
hb-prior-nextq;
q-prior=hb-prior;
else
∥将hb链到ha之后
ha-
您可能关注的文档
- 数学与的思维发展关系.ppt
- 数字词中英比与翻译.ppt
- 数学 极限 信化大赛获奖作品.ppt
- 数学函单调性.ppt
- 数学之的美和神奇.ppt
- 数字资产管理概述精选.ppt
- 数字逻辑电路基础汇编.ppt
- 数学与生活生活中趣味数学学PPT模板.ppt
- 数学和的绘画音乐.ppt
- 数学史选讲中国古代学瑰宝.ppt
- 重庆新速达物业服务集团股份凯里公司招聘笔试题库2024.pdf
- 浙江杭州千岛湖泰众肉类食品有限公司招聘笔试题库2024.pdf
- 陕西新华出版传媒集团新华书店分公司招聘笔试题库2024.pdf
- 宁夏海原县肉牛产业发展集团有限公司招聘笔试题库2024.pdf
- 浙江温岭市化工轻工建筑材料有限公司招聘笔试题库2024.pdf
- 中航飞机汉中航空零组件制造有限公司招聘笔试题库2024.pdf
- 山东海阳市海昇矿产资源开发有限公司招聘笔试题库2024.pdf
- 山东潍坊寿光市公共交通运输有限公司招聘笔试题库2024.pdf
- 内蒙古察右前旗农业投资开发有限公司招聘笔试题库2024.pdf
- 线上清明祭英烈活动策划.pptx
文档评论(0)