Great Big Storm 2022-04-24 16:33 采纳率: 57.1%
浏览 14
已结题

十字链表加法,一直只能输入没有输出,求解答

十字链表实现加法
运行结果及报错内容:没有报错

我的解答思路和尝试过的方法:在build的地方对循环条件改动

我想要达到的结果:不会无限输入,得到输出

#include<stdio.h>
#include<stdlib.h>
typedef struct OLNode
{
    int row,col;
    int info;
    struct OLNode *right,*down;
}OLNode,*OLink;
 typedef struct
{
     OLink *rowhead,*colhead;//这里要加*,为什么? 
     int m,n,len;
}Crosslist;
 Crosslist* build(int m,int n,int len)
 {
  Crosslist*p=(Crosslist*) malloc(sizeof(Crosslist));
  p->m=m;
  p->n=n;
  p->len=len;
  p->rowhead=(OLink*)malloc((m+1)*sizeof(OLNode));
  p->colhead=(OLink*)malloc((n+1)*sizeof(OLNode));
 for(int i=0;i<m+1;i++)
  {
      p->rowhead[i]=NULL;
   }
   for(int j=0;j<n+1;j++)
  {
      p->colhead[j]=NULL;
   } 
  return p;     
 } 
void insert(Crosslist*list,int row,int col,int info)//插入 
 {
     OLink p=(OLNode*)malloc(sizeof(OLink));//这里不加* 
     p->col=col;
     p->row=row;
     p->info=info;
     if(list->rowhead[row]==NULL||list->rowhead[row]->col>col)
     {
         p->right=list->rowhead[row];
         list->rowhead[row]=p;
    }
     else if(list->rowhead[row]->col<col)
    {
          OLink q=list->rowhead[row];
         while(q->right!=NULL&&q->right->col<col)
        {
        q=q->right;    
        }
        if(q->right==NULL)
        {
        q->right=p;    
        }
        else
        {
        p->right=q->right;
        q->right=p;        
        }    
    }     
  } 
  void completeMatrix(Crosslist* p)
{
    for(int k=1;k<=p->len;k++)
    {
        int i,j,elem;
        scanf("%d %d %d\n",&i,&j,&elem);
        insert(p,i,j,elem);
    }
}

  void output(Crosslist*p)
  {
      int i,j;
      for(i=1;i<=p->m;i++)
      {
            OLink q;
              q=p->rowhead[i];
          for(j=1;j<=p->n;j++)
          {  OLink q1;
             q1=q;
            while(q1!=NULL)
          {
                if(q1->col==j)
                {
                printf("%d %d %d",q1->row,q1->col,q1->info);
            }
            q1=q1->right;    
        }
            
        }
      }
  }
  Crosslist* add(Crosslist* p1,Crosslist* p2,Crosslist* p3)
{
      int i;
      int num=0;
      int mumax,tumax;
      OLink q1,q2;//不加*,为什么? 
      if(p1->len>p2->len) 
      tumax=p1->len;
    else 
      tumax=p2->len;
    if(p1->m>p2->m)
      mumax=p1->m;
    else
      mumax=p2->m;
    while(num<=tumax)
    {
    for(i=1;i<=mumax;i++)
     {
        q1=p1->rowhead[i];
        q2=p2->rowhead[i];
        if(q1!=NULL&&q2==NULL)
         {
            while(q1!=NULL)
            {
                insert(p3,q1->row,q1->col,q1->info);
                q1=q1->right;
                num++;
            }
         }
        if(q1==NULL&&q2!=NULL)
         {
            while(q2!=NULL)
            {
                insert(p3,q2->row,q2->col,q2->info);
                q2=q2->right;
                num++;
            }
         }
        if(q1!=NULL&&q2!=NULL)
        {
            while(q1!=NULL||q2!=NULL)
            {
                if(q1->col<q2->col ||q2!=NULL)
                 {
                insert(p3,q1->row,q1->col,q1->info);
                q1=q1->right;
                num++;    
                 }
                if(q2->col>q1->col ||q1!=NULL)
                 {
                insert(p3,q2->row,q2->col,q2->info);
                q2=q2->right;
                num++;    
                 }
                if(q1->col==q2->col)
                 {
                    if((q1->info+q2->info)!=0)
                {
                    insert(p3,q1->row,q1->col,q1->info+q2->info);
                    q1=q1->right;
                    q2=q2->right;
                    num++;        
                    }
                 }
            }
        }
     }    
    }
    return p3;
}
  int main()
{
      Crosslist* p1,*p2,*p3;
      int m,n,t1,t2,i,j;
      scanf("%d %d %d %d\n",&m,&n,&t1,&t2);
      p1=build(m,n,t1);
      p2=build(m,n,t2);
      p3=build(m,n,t1+t2);
      completeMatrix(p1);
      completeMatrix(p2);
    p3=add(p1,p2,p3);
    output(p3);
    return 0;  
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月2日
    • 创建了问题 4月24日

    悬赏问题

    • ¥15 程序实在不会写,要秃了
    • ¥15 pycharm导入不了自己的包
    • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
    • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
    • ¥15 关于R语言单因素与多因素线性回归的平均值
    • ¥15 服务器清除BIOS之后引导不了
    • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
    • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
    • ¥15 前端预览docx文件,文件从后端传送过来。
    • ¥15 层次聚类和蛋白质相似度