欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    课程设计报告 十字链表文档格式.docx

    • 资源ID:21667241       资源大小:114.34KB        全文页数:17页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计报告 十字链表文档格式.docx

    1、若定义变量:Crosslist *C;则一个十字链表由一个C指针唯一确定。为实现上述功能:建立两个十字链表存储两个稀疏矩阵。判断该两个稀疏矩阵是否满足相加条件。若满足,将两稀疏矩阵相加并输出相加后的结果;否则进入选择菜单,重新输入矩阵或者退出程序。若选择重新输入矩阵,则继续执行上面的。程序流程框图如图4所示。3、详细设计和编码本程序主要实现两稀疏矩阵的相加,因此首先依次创建两个空十字链表,将输入的两稀疏矩阵的非0元素依次插入相应的空十字链表。在利用十字链表存储稀疏矩阵时,由用户输入的稀疏矩阵的行(m)、列数(n)来确定十字链表的行与列表头指针数组的大小(Lnode *rheadm,*chead

    2、n)。当用户输入一个稀疏矩阵后,由元素的输入顺序序号来求出该元素在矩阵中所在的行号和列号,并将非0元素插入十字链表中(在此用指针C确定一个十字链表,方便后面说明):for(k=0;km*C-n;k+) scanf(%d,&d); a=k/C-m; /求行号 b=k%C- /求列号 if(d!=0) /将非0元素插入十字链表中将非0元素的所有信息生成相应的结点L(结点结构如图3所示),并根据其行号和列号将该结点插入相应的行链表和列链表中。将该结点插入相应的行链表中时,首先查找到插入位置:如果相应的行链表为空,或者当前结点的列号比该行链表中第一个结点的列号小,则将该结点作为首元素结点插入到该行链表

    3、中:bool done;done= (C-rheadL-i=NULL|L-jj);if(done)L-rptr=C-i;i=L; 否则,查找该行链表中的各结点的列号,将该结点按列号的顺序插入到该行链表中。elsep=C-q=p-rptr;while(q!=NULL) if(L-q-j) break; p=q; q=p- p-rptr=L;rptr=q;将该结点插入相应的列链表中时,方法同上:如果相应的列链表为空,或者当前结点的行号比该列链表中第一个结点的行号小,则将该结点作为首元素结点插入到该列链表中;否则,查找该列链表中的各结点的行号,将该结点按行号的顺序插入到该列链表中。两稀疏矩阵相加时,

    4、首先根据表示两稀疏矩阵的十字链表(用指针A和B表示)中的行号和列号信息来判断该两稀疏矩阵是否满足相加条件,若满足,进行相加运算;否则,进入选择菜单:重新输入矩阵和退出。满足相加条件时(即两稀疏矩阵同行同列),逐个比较两个稀疏矩阵对应行a的行链表A- rheada与B- rheada上的每个结点*pl和*ql:由于两矩阵同行,且行链表有多个,因此用一个for循环来控制两指针指向属于同行的行链表并实现逐行比较相加。for(a=0;arheada; ql=B- 初始化指针pl和ql后,逐个比较行链表A-rheada与B-rheada上的每一个结点,直到两行链表中的所有非0元素结点均比较完毕:当A-r

    5、heada都为空时,若本行不是最后一行,则继续比较下一行。当A-rheada都不为空时,比较结点*p1与结点*ql的列号:若结点*p1的列号等于结点*ql的列号,则将结点*p1的值与结点*ql的值相加,如果相加的结果不等于0,则将结果信息生成的结点插入到一个新十字链表C中,方法同存储稀疏矩阵时向十字链表中插入非0元素结点,并修改指针pl和ql,将其指向下一个结点。如果相加的结果等于0,只需将指针pl和ql指向本身结点指向的下一个结点。 pl=pl- ql=ql- 若结点*p1的列号小于结点*ql的列号,则直接将结点*p1插入到十字链表C中(方法同上),并修改指针p1,将其指向下一个结点。若结点

    6、*p1的列号大于结点*ql的列号,则直接将结点*ql插入到十字链表C中(方法同上),并修改指针ql,将其指向下一个结点。当A-rheada其中一个为空时,若结点*p1为空,则将结点*ql及其后面连接的所有结点插入十字链表C中。若结点*ql为空,则将结点*p1及其后面连接的所有结点插入十字链表C中。4、上机调试1、错误分析及改正:在本程序中将两矩阵进行逐行相加时,如输入的两个矩阵中有属于同一行的元素为2 3 1 2和4 0 0 0,运行程序后得到的相加结果为6 0 0 0,而正确的结果应该为6 3 1 2。程序中将上面两行元素进行相加时,首先分别从值为2的结点和值为4的结点的列号开始进行比较,由

    7、于这两个结点同行同列,所以将相加的结果插入一个十字链表中,然后它们下一个结点的列号。但由上可知,值为4的结点没有下一个结点,而原来程序中没有对这种情况的处理,直接比较下一行,因此导致相加结果为6 0 0 0。出现上述情况后,对原来程序进行改进,增加处理此种特殊情况,增加代码如下:while(pl!=NULL) /A矩阵中该行链表中的结点未比较完 x=pl; pl=pl- C=Insertlist(x,C); while(ql!=NULL) /B矩阵中该行链表中的结点未比较完 x=ql; ql=ql-2、时间、空间性能分析(以下出现的m表示一个矩阵的行数,n表示一个矩阵的列数):本程序需要三个十

    8、字链表来存储进行相加的两稀疏矩阵和相加后的结果矩阵,每个十字链表都有行、列表头指针数组,所以最好情况下需要3*(m+n)个表头指针结点,最坏情况下需要3*(m+n)个表头指针结点和3*(m*n)链表结点。在成功申请十字链表内存空间后,都先需要对其行、列表头指针结点进行初始化,因此初始化的时间性能为O(m+n)。将稀疏矩阵存入十字链表中和将两矩阵进行相加过程都是对每个元素进行判断插入,所以最好情况下,两稀疏矩阵的元素都为0,此时只需判断,不需要进行插入操作。最坏情况下,两稀疏矩阵的元素都不为0,此时时间性能为O(m*n)。5、测试结果及其分析六、用户使用说明 用户运行本程序后,界面会出现提示性的

    9、语句,如“请输入矩阵A的行数、列数:”、“请输入矩阵”等,输入矩阵时按矩阵的书面形式输入即可。7、参考文献 1 王昆仑,李红. 数据结构与算法. 北京:中国铁道出版社,2006年5月。八、附录#includestdlib.h#define M 10 /行#define N 10 /列#define zero 0typedef struct node /行号、列号、数值typedef structCrosslist *Insertlist(Lnode *L,Crosslist *C) /将结点L插入十字链表C中 Lnode *p,*q; bool done; done=(C-/如果该行链表为空,

    10、或者当前结点的列号比该行链表中第一个结点的列号小,则将该 /结点作为首元素结点插入到该行链表中 if(done) L- C- /否则,查找该行链表中的各结点的列号,按将该结点按列号的顺序插入到该行链表中 else p=C- q=p- while(q! p-cheadL-j=NULL|L-ii);/如果该列链表为空,或者当前结点的行号比该行链表中第一个结点的行号小,则将该 /结点作为首元素结点插入到该列链表中 if(done) cptr=C-j; C-j=L; /否则,查找该列链表中的各结点的行号,按将该结点按行号的顺序插入到该列链表中cptr;i)cptr=L;cptr=q; return C

    11、;Crosslist *Setcrosslist( ) /创建十字链表 Crosslist *C; Lnode *L; int k,a,b,d; C=(Crosslist *)malloc(sizeof(Crosslist); for(k=0;M;k+)rheadk=NULL;N;cheadk=NULL; printf(行数、列数:n); scanf(%d%dm,&n);请输入矩阵: if(d!=0) /将非0元素插入十字链表中 L=(Lnode *)malloc(sizeof(Lnode); L-i=a;j=b;data=d;rptr=L-cptr=NULL; C=Insertlist(L,

    12、C);void Crosslistout(Crosslist *C) /十字链表输出 int a,b; Lnode *p; for(a=0; for(b=0;bdata); p=p- else /否则输出0 printf(,zero); printf(Crosslist *Matrixplus(Crosslist *A,Crosslist *B) /两个矩阵相加 int result,a; Lnode *pl,*ql,*L;a+)rheada=NULL;cheada=NULL;m=A-n=A- while(pl!ql! if(pl-j=ql-j) /同行同列 result=pl-data+ql

    13、-data; if(result!=0) /相加后结果不为0 L=(Lnode *)malloc(sizeof(Lnode); L-i=pl-i;j=pl-j;data=result; C=Insertlist(L,C); pl=pl- ql=ql- else /相加后结果为0 else if(pl-ql-j) /结点pl的列号小于结点ql的列号 L=(Lnode *)malloc(sizeof(Lnode); L-data=pl- C=Insertlist(L,C); pl=pl- else /结点pl的列号大于于结点ql的列号i=ql-j=ql-data=ql- ql=ql-=NULL)

    14、/该行链表中A矩阵的结点未比较完=NULL) /该行链表中B矩阵的结点未比较完int Plus_condition(Crosslist *A,Crosslist *B) /两矩阵相加条件判断 if(A-m=B-m&A-n=B-n) /同行同列 return 1; else if(A-m!=B-n) /同列不同行 return 2;n!n) /同行不同列 return 3;n) /不同行也不同列 return 4;int menu( ) /选择菜单 int select;n n 重新输入矩阵 0 n 退出 1 nn请选择:select); while(select1)输入错误,请重新选择: re

    15、turn select;void deal_mistake(Crosslist *A,Crosslist *B,Crosslist *C) /处理出现错误运算条件的情况 switch(menu() case 0:free(A); free(B); int condition;请输入矩阵A的 A=Setcrosslist();请输入矩阵B的 B=Setcrosslist(); condition=Plus_condition(A,B); /判断是否满足相加条件 if(condition=1) C=Matrixplus(A,B);矩阵A、B相加后: Crosslistout(C); /输出相加后的

    16、结果 else if(condition=2)矩阵A与矩阵B的行数不同,不满足矩阵相加条件! deal_mistake(A,B,C); /调用处理错误条件函数 else if(condition=3)矩阵A与矩阵B的列数不同,不满足矩阵相加条件! deal_mistake(A,B,C); else if(condition=4)矩阵A与矩阵B的行数、列数都不相同,不满足矩阵相加条件! break; case 1:exit(0);void main() Crosslist *A,*B,*C; int condition; C=Matrixplus(A,B); else if(condition=4)


    注意事项

    本文(课程设计报告 十字链表文档格式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开