有两个链表a和b,设结点中包含学号和姓名,从a链表中删除和b链表中相同学号的结点。

2016-06-20 10:23:54  分类: c程序设计第四版谭浩强课后答案  参与:

 有两个链表a和b,设结点中包含学号和姓名,从a链表中删除和b链表中相同学号的结点。(吴何雨洁飘)

c程序设计(第四版)学习辅导 谭浩强 编著

【c源程序】

#include <stdio.h>
#include <string.h>
#define LA 4
#define LB 5
struct  student
  {int num;
   char name[8];
   struct student *next;
  } a[LA],b[LB];

int main()
{struct student a[LA]={{101,"Wang"},{102,"Li"},{105,"Zhang"},{106,"Wei"}};
 struct student b[LB]={{103,"Zhang"},{104,"Ma"},{105,"Chen"},{107,"Guo"},{108,"lui"}};
 int  i;
 struct student *p,*p1,*p2,*head1,*head2;

 head1=a;
 head2=b;
 printf(" list A:  \n");
  for (p1=head1,i=1;i<=LA;i++)
    {if(i<LA) p1->next=a+i;
  else p1->next=NULL;
     printf("%4d%8s\n",p1->num,p1->name);
     if(i<LA) p1=p1->next;
 }
  printf("\n list B:\n");
  for (p2=head2,i=1;i<=LB;i++)
    {if (i<LB) p2->next=b+i;
  else p2->next=NULL;
     printf("%4d%8s\n",p2->num,p2->name);
     if (i<LB) p2=p2->next;
    }

  p1=head1;
  while(p1!=NULL)
    {p2=head2;
     while ((p1->num != p2->num) && (p2->next!=NULL))
    p2=p2->next;
  if (p1->num == p2->num)
       {if (p1==head1)
       head1=p1->next;
     else
          {p->next=p1->next;p1=p1->next;}
       }
  else
  {p=p1;p1=p1->next;}
  }

  printf("\nresult:\n");
  p1=head1;
  while(p1!=NULL)
    {printf("%4d %7s  \n",p1->num,p1->name);
     p1=p1->next;
    }
  return 0;
}

 

来源:c程序设计第四版谭浩强课后答案

本文链接:http://www.wb98.com/c/post/tanhaoqiang_9.11.html

本站文章搜索:

<< 上一篇下一篇 >>

搜索

网站分类

Tags列表

赞助商链接