#include<stdio.h>
#define N 5
#define M 6
struct student{ //建立结构体数组,成员和书上不一样,可以修改
int no;
double sco;
struct student *next;
}cla1[N],cla2[M];
void main(){
struct student *head1,*head2,*p1,*p2,*p;
int i;
//在这里直接对结构体数组成员赋值,可以省去调试时输入数据时间
struct student cla1[N] = {{2003,87.5},{2004,86.4},{2005,34.5},{2007,87.5},{2009,56.5}};
struct student cla2[M] = {{2001,87.5},{2003,86.4},{2004,34.5},{2017,87.5},{2008,56.5},{2009,95.4}};
head1 = cla1;
head2 = cla2;
printf("List 1:\n");
//将结构体连接起来,链接成链表
for(p1 = head1,i = 1;i <= N;i++){
if(i == N)
p1->next = NULL;
else
p1->next = cla1+i;
printf("%d,%f\n",p1->no,p1->sco); //输出链表
p1 = p1->next;
}
printf("List 2:\n");
for(p2 = head2,i = 1;i <= M;i++){
if(i == M)
p2->next = NULL;
else
p2->next = head2 + i;
printf("%d,%f\n",p2->no,p2->sco);
p2 = p2->next;
}
p1 = head1;
while(p1 != NULL){
p2 = head2;
while((p1->no != p2->no) && (p2->next != NULL))
p2 = p2->next;
if(p1->no == p2->no){
if(p1 == head1)
head1 = head1->next;
else
p->next = p1->next;
//原本这里有大括号,现在去掉大括号
p1 = p1->next;
}
else{
p = p1;
p1 = p1->next;
}
}
printf("\nresult:\n");
p1 = head1;
while(p1 != NULL){
printf("%d,%f\n",p1->no,p1->sco);
p1 = p1->next;
}
}
//这里是学习指导上的源代码,大家可以对比一下
#include<stdio.h>
#define N 5
#define M 6
struct student{
int no;
double sco;
struct student *next;
}cla1[N],cla2[M];
void main(){
struct student *head1,*head2,*p1,*p2,*p;
int i;
struct student cla1[N] = {{2003,87.5},{2004,86.4},{2005,34.5},{2007,87.5},{2009,56.5}};
struct student cla2[M] = {{2001,87.5},{2003,86.4},{2004,34.5},{2017,87.5},{2008,56.5},{2009,95.4}};
head1 = cla1;
head2 = cla2;
printf("List 1:\n");
for(p1 = head1,i = 1;i <= N;i++){
if(i == N)
p1->next = NULL;
else
p1->next = cla1+i;
printf("%d,%f\n",p1->no,p1->sco);
p1 = p1->next;
}
printf("List 2:\n");
for(p2 = head2,i = 1;i <= M;i++){
if(i == M)
p2->next = NULL;
else
p2->next = head2 + i;
printf("%d,%f\n",p2->no,p2->sco);
p2 = p2->next;
}
p1 = head1;
while(p1 != NULL){
p2 = head2;
while((p1->no != p2->no) && (p2->next != NULL))
p2 = p2->next;
if(p1->no == p2->no){
if(p1 == head1)
head1 = head1->next;
else{
p->next = p1->next;
p1 = p1->next;
}
}
else{
p1 = p1->next;
p = p1;
}
}
printf("\nresult:\n");
p1 = head1;
while(p1 != NULL){
printf("%d,%f\n",p1->no,p1->sco);
p1 = p1->next;
}
}