uu们麻烦看看为什么我的代码编译出来会是这样,为什么在前面的循环打印的时候是没有问题的,但是之后会无法显示呢?
我这个代码是直接把矩阵压缩了
我在前面的循环中利用w遍历rheadi并没有问题
但是后面的循环就不行了
为什么呢
#include<iostream>
using namespace std;
typedef struct Node
{
int row,col;
int item;
Node *right,*down;
}Node;
class CrossList
{public:
CrossList(int m,int n);
~CrossList();
void InitS();
private:
Node *rhead,*chead;//行,列链表数组基地址
int rows,cols,num;
};
CrossList::CrossList(int m,int n)
{
rows=m;cols=n;num=0;
}
CrossList::~CrossList()
{
delete [] rhead;
delete [] chead;
}
void CrossList::InitS()
{
int m=0,n=0,num=0;
int a[rows][cols];
int f1[rows],f2[cols];
f1[0]=0;f2[0]=0;
cout<<"请输入矩阵"<<endl;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
cin>>a[i][j];
if(a[i][j]!=0)
{
f1[i]=1;f2[j]=1;
num++;
}
}
}
for(int i=0;i<rows;i++)
{
if(f1[i]!=0)
{m++;f1[i]=0;}
}
for(int i=0;i<cols;i++)
{
if(f2[i]!=0)
{n++;f2[i]=0;}
}
rhead=new Node[m];
chead=new Node[n];
int k=0;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(a[i][j]!=0)
{
Node t[num],*p,*q;
t[k].row=i;t[k].col=j;
t[k].item=a[i][j];
t[k].right=NULL;
t[k].down=NULL;
p=rhead+i;
q=chead+j;
if(f1[i]==0)
{*p=t[k];f1[i]=1;}
else
{
while(p->right!=NULL)
p=p->right;
p->right=t+k;
p=p->right;
//Node *w=rhead+i;
//while(w!=NULL)
//{cout<<w->row<<" "<<w->col<<" "<<w->item<<endl;w=w->right;}
}
if(f2[j]==0)
{*q=t[k];f2[j]=1;}
else
{
while(q->down!=NULL)
q=q->down;
q->down=t+k;
}
k++;
}
}
}
for(int i=0;i<num;i++)
{
Node *w=rhead+i;
for(int j=0;j<cols&&w!=NULL;j++)
{
cout<<w->row<<" "<<w->col<<" "<<w->item<<endl;
w=w->right;
}
}
cout<<"压缩结果如上"<<endl;
}
int main()
{
int m,n;
cout<<"请输入创建矩阵行数:";
cin>>m;
cout<<"请输入创建矩阵列数:";
cin>>n;
CrossList c1(m,n);
int i,j;
c1.InitS();
return 0;
}