注册 登录
编程论坛 数据结构与算法

十字链表的建立,但出错了,不知道错哪,帮忙看看。

handsomechow 发布于 2012-11-13 13:53, 452 次点击
在建表的地方就出错了,但看不出是哪 知道是在第一个函数里面出错
#include<stdio.h>
#include<stdlib.h>
typedef struct shizi
{
  int i,j,e;
  struct shizi *right;
  struct shizi *down;
}shizi,*sz;
typedef struct xinxi
{
sz *rhead;
sz *dhead;
int mu,nu,tu;
}xinxi;


 void inser(sz A,xinxi &L)
 {
      int i,j;
      sz p,q;
      p=A;
      i=A->i;j=A->j;
 if(L.rhead[i]==NULL||L.rhead[i]->j>j)
 {
     p->right=L.rhead[i];printf("sasas");
     L.rhead[i]=p;
 }
 else
 {   
 
 for( q=L.rhead[i];(j>q->right->j)&&(q->right);q=q->right);
 p->right=q->right;printf("ssddddd");
 q->right=p;
 }
if(L.dhead[j]==NULL||L.dhead[j]->i>i)
 {
     p->down=L.dhead[j];
     L.dhead[j]=p;
 }
 else
 {   
 
 for( q=L.dhead[j];(i>q->down->i)&&(q->down);q=q->down);
 p->down=q->down;
 q->down=p;
 }

 }
void creat(xinxi &L)
{
   int i,j,e=1,n; sz p;
   printf("输入行数,列数:\n");
   scanf("%d",&i);L.mu=i;
   scanf("%d",&j);L.nu=j;
   L.tu=0;
  
    L.rhead=(sz *)malloc((i+1)*sizeof(sz));
    for(n=0;n<=i;n++,L.rhead[n]=NULL);
    L.dhead=(sz *)malloc((j+1)*sizeof(sz));
    for(n=0;n<=j;n++,L.dhead[n]=NULL);
    while(true)
    {
    printf("输入值,行下标,列下标并以0结束:\n");
    scanf("%d",&e);
    if(e==0) break;
    scanf("%d",&i);
    scanf("%d",&j);
    p=(sz)malloc(sizeof(shizi));
    p->e=e;p->i=i;p->j=j;
    inser(p,L);
    }

}

   int main(void)
   {
   xinxi LA;xinxi LB;
   printf("第一个十字链表\n");
   creat(LA);
   printf("第二个十字链表\n");
   creat(LB);
        
return 0;
   }
5 回复
#2
寒风中的细雨2012-11-13 23:07
知道  问题  那接下来就是把逻辑理清楚了  然后再去修改...
#3
handsomechow2012-11-14 14:23
回复 2楼 寒风中的细雨
版主啊,这程序我编了好几天了,但是就是改不出来啊,总觉得没错,但是再建表的时候就错了
#4
寒风中的细雨2012-11-14 16:37
程序代码:
Program received signal SIGSEGV, Segmentation fault.
0x080485c4 in inser (A=0x804b080, L=...) at test.cxx:31
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
#5
寒风中的细雨2012-11-14 16:38
程序代码:
    30
    31     for( q=L.rhead[i];(j>q->right->j)&&(q->right);q=q->right);
    32     p->right=q->right;printf("ssddddd");
    33     q->right=p;
    34     }
    35     if(L.dhead[j]==NULL||L.dhead[j]->i>i)
    36     {
    37          p->down=L.dhead[j];
    38          L.dhead[j]=p;
    39     }
    40     else
    41    {
    42
    43     for( q=L.dhead[j];(i>q->down->i)&&(q->down);q=q->down);
    44     p->down=q->down;
    45     q->down=p;
    46     }
#6
handsomechow2012-12-04 18:56
回复 5楼 寒风中的细雨
好的 ,谢谢版主哦· ·呵呵·
1