求教高手看下这个十字链表的小程序

umagaa 2014-01-27 11:39:17
#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
/*定义结点结构体类型*/
typedef struct node
{
int i,j,val;
struct node *row,*col;
}Node;
/*定义十字链表结构体类型*/
typedef struct matrix
{
int m,n;
Node *rhead[10],*chead[10];
}Matrix;
/*分别在十字链表的行列中查找新元素插入位置*/
Matrix* insert_matrix(Matrix* M,Node* N)
{
Node *p,*q;
/*查找行的插入位置*/
bool done;
done=(M->rhead[N->i]==NULL || N->j<M->rhead[N->i]->j);
if(done)
{
N->row=M->rhead[N->i];
M->rhead[N->i]=N;
}
else
{
p=M->rhead[N->i];
q=p->row;
while(q!=NULL)
{
if(N->j<q->j)
break;
p=q;
q=p->row;
}
p->row=N;
N->row=q;
}
/*查找行的插入位置*/
done=(M->chead[N->j]==NULL && N->i<M->chead[N->j]->i);
if(done)
{
N->col=M->chead[N->j];
M->chead[N->j]=N;
}
else
{
p=M->chead[N->j];
q=p->col;
while(q!=NULL)
{
if(N->i<q->i)
break;
p=q;
q=p->col;
}
p->col=N;
N->col=q;
}
return M;
}

Matrix* creat_matrix()
{
Matrix *M;
Node *N;
int k,v,r,c;
M=(Matrix*)malloc(sizeof(Matrix));
for(k=0;k<10;k++)
M->rhead[10]=NULL;
for(k=0;k<10;k++)
M->chead[10]=NULL;
printf("请输入矩阵的行,列数:");
scanf("%d%d",&M->m,&M->n);
printf("请输入矩阵元素:");
for(k=0;k<M->m*M->n;k++)
{
scanf("%d",&v);
r=k/M->m;
c=k%M->m;
if(v!=0)
{
N=(Node*)malloc(sizeof(Node));
N->i=r;N->j=c;
N->val=v;
N->row=N->col=NULL;
M=insert_matrix(M,N);
}
}
return M;
}

void printf_matrix(Matrix *M)
{
Node *p;
int a,b;
for(a=0;a<M->m;a++)
{
p=M->rhead[a];
for(b=0;b<M->n;b++)
{
if(p!=NULL && p->j==b)
{
printf("%d ",p->val);
p=p->row;
}
else
printf("0 ");
}
printf("\n");
}
}

main ( )
{
Matrix *M;
M=creat_matrix();
printf_matrix(M);
return 0;
}
为什么运行时出现错误呢?

...全文
93 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-01-27
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 十字链表交换任意两个节点C源代码(C指针应用终极挑战)http://download.csdn.net/detail/zhao4zhong1/5532495
buyong 2014-01-27
  • 打赏
  • 举报
回复
1. press "retry" 2. check 'call stack'

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧