9999 哪位大哥帮我看下这个程序!
其实程序目的很简单就是建立2个链表 ! 然后比较2个链表 , 将 第一个链表中与第2个链表 学号(num) 相同的节点, 在 输出新的第一个连表。 做了一下午努力还是没出来 希望哪位高手耐心帮我下 万分感谢!
编程新手:XXX
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
int num;
float score;
struct student *next;
}kk;
kk a[3];
kk b[3];
void fun1(kk**head1,kk**head2)/*创建2个链表*/
{
int i;
*head1=&a[0];
*head2=&b[0];
a[0].num=10011;a[0].score=97;
a[1].num=10013;a[1].score=94;
a[2].num=10015;a[2].score=90;
b[0].num=10012;b[0].score=97;
b[1].num=10013;b[1].score=93;
b[2].num=10016;b[2].score=92;
for(i=0;i<2;i++)
{
a[i].next=&a[i+1];
b[i].next=&b[i+1];
}
a[i].next=b[i].next=NULL;
}
void fun2(kk *head) /*输出链表*/
{
kk *p;
p=head;
while(p!=NULL)
{
printf("%d,%.2f\n",p->num,p->score);
p=p->next;
}
}
kk* fun3(kk *head,kk *p)/*删除符合要求的节点*/
{
kk *p1,*p2;
if(head==NULL)
{
printf("error!\n");
exit(0);
}
else
{
p1=head;
while(p1->num!=p->num&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1->num==p->num)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
}
else
printf("is no lisn!\n");
}
return head;
}
void fun4(kk* head1,kk *head2)/*删除a 与b num相同 的节点*/
{
kk *p1,*p2;
p1=head1;
p2=head2;
while(p1->next!=NULL)
{
while(p1->num!=p2->num&&p2->next!=NULL)
p2=p2->next;
if(p1->num==p2->num)
head1=fun3(head1,p2);/*调用fun3()来删除节点*/
p1=p1->next;
}
printf("The new chain a table is:\n");
fun2(head1);/*输入删除节点后的a 链表*/
}
void main()
{
kk a,*head1,*head2;
fun1(&head1,&head2);/*创建2个链表*/
printf("The a link:\n");
fun2(head1); /*输出第一个链表*/
printf("\n");
printf("The b link:\n");
fun2(head2); /*输出第2个链表*/
printf("\n");
fun4(head1,head2);/*删除链表a 中和b 'num' 相同的元素*/
}