关于网友提出的“ 我的十字链表怎么了?”问题疑问,本网通过在网上对“ 我的十字链表怎么了?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 我的十字链表怎么了?
描述: #include
#include
#define TRUE 1
#define FALSE 0
#define OLElemType int
typedef struct OLNode
{
int row; int col;
OLElemType value;
struct OLNode *down,*right;
}OLNode,*OLink;
typedef struct
{
OLink *row_head,*col_head; //行,列链表的 头指针 向量
int m,n,len; //稀疏矩阵的行数 m,列数 n,非零元素的个数 len
}CrossList;
void CreateCrossList(CrossList *M) //采用十字链表存储结构,创建稀疏矩阵 M
{
OLink p,q; // p,q为指示指针
int m,n,t;
int k,i,j,e;
printf("请输入稀疏矩阵的行数,列数 及非零元素个数:\n");
scanf("%d%d%d",&m,&n,&t); //输入 M 的行数,列数,及非零元素的个数
M->m=m;M->n=n;M->len=t;
if(!(M->row_head=( OLink *)malloc((m+1)*sizeof(OLink)))) exit(0); //row_head 和 col_head 相当于是堆指针,所以要(m+1)
if(!(M->col_head=( OLink *)malloc((n+1)*sizeof(OLink)))) exit(0);
M->row_head=M->col_head=NULL; //初始化行,列头指针的向量,各行,列链表为空的链表
printf("请输入%d行%d列,及相应的%d个非零元素:\n",M->m,M->n,M->len);
for(k=1;k<=M->len;k++)
{
scanf("%d%d%d",&i,&j,&e);
if(!(p=(OLNode *)malloc(sizeof(OLNode)))) exit(0);
p->row=i; p->col=j; p->value=e;
/*对行进行操作*/
if(M->row_head[i]==NULL||M->row_head[i]->col>j) { p->right=M->row_head[i]; }
else
{
for(q=M->row_head[i];q->right&&q->right->colright); //寻找 行 表中的插入位置
p->right=q->right; q->right=p; //完成插入
}
/*对列进行操作*/
if(M->col_head[j]==NULL||M->col_head[j]->row>i){ p->down=M->col_head[j]; M->col_head[j]=p; }
else
{
for(q=M->col_head[j];q->down&&q->down->rowdown);
p->down=q->down; q->down=p;
}
}
}
int main()
{
CrossList M;
CreateCrossList(&M);
}
为什么的十字链表创建总是出错呀?(看了很久的代码不知道什么原因)
以上介绍了“ 我的十字链表怎么了?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2875643.html