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

来源:互联网 发布:侏罗纪世界4 知乎 编辑:程序博客网 时间:2024/05/22 13:30


#include<stdio.h>#include<malloc.h>#define NULL 0#define LEN sizeof(struct student)struct student{long num;float score;struct student *next;};int n,sum=0;struct student lista,listb;struct student *creat(void){struct student *head;struct student *p1,*p2;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,%f",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n++;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(struct student*)malloc(LEN);scanf("%ld,%f",&p1->num,&p1->score);}p2->next=NULL;return head;} int print(struct student *head){struct student *p;printf("\nNow ,These %d records are:\n",n);p=head;if(head!=NULL)do{printf("%ld,%5.1f\n",p->num,p->score);p=p->next;}while(p!=NULL);}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;elsepa2->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;}int main(){struct student *ahead ,*bhead,*abh;long del_num;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;}


0 0
原创粉丝点击