自主实验6系数矩阵十字链表的存储Word文件下载.docx
《自主实验6系数矩阵十字链表的存储Word文件下载.docx》由会员分享,可在线阅读,更多相关《自主实验6系数矩阵十字链表的存储Word文件下载.docx(12页珍藏版)》请在冰点文库上搜索。
(3)输入右侧矩阵A,检验程序运行结果。
(4)给出具体的算法分析,包括时间复杂度和空间复杂度等。
(5)撰写实验报告。
A=
4、
实验步骤与源程序
(1)实验步骤
1、建立结构体。
2、编写调用函数。
3、运行程序,并且抓图粘图。
4、撰写实验报告。
(2)源程序
#include<
iostream.h>
stdio.h>
iomanip.h>
stdlib.h>
structlinknode
{
introws,cols;
linknode*down,*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("
\n\t\t请输入稀疏矩阵的行数,列数(用逗号隔开):
"
);
scanf("
%d,%d"
&
i,&
j);
if(i>
j)
maxlin=i;
else
maxlin=j;
hm=newlinknode;
cp[0]=hm;
for(intl=1;
l<
=maxlin;
l++)
p=newlinknode;
p->
rows=0;
cols=0;
down=p;
right=p;
cp[l]=p;
cp[l-1]->
node.next=p;
}
cp[maxlin]->
node.next=hm;
hm->
rows=i;
cols=j;
returnhm;
}
linknode*InputMatlind(linknode*hm,ints)//输入非零元素
linknode*cp[100],*p,*q;
intm,n,t;
inti,j,k,maxlin;
i=hm->
rows;
j=hm->
cols;
for(intx=0;
x<
s;
x++)
printf("
\n\t\t请输入非零元的行号,列号和值(用逗号隔开):
scanf("
%d,%d,%d"
m,&
n,&
t);
rows=m;
cols=n;
node.v=t;
k=1;
q=cp[m];
while(k)
{
if((q->
right==cp[m])||(q->
right->
cols>
n))
{
p->
right=q->
right;
q->
k=0;
}
elseif(q->
cols==n)
cols<
n)
q=q->
k=1;
}
q=cp[n];
down==cp[n])||(q->
down->
rows>
m))
down=q->
down;
elseif(q->
rows==m)
rows<
m)
}
voidShowMatlind(linknode*hm)//显示十字链表
intm,n;
linknode*p,*q;
m=hm->
n=hm->
q=p=hm->
node.next;
p=p->
cout<
<
endl<
endl;
\n\t\t"
for(inti=1;
i<
=m;
i++)
for(intj=1;
j<
=n;
j++)
if((p->
rows==i)&
&
(p->
cols==j))
printf("
%8d"
p->
node.v);
else
%8c"
'
0'
if((j==n)&
right==q))
break;
elseif(p->
right!
=q)
p=p->
\n\n\t\t"
p=q;
q=p=p->
p=p->
voidSearchMatlind(linknode*hm,ints)//查找元素
{
intm,n,k;
n=hm->
k=1;
while(k)
if((p->
node.v)==s)
printf("
\n\t\t行列值\n"
\n\t\t元素位置:
%2d%2d%2d\n"
rows,p->
cols,p->
k=0;
elseif(p->
p=p->
else
p=q;
q=p=p->
if(p==hm)
\n\t\t十字链表中无此元素!
\n"
voidmain()
ints,k,ch=1;
intchoice;
linknode*hm=NULL;
while(ch)
\n"
\n\t\t稀疏矩阵的十字链表存储系统\n"
\n\t\t********************************************"
\n\t\t*1-----新建十字链表*"
\n\t\t*2-----显示十字链表*"
\n\t\t*3-----查找元素*"
\n\t\t*0-----退出*"
\n\n\t\t请输入菜单号:
%d"
choice);
switch(choice)
case1:
hm=CreateMatlind();
//调用创建空十字链表函数
do
\n\t\t请输入稀疏矩阵的元素个数:
scanf("
s);
if(s>
((hm->
rows)*(hm->
cols)))
{
printf("
\n\t\t元素个数超标!
应小于%d个\n"
hm->
rows*hm->
cols);
k=1;
}
else
k=0;
}while(k);
hm=InputMatlind(hm,s);
//调用输入非零元素函数
break;
case2:
if(hm==NULL)
\n\t\t链表为空!
else
ShowMatlind(hm);
case3:
\n\t\t请输入您要查找的元素:
SearchMatlind(hm,s);
//调用查找非零元素函数
case0:
ch=0;
if(choice==1||choice==2||choice==3)
system("
pause"
cls"
4、测试数据与实验结果(可以抓图粘贴)
5、结果分析与实验体会