路漫漫兮!!

作者在 2013-12-31 13:47:35 发布以下内容

我前几天为写一个论文抱着书看,在我认为我都差不多了解的情况下我开始了我的课程设计,我的课程设计是一个用我们学过的静态链表来完成两个集合的交,并,异或,我算是写完了我的代码,但是错误就多的让我很是泄气,不过我给老师看看我的代码,由于老师的时间很急,老师说我的代码隐存在的问题较多,我于是又看了一遍书,自己也改了不少的错误,但是,唉,一个大的问题还是把我难倒了现在我还处在困境之中,困境就是我的代码调试和编译都没有错误,可是就是运行在某个阶段不能运行,那位热心人帮忙解决一下啊

这是我的代码:(求高手指点指点!甚是感激。)

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE  100


//typedef  int SLinkList[];
typedef   int ElemType; 


typedef   struct  
{         
ElemType   data ;             //数据域         
    int        cur ;             //指示域   
 }component ,SLinkList[MAXSIZE] ;  //这是一维结构

int menu_select();
void InitSpace_SL(SLinkList  &space) ;
int    Malloc_SL(SLinkList  &space );
void  Free_SL ( SLinkList  &space , int &k );
void difference ( SLinkList &space , int &S );
void print_SL(SLinkList &space);

void main()
{
SLinkList space;
int S,k;

for(;;)
{
switch(menu_select( ))
{
case 1:
InitSpace_SL (space);
printf("将整个数组空间初始化成一个链表成功!\n");
break;
case 2:
   Malloc_SL (space);
printf("从备用空间取得一个结点成功!\n");
break;
case 3:
   Free_SL (space,k);
printf("将空间结点链结到备用链表上成功!\n");
break;
case 4:printf("实现对集合A和集合B的并\n");
break;
case 5:printf("实现对集合A和集合B的交\n");
break;
case 6:printf("分别输入集合A与集合B的个数m,n\n:");
printf("分别输入集合A和集合B的元素:\n");
            difference (space ,S);
break;
case 0:printf("退出!\n"); 
exit(0);
}
}
}
int menu_select(  )
{ int sn;
printf("1.将整个数组空间初始化成一个链\n");
printf("2.从备用空间取得一个结点\n");
printf("3.将空间结点链结到备用链表上\n");
printf("4.实现对集合A和集合B的并\n");
printf("5.实现对集合A和集合B的交\n");
printf("6.实现对集合A和集合B的异或\n");
printf("0.退出!\n");
printf("Input 0-6:");
for(; ;)
{ scanf("%d",&sn);
if(sn<0||sn>6)
printf("\n输入错误,重选0——6:");
else break; }
return sn; }

void InitSpace_SL ( SLinkList  &space ) 
   //space 是存放静态链表的数组名

int I;
for ( I=0 ;I < MAXSIZE-1 ;++ I )
        space [I] . cur = I+1 ;
space [MAXSIZE-1].cur=0 ;

          
int    Malloc_SL ( SLinkList  &space )
{
int I;
   I = space [0] . cur ;
   if ( space [0] . cur )
       space [0] . cur = space [I] . cur ;
   return I ;
} //从备用链头取一结点 
void  Free_SL ( SLinkList  &space , int &k )


       space [k] . cur = space [0] . cur ;
       space [0] . cur = k ;
}   //插在备用链头
                
void difference ( SLinkList &space ,  int &S )
  {
int r,j,I;
int m,n,b,p,k;
InitSpace_SL (space );
     S = Malloc_SL (space );
     r = S ;     // r 使用链尾指针 , S 使用链头指针
     scanf ( "%d%d",&m,&n ) ;    //A和B的元素个数
     for ( j = 1 ; j <= m ; ++j )
          { I=Malloc_SL ( space ) ;             
  scanf ( "%d",&space [I] . data ) ;
             space [r] . cur  = I ; 
             r  = I ;      // r 指向链尾 
           }
       space [r] . cur  = 0 ;  
            for ( j = 1 ; j<= n ; ++j )
                { scanf ("%d",&b );
                   p = S ;  //p 用来存放访问结点的前驱
                   k = space [S] . cur ;  //当前访问结点
                   while ( k !=  space [r] .cur &&
                              space [k] .data != b)
                         { p = k ; 
                            k = space [k] . cur ;
                           } //遍历A链
      if ( k==space [r] . cur ) 
                             // 搜索到表尾 ,无,需插入
            {  I = Malloc_SL ( space );
                space [I] . data = b ;
                space [I] . cur  = space [r] . cur;
                space [r] . cur  = I ;
 }  // 插在r的后面


       else                // 搜索到相同元素,需删除
            { space [p] .cur = space [k] .cur ;
               Free_SL ( space ,k );
               if ( r== k )    r = p ; }
      }//for
   print_SL(space);
}
void print_SL(SLinkList &space)
{
int i,m,n;
scanf("%d%d",&m,&n);
for(i=0;i<m+n;i++)
printf("space[i].data");
printf("\n");
}
void Intersection_SL(SLinkList &space , int &S)
 {
int r,j,I,i;
int m,n,b,p,k;
InitSpace_SL (space );
     S = Malloc_SL (space );
     r = S ;     // r 使用链尾指针 , S 使用链头指针
     scanf ( "%d%d",&m,&n ) ;    //A和B的元素个数
     for ( j = 1 ; j <= m ; ++j )
          { I=Malloc_SL ( space ) ;             
  scanf ( "%d",&space [I] . data ) ;
             space [r] . cur  = I ; 
             r  = I ;      // r 指向链尾 
           }
       space [r] . cur  = 0 ;  
            for ( j = 1 ; j<= n ; ++j )
                { scanf ("%d",&b );
                   p = S ;  //p 用来存放访问结点的前驱
                   k = space [S] . cur ;  //当前访问结点
                   while ( k !=  space [r] .cur &&
                              space [k] .data != b)
                         { p = k ; 
                            k = space [k] . cur ;
                           } //遍历A链
      if ( k==space [r] . cur ) 
                             // 搜索到表尾 ,无,需删除
            {   space [p] .cur = space [k] .cur ;
               Free_SL ( space ,k );
               if ( r== k )    r = p ; 
 }  // 插在r的后面


       else                // 搜索到相同元素,需插入
            { I = Malloc_SL ( space );
                space [I] . data = b ;
                space [I] . cur  = space [r] . cur;
                space [r] . cur  = I ;
  }
      for(i=1;i<=m;i++)
 {
          Free_SL ( space ,i);
 }
      }//for
   print_SL(space);
}//集合的交

默认分类 | 阅读 930 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论