已有a,b两个链表,每个链表中的结点包括学号,成绩.要求把两个链表合并,按学号升序排序。

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

 已有a,b两个链表,每个链表中的结点包括学号,成绩.要求把两个链表合并,按学号升序排序。

【c源程序】
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)

struct  student
{long num;
 int score;
 struct student *next;
};

struct student lista,listb;
int n,sum=0;

int main()
{struct student *creat(void);
 struct student *insert(struct student  *,struct student *);
 void print(struct student *);
 struct student *ahead,*bhead,*abh;
 printf("input list a:\n");
 ahead=creat();
 sum=sum+n;
 printf("input list b:\n");
 bhead=creat();
 sum=sum+n;
 abh=insert(ahead,bhead);
 print(abh);
 return 0;
}

struct student *creat(void)       //建立链表函数
 {struct student *p1,*p2,*head;
  n=0;
  p1=p2=(struct student *)malloc(LEN);
  printf("input number & scores of student:\n");
  printf("if number is 0,stop inputing.\n");
  scanf("%ld,%d",&p1->num,&p1->score);
  head=NULL;
  while(p1->num !=0)
    {n=n+1;
     if (n==1)
       head=p1;
     else
       p2->next=p1;
     p2=p1;
     p1=(struct student *)malloc(LEN);
     scanf("%ld,%d",&p1->num,&p1->score);
    }
    p2->next=NULL;
  return(head);
}
    
struct student *insert(struct student *ah,struct student *bh)   //插入函数
 {struct student * pa1,* pa2,* pb1,* pb2;
  pa2=pa1=ah;
  pb2=pb1=bh;
  do
  {while((pb1->num>pa1->num) && (pa1->next !=NULL))
     {pa2=pa1;
      pa1=pa1->next;
     }
    if (pb1->num <= pa1->num)
     {if (ah==pa1)
     ah=pb1;
      else
  pa2->next=pb1;
   pb1=pb1->next;
   pb2->next=pa1;
      pa2=pb2;
   pb2=pb1;
  }
 }while ((pa1->next!=NULL) || (pa1==NULL && pb1!=NULL));
    if ((pb1!=NULL) && (pb1->num>pa1->num) && (pa1->next==NULL))
      pa1->next=pb1;
    return(ah);
 }

void print(struct student *head)  //输出函数
  {struct student  *p;
   printf("There are %d records:  \n",sum);
   p=head;
   if (p !=NULL)
     do
       {printf("%ld %d\n",p->num,p->score);
     p=p->next;
       }while (p !=NULL);
   }

 

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

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

本站文章搜索:

<< 上一篇下一篇 >>

搜索

网站分类

Tags列表

赞助商链接