📄 十字链表.cpp
字号:
#include "iostream.h"
typedef int ElemType;
typedef struct Lnode
{ int i,j;
ElemType e;
struct Lnode *right,*down;
}MLnode;
typedef struct {
MLnode **rhead,**chead;
int m,n,t;
}CrossList;
void createM(CrossList &M)
{int i,j,e,k,l=1;
MLnode *p,*q;
// if(M) delete M;
cout<<"请输入矩阵的行数、列数和非零元素个数:";
cin>>M.m>>M.n>>M.t;
M.rhead=(MLnode **) new MLnode[M.m+1];
for(k=0;k<=M.m;k++)
M.rhead[k]=0;
M.chead=(MLnode **) new MLnode[M.n+1];
for(k=0;k<=M.n;k++)
M.chead[k]=0;
cout<<"请输入行、列、非零元素值"<<endl;
while(l<=M.t)
{ cin>>i>>j>>e;l++;
p=new MLnode;
p->i=i;p->j=j;p->e=e;p->down=0;
if(M.rhead[i]==0||M.rhead[i]->j>j) {p->right=M.rhead[i];M.rhead[i]->right=p;}
else
{for(q=M.rhead[i];(q->right) && q->right->j<j;q=q->right);
p->right=q->right;q->right=p;}
if(M.chead[j]==0||M.chead[j]->i>i) {p->down=M.chead[j];M.chead[j]->down =p;}
else
{for(q=M.chead[j];(q->down) && q->down->i<i;q=q->down);
p->down=q->down;q->down=p;}
}
}
void rprint(CrossList m)
{
MLnode *p;
cout<<"行 列 值"<<endl;
for(int k=0;k<m.m;k++)
{p=m.rhead[k];
while(p!=0)
{cout<<p->i <<" "<<p->j <<" "<<p->e <<endl;p=p->right ;}
}
}
void cprint(CrossList m)
{
MLnode *p;
cout<<"行 列 值"<<endl;
for(int k=0;k<m.n;k++)
{p=m.chead[k];
while(p!=0)
{cout<<p->i <<" "<<p->j <<" "<<p->e <<endl;p=p->down ;}
}
}
void main()
{CrossList m;
createM(m);
cout<<endl;
rprint(m);
cout<<endl;
cprint(m);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -