资源描述:
《稀疏矩阵十字链表的存储.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、电子信息学院实验报告书课程名:数据结构题目:稀疏矩阵十字链表的存储实验类别:设计班级:BX1001学号:41姓名:赵艳2011年10月24日1、实验题目(1)掌握稀疏矩阵十字链表存储的方法。(2)掌握稀疏矩阵的显示,查找等基本算法。2、实验内容(1)创建空的稀疏矩阵十字链表存储结构。(2)稀疏矩阵十字链表的数据输入。(3)稀疏矩阵十字链表的数据显示。(4)稀疏矩阵十字链表的数据查找。3、实验要求(1)利用C(C++)语言完成算法设计和程序设计。(2)上机调试通过实验程序。(3)输入右侧矩阵A,检验程序运行结果。(4)给出具体的算法分析,包括时间复杂度和空间复杂度等。(5)
2、撰写实验报告。4、实验步骤与源程序⑴实验步骤先定义各个需要的函数组成部分,然后依次构建四个子函数,分别是新建十字链表、显示十字链表、输入链表元素、查找链表元素;然后是通过主函数对各个子函数的调用,来实现题目的目的。整个程序中主要用到指针定位,for循环,还有switch选择语句。其中对指针的运用很难,很难定位指针,而且指针太多,繁杂。⑵源代码#include#include#include#includestructlinknode{introws,cols;linknode*down,*
3、right;unionvnext{intv;linknode*next;}node;};linknode*CreateMatlind();linknode*InputMatlind(linknode,int);voidShowMatlind(linknode);voidSearchMatlind(linknode*hm,ints);linknode*CreateMatlind(){inti,j,maxlin;linknode*hm,*cp[100],*p;printf("tt请输入稀疏矩阵的行数,列数(用逗号隔开):");scanf("%d,%d",&i,&j);
4、if(i>j)maxlin=i;elsemaxlin=j;hm=newlinknode;cp[0]=hm;for(intl=1;l<=maxlin;l++){p=newlinknode;p->rows=0;p->cols=0;p->down=p;p->right=p;cp[l]=p;cp[l-1]->node.next=p;}cp[maxlin]->node.next=hm;hm=newlinknode;hm->rows=i;hm->cols=j;returnhm;}linknode*InputMatlind(linknode*hm,ints){linknode*cp[1
5、00],*p,*q;intm,n,t;inti,j,k,maxlin;i=hm->rows;j=hm->cols;if(i>j)maxlin=i;elsemaxlin=j;cp[0]=hm;for(intl=1;l<=maxlin;l++){p=newlinknode;p->rows=0;p->cols=0;p->down=p;p->right=p;cp[l]=p;cp[l-1]->node.next=p;}cp[maxlin]->node.next=hm;for(intx=0;x
6、);scanf("%d,%d,%d",&m,&n,&t);p=newlinknode;p->rows=m;p->cols=n;p->node.v=t;k=1;q=cp[m];while(k){if((q->right==cp[m])
7、
8、(q->right->cols>n)){p->right=q->right;q->right=p;k=0;}elseif(q->right->cols==n){p->right=q->right->right;q->right=p;k=0;}elseif(q->right->colsright;k=1;}}k=1;q=cp
9、[n];while(k){if((q->down==cp[n])
10、
11、(q->down->rows>m)){p->down=q->down;q->down=p;k=0;}elseif(q->down->rows==m){p->down=q->down->down;q->down=p;k=0;}elseif(q->down->rowsdown;k=1;}}}returnhm;}voidShowMatlind(linknode*hm){intm,n;linknode*p,*q;m=hm->rows;n=hm->co