主题:高手帮忙改错
#define MAXSIZE 50
#define NULL 0
typedef struct
{ long num;
char name[20];
int age;
char sex[2];
char address[20];
}student;
typedef struct Node
{ student data;
struct Node *next;
} LNode,*LinkList;
LinkList Creat_LinkList()
{
LinkList L;
LNode *s;
char a[2];
int flag;
L = (LNode *) malloc (sizeof(LNode));
L -> next = NULL;
do{
s = (LNode *) malloc (sizeof(LNode));
printf("请输入学号:(1~40)");
scanf("%ld",&s->data.num);
printf("请输入姓名:");
scanf("%s",s-> data.name);
printf("请输入性别:");
scanf("%s",a);
printf("请输入年龄:");
scanf("%d",&s-> data.age);
printf("请输入地址:");
scanf("%s",s-> data.address);
strcpy(s->data.sex,a);
printf("请输入节点值,如链表结束,请输入-1:");
scanf("%d",&flag);
s ->next=L->next;
L ->next=s ;
}while( flag!=-1);
return L;
}
void Show_LinkList(LinkList L)
{
LNode *s;
s = L->next;
printf("\t学号\t姓名\t性别\t年龄\t地址\n");
while(s!= NULL)
{printf("\t%ld\t%s\t%c\t%d\t%s\n",s->data.num,s->data.name,s->data.sex,s->data.age,s->data.address);
s = s -> next ;
}
printf("\n");
}
int Insert_LinkList( LinkList L,int i,int x)
{
LNode *p,*s;
p = Get_LinkList(L,i-1);
if ( p == NULL )
{
printf("错误的参数值!\n");
return 0 ;
}
else
{
s= (LNode *)malloc ( sizeof ( LNode ) );
s->data = x;
s -> next = p-> next ;
p -> next = s;
return 1;
}
}
int Del_LinkList ( LinkList L,int i)
{
LNode *p,*s;
p = Get_LinkList(L,i-1);
if( p == NULL)
{
printf("第i-1个节点不存在\n");
return -1;
}
else if ( p-> next == NULL)
{
printf("第i个节点不存在\n");
return 0;
}
else
{
s = p->next ;
p -> next = s ->next;
free(s);
}
}
main()
{ int i,j,x;
LinkList L;
do{
printf("1、从前面插入的链表 2、输出 3、插入 4、删除 0、退出\n");
scanf("%d",&i);
if(i == 1 ) L = Creat_LinkList();
if(i == 2 ) Show_LinkList( L);
if(i == 3 ) { printf("请在指定位置插入数值,请输入位置(请在1 ~ %d 之内选择):",Length_LinkList(L));
scanf("%d",&j);
printf("请输入您要插入的数值:");
scanf("%d",&x);
if(Insert_LinkList(L,j,x) == 0 )
printf("插入失败!\n");
else { printf("数据插入成功,新数据序列为:\n");
Show_LinkList(L);}
}
if(i == 4 ){printf("请在指定位置插入数值,请输入位置(请在1 ~ %d 之内选择):",Length_LinkList(L)+1);
scanf("%d",&j);
if(Get_LinkList(L,j) == NULL ) printf("您查找的节点为空!\n");
else { printf("您确定要删除数据:%d: 确定请输入1,输入其他数字退出删除 ",Get_LinkList(L,j)->next);
scanf("%d",&x);
if(x ==1)
{ if(Del_LinkList (L,j) == 0 ) printf("数据删除失败!\n");
else { printf("数据数据成功,新数据序列为:\n");
Show_LinkList(L);}
}
else printf("您放弃了删除\n");
}
}
}while(i!=0);
return 0;
}
#define NULL 0
typedef struct
{ long num;
char name[20];
int age;
char sex[2];
char address[20];
}student;
typedef struct Node
{ student data;
struct Node *next;
} LNode,*LinkList;
LinkList Creat_LinkList()
{
LinkList L;
LNode *s;
char a[2];
int flag;
L = (LNode *) malloc (sizeof(LNode));
L -> next = NULL;
do{
s = (LNode *) malloc (sizeof(LNode));
printf("请输入学号:(1~40)");
scanf("%ld",&s->data.num);
printf("请输入姓名:");
scanf("%s",s-> data.name);
printf("请输入性别:");
scanf("%s",a);
printf("请输入年龄:");
scanf("%d",&s-> data.age);
printf("请输入地址:");
scanf("%s",s-> data.address);
strcpy(s->data.sex,a);
printf("请输入节点值,如链表结束,请输入-1:");
scanf("%d",&flag);
s ->next=L->next;
L ->next=s ;
}while( flag!=-1);
return L;
}
void Show_LinkList(LinkList L)
{
LNode *s;
s = L->next;
printf("\t学号\t姓名\t性别\t年龄\t地址\n");
while(s!= NULL)
{printf("\t%ld\t%s\t%c\t%d\t%s\n",s->data.num,s->data.name,s->data.sex,s->data.age,s->data.address);
s = s -> next ;
}
printf("\n");
}
int Insert_LinkList( LinkList L,int i,int x)
{
LNode *p,*s;
p = Get_LinkList(L,i-1);
if ( p == NULL )
{
printf("错误的参数值!\n");
return 0 ;
}
else
{
s= (LNode *)malloc ( sizeof ( LNode ) );
s->data = x;
s -> next = p-> next ;
p -> next = s;
return 1;
}
}
int Del_LinkList ( LinkList L,int i)
{
LNode *p,*s;
p = Get_LinkList(L,i-1);
if( p == NULL)
{
printf("第i-1个节点不存在\n");
return -1;
}
else if ( p-> next == NULL)
{
printf("第i个节点不存在\n");
return 0;
}
else
{
s = p->next ;
p -> next = s ->next;
free(s);
}
}
main()
{ int i,j,x;
LinkList L;
do{
printf("1、从前面插入的链表 2、输出 3、插入 4、删除 0、退出\n");
scanf("%d",&i);
if(i == 1 ) L = Creat_LinkList();
if(i == 2 ) Show_LinkList( L);
if(i == 3 ) { printf("请在指定位置插入数值,请输入位置(请在1 ~ %d 之内选择):",Length_LinkList(L));
scanf("%d",&j);
printf("请输入您要插入的数值:");
scanf("%d",&x);
if(Insert_LinkList(L,j,x) == 0 )
printf("插入失败!\n");
else { printf("数据插入成功,新数据序列为:\n");
Show_LinkList(L);}
}
if(i == 4 ){printf("请在指定位置插入数值,请输入位置(请在1 ~ %d 之内选择):",Length_LinkList(L)+1);
scanf("%d",&j);
if(Get_LinkList(L,j) == NULL ) printf("您查找的节点为空!\n");
else { printf("您确定要删除数据:%d: 确定请输入1,输入其他数字退出删除 ",Get_LinkList(L,j)->next);
scanf("%d",&x);
if(x ==1)
{ if(Del_LinkList (L,j) == 0 ) printf("数据删除失败!\n");
else { printf("数据数据成功,新数据序列为:\n");
Show_LinkList(L);}
}
else printf("您放弃了删除\n");
}
}
}while(i!=0);
return 0;
}