张翠43两个链表合并.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》 课程设计报告 题 目: 两个链表合并 班 级: 11计管 姓 名: 张翠芬 指导教师: 肖丽娜 2012 年 12 月 18 日 摘要 链表是一种重要的数据结构,在程序设计中占有很重要的地位。 链表是一种常见的重要的数据结构。它是动态的进行存储分配的一种结构。我们知道,用数组存放数据时,必须事先定义固定的长度。如果事先难以确定数组中元素的个数,则必须把数组定义的足够大,以便能存放足够的数据。链表则没有这种缺点,他根据需要开辟内存单元。 链表有一个“头指针”变量,他存放一个地址,该地址指向一个元素。通常我们把链表画成用箭头相链接的结点的序列,结点之间的箭头表示链域中的指针。在使用链表时关心的只是他所表示的线性表中数据元素之间的逻辑顺序,而不是每个数据元素在存储器中的实际位置,由此可见,单链表可由头指针唯一确定 两个链表的合并 1.课程设计目的 实现对两个的链表的交叉合并,输出线形表C用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。掌握对线性表的链式表示和实现,实现插入的操作。了解链表交叉合并的方法和直接插入排序法的思想,并深刻掌握算法的格式和应用。提高对数据结构的理解和应用,增强个人动手实践能力和逻辑分析能力。 2.设计方案论证 2.1设计思路 本课程设计将对链表的交叉合并和直接插入排序的实现。首先将两个链表进行交叉合并,合并的要求如下: 建立两个链表A和B,链表元素个数分别为m和n个。假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线形表C,使得: 当m=n时,C=x1,y1,x2,y2,…xn,yn,…,xm 当nm时,C=y1,x1,y2,x2,…ym,xm,…,yn 输出线形表C。 对合并的链表C进行直接插入排序,输出链表D。 此次课程设计实验的数据位 ① A表(30,41,15,12,56,80) B表(23,56,78,23,12,33,79,90,55) ② A表(30,41,15,12,56,80,23,12,34) B表(23,56,78,23,12) 2.1.1链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。通常我们把链表画成用箭头相连接的结点的序列,节点之间的箭头表示指针。在c语言中,链表用结构指针来描述。 相比于线性表顺序结构,链表比较方便插入和删除操作。 (1)线性表的单链表存储结构 Void Mergelist_L(Linklist La,Linklist Lb,Linklist Lc){ //已知单线性链表La和Lb的元素按值非递减排列。 //归并La和Lb得到新的线性表Lc,Lc的数据元素也按非递减排列。 InitList(Lc); i=j=1;k=0; La_len=Listlength(La);Lb_len=ListLength(Lb); While((i=La_len)(j=Lb_len)){//La和Lb均非空 Getelem(La, i, ai);Getelem(Lb, j, bj); If(ai=bj){Listinsert(Lc, ++k ai);++i;} Else {Listinsert(Lc, ++k bj);++j;} } While(i=La_len){ Getelem(La, i++, ai);Listinsert(Lc, ++k, ai); } While(j=Lb_len){ Getelem(Lb, j++, bj);Listinsert(Lc, ++k, bj); }}//Mergelist (3)把元素插入到链表当中 在链表的合并中常用的操作是插入,要在线性表的两个元素之间出入一个新的元素x。为了插入元素x,首先要生成一个数据域为x的结点,然后插入数据元素x。根据插入操作的逻辑定义,还要修改结点a中的指针域,令其指向结点x,而结点x中的指针域应指向结点b,从而实现3个元素a,b和x之间的逻辑变化。上述指针修改语句描述为, s—next=p—next;p—next=s; 单链表中插入结点时的指针变化情况如图所示: p 图1 单链表中插入结点时的指针变化情 插入元素的代码如下: status ListInsert_L(LinkList L, int i,ElemType e){

文档评论(0)

wx171113 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档