- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
十字链表
十字链表
#include iostream
using namespace std;
typedef struct OLNode{
int i,j;//非零元的行和列下标
int e;//元素 e;
struct OLNode *right,*down;// 该非0元所在的行表和列表的后继元素
} OLNode ,*OLink;
typedef struct {
OLink *rhead,*chead;//行和列链表头指针向量
int mu,nu,tu;//稀疏矩阵的行数、列数和非零元的个数
}CrossList;
CrossList CreateSMatrix_OX(CrossList M)
{
// if(M)
// free(M);
int m,n,t;
cout输入行数 列数和非零元个数;
cinmnt;//输入M的行数、列数和非零元的个数
M.mu=m;
M.nu=n;
M.tu=t;
if(!(M.rhead=new OLink[m+1]))exit (0);
if(!(M.chead=new OLink[n+1]))exit (0);
for(int k=1;k=m;k++)
M.rhead[k]=NULL;
for( k=1;k=n;k++)
M.chead[k]=NULL;
OLink p,q;
int i,j,e;
cout按任意次序输入非零元\n;
for( k=t,cinije;k0;cinije)
{//按任意次序输入非零元
if(!(p=new OLNode))exit (0);
p-i=i;p-j=j;p-e=e;//生成结点
if((M.rhead[i]==NULL)||(M.rhead[i]-jj))
{
p-right=M.rhead[i];
M.rhead[i]=p;
}
else{
for(q=M.rhead[i];(q-right)q-right-jj;q=q-right);
p-right=q-right;
q-right=p;
}
if(M.chead[j]==NULL||M.chead[j]-ii)
{
p-down=M.chead[j];
M.chead[j]=p;
}
else{
for(q=M.chead[j];(q-down)q-down-ii;q=q-down);
p-down=q-down;
q-down=p;
}
k--;
if(k==0)
break;
}
return M;
}
CrossList Add(CrossList A,CrossList B)
{
OLink d, pa,pb,p,pre=NULL,preha=NULL,prehb=NULL,*hl;
hl=new OLink[A.nu+1];
for(int j=1;j=A.nu;j++)//初始化hl【j】为头指针
hl[j]=A.chead[j];
for(int i=1;i=A.mu;i++)
{ //进行遍历A的每一列
pa=A.rhead[i];//pa指向A中的第一个节点
pb=B.rhead[i];//pb指向b中的第一个节点
pre=NULL;
while(pb)
{ if(!(p=new OLNode))exit (0);
p-i=pb-i;
p-j=pb-j;
p-e=pb-e;
p-right=NULL;
p-down=NULL;
preha=NULL,prehb=NULL;
/* if(pa==NULL||pa-jpb-j)
{
if(pa==NULL)
{
if(pre==NULL)
pa=A.rhead[p-i]=p;
else
pre-right=p;
p-right=pa;
pre=p;
}
else if(pa-jpb-j)
{
}
}
*/
if(pa==NULL||pa-jpb-j)
{
if(pre
文档评论(0)