实验6-稀疏矩阵十字链表的存储.doc
-/电子信息学院实验报告书课程名 数据结构 题 目 稀疏矩阵十字链表的存储 实验类别 设计 班 级 BX1001 学 号 24 姓 名 肖望龙 10 月 23日-/1、 实验题目(1 掌握稀疏矩阵十字链表存储的方法。(2 掌握稀疏矩阵的显示、查找等基本方法。2、 实验内容(1) 创建空的稀疏矩阵的十字链表存储结构。(2) 稀疏矩阵十字链表的数据输入。(3) 稀疏矩阵十字链表的数据显示。(4) 稀疏矩阵十字链表的数据查找。3、 实验要求(1) 利用C或c语言完成算法设计和程序设计。(2) 上机调试通过实验程序。(3) 输入右侧矩阵A,检验程序运行结果。(4) 给出具体的算法分析,包括时间复杂度和空间复杂度。(5) 撰写实验报告(把输入实验数据及运行结果用抓图的形式粘贴到实验报告上)。4、 实验步骤与源程序 实验步骤1、 建立一个空的十字链表2、 输入链表信息3、 输入链表元素4、 查找链表元素5、 显示链表元素 源代码includeiostream.hincludestdio.hincludeiomanip.hincludestdlib.hstruct linknodeint rows,cols;linknode *down,*right;union vnextint v;linknode *next;node;;linknode *CreateMatlind int i,j,maxlin;linknode *hm,*cp100,*p;printfntt请输入稀疏矩阵的行数,列数用逗号隔开 ;scanfd,d,if ij maxlini;else maxlinj;hmnew linknode;cp0hm; for int l1;lmaxlin;lpnew linknode;p-rows0;p-cols0;p-downp;p-rightp;cplp;cpl-1-node.nextp;cpmaxlin-node.nexthm;hmnew linknode;hm-rowsi;hm-colsj;return hm; linknode *Matlindlinknode *hm,int s linknode *cp100,*p,*q;int m,n,t;int i,j,k,maxlin;ihm-rows;jhm-cols;if ij maxlini;else maxlinj;cp0hm;for int l1;lmaxlin;lpnew linknode;p-rows0;p-cols0;p-downp;p-rightp;cplp;cpl-1-node.nextp;cpmaxlin-node.nexthm;for int x0;xs;xprintfntt请输入非零元的行号,列号和值用逗号隔开 ;scanfd,d,d,pnew linknode;p-rowsm;p-colsn;p-node.vt;k1;qcpm;while kif q-rightcpm || q-right-colsnp-rightq-right;q-rightp;k0;else ifq-right-colsnp-rightq-right-right;q-rightp;k0;else ifq-right-colsnqq-right;k1;k1;qcpn;while kif q-downcpn || q-down-rowsmp-downq-down;q-downp;k0;else if q-down-rowsmp-downq-down-down;q-downp;k0;else if q-down-rowsmqq-down;k1;return hm;void ShowMatlindlinknode *hm int m,n;linknode *p,*q;mhm-rows;nhm-cols;qphm-node.next;pp-right;coutendlendl;printfntt;for int i1;im;ifor int j1;jn;jif p-rowsi else printf8c,0;if jn else if p-rightqpp-right;printfnntt;pq;qpp-node.next;pp-right;void SearchMatlindlinknode *hm,int s int m,n,k;linknode *p,*q;mhm-rows;nhm-cols;qphm-node.next;pp-right;k1;whilekif p-node.vsprintfntt 行 列 值n;printfntt元素位置2d 2d 2dn,p-rows,p-cols,p-node.v;k0;else if p-rightqpp-right;else pq;qpp-node.next;if phmprintfntt十字链表中无此元素 n;k0;pp-right;void mainint s,k,ch1;linknode *hmNULL;printftn新建十字链表; hmCreateMatlind; do printfntt请输入非零元素个数 ;scanfd,if shm-rows*hm-colsprintfntt元素个数超标 应小于d个n,hm-rows*hm-cols;k1;elsek0;while k;hmMatlindhm,s; printfn显示十字链表;if hmNULLprintfntt链表为空 n;elseShowMatlindhm;printfn查 找 元 素;if hmNULLprintfntt链表为空 n;elseprintfntt请输入您要查找的元素 ;scanfd,SearchMatlindhm,s; 5、 测试数据与实验结果(可以抓图粘贴)6、 结果分析与实验体会实验结果基本达到了实验要求。用十字链表存储稀疏矩阵的基本思想是把每个非零元素作为一个节点存储,节点中除了表示元素的行、列、值的三元组(I,j,v)以外还增加了俩个指针域列指针域down用来指向本列的下一个非零元素;行指针域指向本行的下一个非零元素知道了这些,实验就方便了,虽然还有很多不完善。但多做练习才能更加熟练的使用稀疏矩阵。