| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 431 人关注过本帖
标题:大家帮忙看看这个十字链表算法问题出在哪里?
只看楼主 加入收藏
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:3 
大家帮忙看看这个十字链表算法问题出在哪里?
#include <stdio.h>
#include <stdlib.h>
typedef struct OLNode
{
    int i,j;
    int e;
    struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct
{
    OLink *rhead,*chead;
    int mu,nu,tu;
}CrossList;
void CreatSMatrix_OL(CrossList *M)
{
    int i,j,e;
    int m,n,t;
    OLink p,q;
    printf("请输入M的行数、列数和非零元的个数:\n");
    scanf("%d%d%d",&m,&n,&t);
    M->mu=m,M->nu=n,M->tu=t;
    if(!(M->rhead=(OLink *)malloc((m+1)*sizeof(OLink))))
        exit(0);
    if(!(M->chead=(OLink *)malloc((n+1)*sizeof(OLink))))
        exit(0);
    for(i=1;i<=m;i++)
        M->rhead[i]=NULL;//
    for(j=1;j<=n;j++)
        M->chead[j]=NULL;
    printf("请按任意次序录入非零元的三元组数据,格式(行数 列数 非零元):\n");
    while(t>0)
    {
        scanf("%d%d%d",&i,&j,&e);
            if(!(p=(OLNode *)malloc(sizeof(OLNode))))
                exit(0);
            p->i=i;p->j=j;p->e=e;
            if(M->rhead[i]==NULL||M->rhead[i]->j>j)
            {
                p->right=M->rhead[i];
                M->rhead[i]=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]==NULL||M->chead[j]->i>i)
            {
                p->down=M->chead[j];
                M->chead[j]=p;
            }
            else
            {
                for(q=M->chead[i];(q->down)&&(q->down->i<i);q=q->down)
                    p->down=q->down;q->down=p;
            }
            t--;
    }
}
void main()
{
    CrossList *M=(CrossList *)malloc(sizeof(CrossList));
    CreatSMatrix_OL(M);

}
图片附件: 游客没有浏览图片的权限,请 登录注册

比如说像上面那样输入数据就有问题?
搜索更多相关主题的帖子: 字链 算法 
2010-04-14 18:37
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:40 
我怎么没发现你定义的类?这种问题要用类做,不然写出的程序会不规范。然后写写注释吧,方便别人看。
2010-04-16 06:53
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
收藏
得分:0 
我用C语言写的啊,只有结构体的概念,没有类的概念...
2010-04-17 07:20
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
收藏
得分:0 
我找到错误了,谢谢了!
#include <stdio.h>
#include <stdlib.h>
typedef struct OLNode
{
    int i,j;
    int e;
    struct OLNode *right,*down;
}OLNode,*OLink;
typedef struct
{
    OLink *rhead,*chead;
    int mu,nu,tu;
}CrossList;
void CreatSMatrix_OL(CrossList *M)
{
    int i,j,e;
    int m,n,t;
    OLink p,q,pt;
    printf("请输入M的行数、列数和非零元的个数:\n");
    scanf("%d%d%d",&m,&n,&t);
    M->mu=m,M->nu=n,M->tu=t;
    if(!(M->rhead=(OLink *)malloc((m+1)*sizeof(OLink))))
        exit(0);
    if(!(M->chead=(OLink *)malloc((n+1)*sizeof(OLink))))
        exit(0);
    for(i=0;i<=m;i++)///
        M->rhead[i]=NULL;
    for(j=0;j<=n;j++)///
        M->chead[j]=NULL;
    printf("请按任意次序录入非零元的三元组数据,格式(行数(>=1) 列数(>=1) 非零元(!=0)):\n");
    while(t>0)
    {
        scanf("%d%d%d",&i,&j,&e);
            if(!(p=(OLink)malloc(sizeof(OLNode))))
                exit(0);
            p->i=i;p->j=j;p->e=e;
            if(M->rhead[i]==NULL||M->rhead[i]->j>j)
            {
                p->right=M->rhead[i];
                M->rhead[i]=p;
                ////
                printf("M->rhead[%d]->e=%d\n",i,M->rhead[i]->e);
                ////
            }
            else
            {
                for(q=M->rhead[i];(q->right)&&(q->right->j<j);q=q->right);//此处缺了分号
                    p->right=q->right;q->right=p;
                ////
                printf("输出当前横向链表:\n");
                pt=M->rhead[i];
                while(pt!=NULL)
                {
                    printf("%d ",pt->e);
                    pt=pt->right;
                }
                printf("\n");
                ////
            }
            if(M->chead[j]==NULL||M->chead[j]->i>i)
            {
                p->down=M->chead[j];
                M->chead[j]=p;
                ////
                printf("M->chead[%d]->e=%d\n",j,M->chead[j]->e);
                ////
            }
            else
            {
                for(q=M->chead[j];(q->down)&&(q->down->i<i);q=q->down);//此处缺了分号
                    p->down=q->down;q->down=p;
                ////
                printf("输出当前纵向链表:\n");
                pt=M->chead[j];
                while(pt!=NULL)
                {
                    printf("%d ",pt->e);
                    pt=pt->down;
                }
                printf("\n");
                ////
            }
            t--;
    }
}
void main()
{
    CrossList M;
    CreatSMatrix_OL(&M);
}
//现在程序可以正常运行了!
2010-04-18 08:43
快速回复:大家帮忙看看这个十字链表算法问题出在哪里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022102 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved