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