当前位置:文档之家› 实验6:稀疏矩阵十字链表的存储

实验6:稀疏矩阵十字链表的存储

{
int rows,cols;
linknode *down,*right;
union vnext
{
int v;
linknode *next;
}node;
};
linknode *CreateMatlind()
{
int i,j,maxlin;
linknode *hm,*cp[100],*p;
printf("\n\t\t请输入稀疏矩阵的行数,列数(用逗号隔开): ");
p->down=p;
p->right=p;
cp[l]=p;
cp[l-1]->node.next=p;
}
cp[maxlin]->node.next=hm;
for (int x=0;x<s;x++)
{
printf("\n\t\t请输入非零元的行号,列号和值(用逗号隔开): ");
scanf("%d,%d,%d",&m,&n,&t);
scanf("%d,%d",&i,&j);
if (i>j)
maxlin=i;
else
maxlin=j;
hm=new linknode;
cp[0]=hm;
for (int l=1;l<=maxlin;l++)
{
p=new linknode;
p->rows=0;
p->cols=0;
p->down=p;
p->right=p;
(3)稀疏矩阵十字链表的数据显示。
(4)稀疏矩阵十字链表的数据查找。
3、实验要求
(1)利用C或c++语言完成算法设计和程序设计。
(2)上机调试通过实验程序。
(3)输入右侧矩阵A,检验程序运行结果。
(4)给出具体的算法分析,包括时间复杂度和空间复杂度。
(5)撰写实验报告(把输入实验数据及运行结果用抓图的形式粘贴到实验报告上)。
{
p=q;
q=p=p->node.next;
if (p==hm)
{
printf("\n\t\t十字链表中无此元素! \n");
k=0;
{
p->right=q->right->right;
q->right=p;
k=0;
}
else if(q->right->cols<n)
{
q=q->right;
k=1;
}
}
k=1;
q=cp[n];
while (k)
{
if ((q->down==cp[n]) || (q->down->rows>m))
{
p->down=q->down;
q->down=p;
k=0;
}
else if (q->down->rows==m)
{
p->down=q->down->down;
q->down=p;
k=0;
}
else if (q->down->rows<m)
{
q=q->down;
k=1;
}
}
}
return hm;
}
void ShowMatlind(linknode *hm)
电子信息学院
实验报告书
课程名:数据结构
题目:稀疏矩阵十字链表的存储
实验类别设计
班级:BX1001
学号:24
姓名:肖望龙
2011年10月23日
1、实验题目
(1)掌握稀疏矩阵十字链表存储的方法。
(2)掌握稀疏矩阵的显示、查找等基本方法。
2、实验内容
(1)创建空的稀疏矩阵的十字链表存储结构。
(2)稀疏矩阵十字链表的数据输入。
cp[l]=p;
cp[l-1]->node.next=p;
}
cp[maxlin]->node.next=hm;
hm=new linknode;
hm->rows=i;
hm->cols=j;
return hm;
}
linknode *InputMatlind(linknode *hm,int s)
{
linknode *cp[100],*p,*q;
while(k)
{
if ((p->node.v)==s)
{
printf("\n\t\t行列值\n");
printf("\n\t\t元素位置:%2d %2d %2d\n",p->rows,p->cols,p->node.v);
k=0;
}
else if (p->right!=q)
p=p->right;
else
{
int m,n;
linknode *p,*q;
m=hm->rows;
n=hm->cols;
q=p=hm->node.next;
p=p->right;
cout<<endl<<endl;
printf("\n\t\t");
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
if((p->rows==i) && (p->cols==j))
{
printf("%8d",p->node.v);
}
else
printf("%8c",'0');
if ((j==n) && (p->right==q))
break;
else if (p->right!=q)
p=p->right;
}
printf("\n\n\t\t");
4、实验步骤与源程序
⑴实验步骤
1、建立一个空的十字链表
2、输入链表信息
3、输入链表元素
4、查找链表元素
5、显示链表元素
⑵源代码
#include<iostream.h>
#include<stdio.h>
#include<iomanip.h>
#include<stdlib.h>
struct linknode
p=q;
q=p=p->node.next;
p=p->right;
}
}
void SearchMatlind(linknode *hm,int s)
{
int m,n,k;
linknode *p,*q;
m=hm->rows;n=hm->cols;
q=p=hm->node.next;
p=p->right;
k=1;
int m,n,t;
int i,j,k,maxlin;
i=hm->rows;
j=hm->cols;
if (i>j)
maxlin=i;
else
maxlin=j;
cp[0]=hm;
for (int l=1;l<=maxlin;l++)
{
p=new ode;
p->rows=0;
p->cols=0;
p=new linknode;
p->rows=m;
p->cols=n;
p->node.v=t;
k=1;
q=cp[m];
while (k)
{
if ((q->right==cp[m]) || (q->right->cols>n))
{
p->right=q->right;
q->right=p;
k=0;
}
else if(q->right->cols==n)
相关主题