SDUT-ACM 2053整理音乐

 

题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2053

应用:创建单链表,合并单链表,打印单链表

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
     int data;
     char name [200];
     struct node *next;
}LinkList;

LinkList *creat(int n)
{
     LinkList *head,*p,*tail;
     int i;
     head=(LinkList *)malloc(sizeof(LinkList));
     head->next=NULL;
     tail=head;
     for(i=0;i<n;i++)
     {
         p=(LinkList *)malloc(sizeof(LinkList));
         scanf("%s",&p->name);
         scanf("%d",&p->data);
         p->next=NULL;
         tail->next=p;
         tail=p;
     }
     return head;
 
}

void displayall(LinkList *L)
{

	LinkList *p;
	p=L->next;
	while(p!=NULL)
	{
		if(p->next!=NULL) printf("%s ",p->name);
		else printf("%s\n",p->name);
		p=p->next;
	}

}

LinkList *merge(LinkList *L1,LinkList *L2)
{
     LinkList *p,*q,*tail;
     p=L1->next;
     q=L2->next;
     tail=L1;
     while(p&&q)
 
         if(p->data<q->data)
         {
             tail->next=q;
             tail=q;
             q=q->next;
         }
         else if(p->data==q->data && strcmp(p->name,q->name)>0)
         {
             tail->next=q;
             tail=q;
             q=q->next;
         }
         else
         {
             tail->next=p;
             tail=p;
             p=p->next;
         }
         if(p)  tail->next=p;
         else  tail->next=q;
         return L1;
 }

 int main()
 {
     int n,m;
     scanf("%d",&m);
     LinkList *L1,*L2,*L;
     scanf("%d\n",&n);
     L1=creat(n);
     m--;
     while(m--)
     {
         scanf("%d\n",&n);
         L2=creat(n);
         L=merge(L1,L2);
     }
     displayall(L);
     return 0;
 }

  

 

posted @ 2012-08-01 19:49  刘壮  阅读(425)  评论(0编辑  收藏  举报