24小时热门版块排行榜    

查看: 897  |  回复: 1

lelemaoer

金虫 (初入文坛)

[求助] 请教《数据结构》,建立稀疏矩阵的十字链表算法。

#include
#include

typedef int ElementType;
typedef struct OLNode /*十字链表的结构类型定义如下:*/
{
        int row,col; /*非零元素的行和列下标*/
        ElementType value;
        struct OLNode *right,*down; /*非零元素所在行表、列表的后继链域*/
}OLNode,*OLink;

typedef struct
{
        OLink *row_head,*col_head; /*行、列链表的头指针向量*/
        int m,n,len; /*稀疏矩阵的行数、列数、非零元素的个数*/
}CrossList;


void CreateCrossList(CrossList *M)
{
        int m,n,t;
        OLNode *p,*q;
        int i,j,e,k;

        printf("输入M的行数,列数,和非零元的个数:"; /*采用十字链表存储结构,创建稀疏矩阵M*/
        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)) ))
                printf("error";
        if( !(M->col_head=(OLink *)malloc( (n+1)*sizeof(OLink)) ))
                printf("error";

        for(k=1;k<=m;k++)
                M->row_head[k]=NULL;
        for(k=1;k<=n;k++)
                M->col_head[k]=NULL; /*初始化行、列头指针向量,各行、列链表为空的链表*/
               
        printf("输入各非零元素行,列和值,逗号隔开!\n";
        for( scanf("%d,%d,%d",&i,&j,&e);i!=0;scanf("%d,%d,%d",&i,&j,&e) )
        {
                if( !(p=(OLNode *)malloc(sizeof(OLNode))) )
                        printf("error";
                p->row=i;
                p->col=j;
                p->value=e;

                if(M->row_head==NULL) /*生成结点*/
                        M->row_head=p;
                else /*寻找行表中的插入位置*/
                {
                        for(q=M->row_head; q->right&&q->right->colright); /*空循环体*/
                        p->right=q->right;
                        q->right=p; /*完成插入*/
                }

                if(M->col_head[j]==NULL)
                        M->col_head[j]=p;
                else /*寻找列表中的插入位置*/
                {
                        for(q=M->col_head[j]; q->down&&q->down->rowdown); /*空循环体*/
                        p->down=q->down;
                        q->down=p; /*完成插入*/
                }
        }
}


main()
{
        CrossList M;
        CreateCrossList(&M);
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yalefield

金虫 (文坛精英)

老汉一枚

中麻辣?
2楼2012-07-10 15:22:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lelemaoer 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[论文投稿] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 ANUsWpSnuWQD 2026-08-06 3/150 2026-08-07 02:06 by nSM3ys5fefM3
[基金申请] 听说今天filecode变了 +19 布布和一二 2026-08-06 33/1650 2026-08-07 01:25 by 云上清扬
[基金申请] 基金中了 +6 laoda193707 2026-08-06 6/300 2026-08-06 23:34 by dragonxp
[基金申请] filecode +10 等待解的谜 2026-08-06 14/700 2026-08-06 21:16 by zhanghaozhu
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 6/300 2026-08-06 20:19 by 苏知砚
[有机交流] 一个有机合成实验室都需要哪些设备? 50+3 kf2781974 2026-07-31 12/600 2026-08-06 15:11 by eddyin
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[教师之家] 咨询面上基金 +4 李长云 2026-07-31 7/350 2026-08-06 11:20 by 李长云
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +9 archvillain 2026-08-04 11/550 2026-08-05 20:06 by wlwhappy
[基金申请] 面上再次挂了,太难了,躺也躺不了,倦也卷不过,小学校之殇! +22 低垂的野花 2026-07-31 30/1500 2026-08-05 18:03 by 低垂的野花
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 4/200 2026-08-05 09:59 by lfy8008
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
[论文投稿] 十年后又回来了,论文投稿求助 +3 哈哈114477 2026-08-01 3/150 2026-08-04 15:40 by tegsgjy20
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 面上提前没消息,有中的吗 +14 archvillain 2026-08-02 18/900 2026-08-04 14:42 by archvillain
[基金申请] 娱乐 +4 Tide man 2026-08-03 4/200 2026-08-04 11:51 by wgch518
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见