回 帖 发 新 帖 刷新版面

主题:关于十字链表的疑问

以下是一个实现建立十字链表并按照其行方式打印程序代码:

typedef struct matnode
{
        int row,col;
        struct matnode *right,*down'
        union
        {
             int val;
             struct matnode *next;
        }tag;
}MType;
MType *createmat()
{
      int m,n,t,s,r,c,v;
      MType *h[100],*p,*q;
      printf("row m,cpl n,Not 0 t:");
      scnf("%d,%d,%d,&m,&n,&t");
      p=(MType *)malloc(sizeof(MType));
      h[0]=p;
      p->row=m;
      p->col=n;
      s=m>n?m:n;
      for(i=1;i<=s;i++)
      {
                       p=(MType *)malloc(sizeof(MType));
                       h[i]=p;
                       h[i-1]->tag.nest=p;
                       p->row=p->col=0;
                       p->down=p->right;
      }
      h[s]->tag.next=h[0];
      for(i=1;i<=t;i++)
      {
      printf("\t第%d个元素(行号r,列号c,值v):",i);
      scnf("%d,%d,%d,&r,&c,&v");
      p=(MType *)malloc(sizeof(MType));
      p->row=r;
      p->col=c;
      p->tag.val=v;
      q=h[r];
      while(q->right!h[r]&&q->right->col<c)
         q=q->right;
      p->right=q->right;
      q->right=p;
      q=h[c];
      while(q->right!=h[c]&&q->down->row<r)
         q=q->down;
      p->down=q->down;
      p->down=p;
      }
      return(h[o]);
}
      void prmat(MType *hm)
      {
           MType *p,*q;
           printf("\n按行表输入矩阵元素:\n");
           printf("row=%d col=%d\n,hm->row,hm->col");
           p=hm->tag.next;
           while(p!=hm)
           {
           q=p->right;
           while(p!=q)
           {
                      printf("\t%d,%d,%d\n",q->row,q->col,q->tag.val);
                      q=q->right;
           }
           p=p->tag.next;
      }
}
main()
{
      MType *hm;
      hm=createmat();
      prmat(hm);
}

我有两个疑问想请教大家。

第一:
for(i=1;i<=s;i++)
      {
                       p=(MType *)malloc(sizeof(MType));
                       h[i]=p;
                       h[i-1]->tag.nest=p;
                       p->row=p->col=0;
                       p->down=p->right;
      }
      h[s]->tag.next=h[0];

这一段代码实现的是生成表头指针数组,按常规来说,应该生成行与列的表头指针数组,但是这一段程序似乎只能生成列?

第二:

q=h[r];
      while(q->right!h[r]&&q->right->col<c)
         q=q->right;
      p->right=q->right;
      q->right=p;
      q=h[c];

这一段程序是将新生成的结点p插入r行的尾部吗?

回复列表 (共1个回复)

沙发

十字链表对空间要求大,而且好象不使用

我来回复

您尚未登录,请登录后再回复。点此登录或注册