www.pudn.com > zb.rar > 001.C


#include "stdio.h" 
#include "conio.h" 
#define  NULL     0 
struct list 
{int data; 
 struct list *next; 
}; 
typedef struct list lnode; 
typedef lnode *list; 
 
list create1()     /*建立链表*/ 
{list L,p; 
 int data; 
 L=(list)malloc(sizeof(lnode)); 
 L->next=NULL; 
 printf("please input the data for a list(end by -999):\n"); 
 do{p=(list)malloc(sizeof(lnode)); 
    scanf("%d",&data); 
    p->data=data; 
    p->next=L->next; 
    L->next=p; 
   } 
 while(data!=-999); 
 L->next=p->next; 
 return(L); 
} 
 
list fpre1(list p,list L)               /*在L中找P的前趋*/ 
{list q; 
 q=L; 
 while(q->next!=p) 
 q=q->next; 
 return(q); 
} 
 
list ylist1(list L)                /*找链表中从L开始的最小结点*/ 
{list p,min; 
 p=L; 
 min=L; 
 while(p->next!=NULL) 
     {p=p->next; 
      if(p->datadata) 
         min=p; 
     } 
return(min); 
} 
 
 
list xlist1(list L)            /*排序链表(按递增排序)*/ 
{list min,q,i,p; 
 p=L->next; 
 i=L; 
 if(p->data==NULL) 
    printf("the list is empty\n"); 
 else 
    { 
     do{ 
        min=ylist1(p); 
        q=fpre1(min,L); 
        q->next=min->next; 
        min->next=i->next; 
        i->next=min; 
        i=min; 
        p=i->next; 
       } 
     while(i->next->data!=NULL); 
    } 
return(L); 
} 
 
list reround(list L)          /*链表倒置*/ 
{list q,p,s; 
 p=L; 
 while(p->next!=NULL) 
 p=p->next; 
 s=p; 
 q=fpre1(p,L); 
 while(q!=L) 
 {p->next=q; 
  p=q; 
  q=fpre1(q,L); 
  } 
 p->next=NULL; 
 L->next=s; 
 return(L); 
} 
 
list mergelist1(list La,list Lb)             /*将La和Lb合并为链表Lc*/ 
{list pa,pb,pc,Lc; 
 pa=La->next; 
 pb=Lb->next; 
 pc=Lc=La; 
 while((pa->data!=NULL)&&(pb->data!=NULL)) 
    {if(pa->data>=pb->data) 
        {pc->next=pa; 
         pc=pa; 
         pa=pa->next; 
         } 
     else 
        {pc->next=pb; 
         pc=pb; 
         pb=pb->next; 
         } 
     } 
  if(pa->data==NULL) 
    pc->next=pb; 
  else 
    pc->next=pa; 
return(Lc); 
} 
 
 
void plist1(list L)               /*打印链表*/ 
{list p; 
 p=L; 
 if(p->next->data==NULL) 
    printf("the list is empty\n"); 
 else 
    {p=p->next; 
     while(p->next!=NULL) 
     {printf("%d\t",p->data); 
      p=p->next; 
     } 
     printf("%d\n",p->data); 
    } 
} 
 
 
 
LIST() 
{list La,Lb,Lc,pa,pb,qa,qb; 
 La=create1(); 
 pa=xlist1(La); 
 printf("La:\t"); 
 plist(pa); 
 qa=reround(pa); 
 Lb=create1(); 
 pb=xlist1(Lb); 
 printf("Lb:\t"); 
 plist1(pb); 
 qb=reround(pb); 
 Lc=mergelist1(qa,qb); 
 printf("Lc:\t"); 
 plist(Lc); 
 
 getch(); 
}