| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 645 人关注过本帖
标题:十字链表,求修改
只看楼主 加入收藏
qixing232325
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-10-11
结帖率:100%
收藏
已结贴  问题点数:2 回复次数:2 
十字链表,求修改
写了一段程序,可是怎么也运行不了,求大神指教!
要求:数据元素类型ElemType取float。
1)从键盘输入稀疏矩阵的各元素。(行<=5,列<=5)
2)建立稀疏矩阵的十字链表。
3)分别按行、列输出链表中各元素的数据域。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct OLNode
{
    int i,j;                                                   
    float v;
    struct OLNode *right;
    struct OLNode *down;
};

struct OLNode *matrix_to_OLN(int m, int n, float a[])
{   int p,q,tt=0,mm,nn;
        mm=m;
        nn=n;
        float d;
        struct OLNode *H,*s,*k;
        if(mm>=nn)
            q=mm;
        else q=nn;
         H=(OLNode*)malloc(sizeof(OLNode));
        for(p=0;p<q;p++)
        {
        H[p].i=-1;
        H[p].j=-1;
        H[p].down=&H[p];
        H[p].right=&H[p];
        }
        for (p=0;p<m;p++)
        for (q=0;q<n;q++)
       {
         d=a[p*n+q];
         if(d!=0)
         {
             s=(OLNode*)malloc(sizeof(OLNode));
             s->i=p;
             s->j=q;
             s->v=d;
             k=&H[p];
             while(k->right!=&H[p])
             {     k=k->right;
             k->right=s;
             s->right=&H[p];
             k=&H[q];
             }
             while(k->down!=&H[q])
                 k=k->down;
             k->down=s;
             s->down=&H[q];
             tt=tt+1;
         }      
       }
       return H;
}
void put_Array1(struct OLNode *H,int m,int n)
{
    OLNode *r;
    int b,bb;
    printf("按行输入:");
    for(b=0;b<m;b++)
    {
        r=&H[b];
        r=r->right;
        for(bb=0;bb<n;bb++)
        {
            if(r->j==bb)
            {
                printf("\t行=%d 列=%d 值=%f",r->i,r->j,r->v);
            r=r->right;
            }
            printf("\n");
    }
    }
}
void put_Array2(struct OLNode *H,int m,int n)
{
    OLNode *r;
    int b,bb;
    printf("按列输入:");
    for(b=0;b<n;b++)
    {
        r=&H[b];
        r=r->down;
        for(bb=0;bb<m;bb++)
        {
            if(r->i==bb)
            {
                printf("\t行=%d 列=%d 值=%f",r->i,r->j,r->v);
            r=r->down;
            }
            printf("\n");
    }
    }
}


void main()
{
    int m,n,t,i;
    float a[25];
    struct OLNode *H;
    printf("输入行、列,非零元素个数(m,n,t数字间用逗号分隔)");
    scanf("%d,%d,%d",&m,&n,&t);//输入行、列,非零元素个数
    if(m>5||n>5)
        printf("error");
    else
    {    printf("输入矩阵元素(数字间用逗号分隔)");
       for(i=0;i<m*n;i++)
    {
   
            printf("a[%d]=",i);
             scanf("%f",&a[i]);
        
    }

    H=matrix_to_OLN(m,n,a);
    put_Array1(H,m,n);
    put_Array2(H,m,n);
    }


}

[ 本帖最后由 qixing232325 于 2013-10-11 22:33 编辑 ]
搜索更多相关主题的帖子: include 键盘 元素 
2013-10-11 22:28
qixing232325
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-10-11
收藏
得分:0 
怎么没人回复我,求助啊!!!
2013-10-12 22:04
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:2 
OLNODE少了好几个STRUCT,逻辑上就没看了,字母太繁琐了,看着晕

好好学习,天天想上
2013-10-13 23:55
快速回复:十字链表,求修改
数据加载中...
 
   



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

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