整理音乐

整理音乐

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description


请用链表完成下面题目要求。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
    char name[20];
    int data;
    struct node *next;
};
struct node *creat(int n)  //建立链表(顺序)
{
    int i;
    struct node *head,*p,*tail;
    head=(struct node *)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
    for(i=0; i<=n-1; i++)
    {
        p=(struct node*)malloc(sizeof(struct node));
        scanf("%s %d",p->name,&p->data);
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
    return head;
};
struct node *merge(struct node *head1,struct node *head2)   //链表归并以及从大->小排序
{
    struct node *p1,*p2,*tail;
    p1=head1->next;
    p2=head2->next;
    tail=head1;
    free(head2);   //去掉第二个头结点
    while(p1&&p2)
    {
        if(p1->data>p2->data)
        {
            tail->next=p1;
            tail=p1;
            p1=p1->next;
        }
        else if(p1->data<p2->data)
        {
            tail->next=p2;
            tail=p2;
            p2=p2->next;
        }
        else
        {
            if(strcmp(p1->name,p2->name)<0)
            {
                tail->next=p1;
                tail=p1;
                p1=p1->next;
            }
            else
            {
                tail->next=p2;
                tail=p2;
                p2=p2->next;
            }
        }
    }
    if(p1)
        tail->next=p1;
    else
        tail->next=p2;
    return head1;
};
void show(struct node *head)
{
    struct node *p;
    p=head->next;
    while(p)
    {
        if(p->next==NULL)
            printf("%s\n",p->name);
        else
            printf("%s ",p->name);
        p=p->next;
    }
}
int main()
{
    int n,m,i;
    struct node *head1,*head2;
    scanf("%d %d",&n,&m);        //输入第一组m,n,head1
    head1=creat(m);
    for(i=2; i<=n; i++)
    {
        scanf("%d",&m);
        head2=creat(m);    //head2与head1比较
        head1=merge(head1,head2);
    }
    show(head1);
    return 0;
}


xiaobai 很喜欢音乐,几年来一直在收集好听的专辑。他有个习惯,每次在听完一首音乐后会给这首音乐打分,而且会隔一段时间给打好分的音乐排一个名次。今天 xiaobai 打开自己的音乐文件夹,发现有很多不同时期打过分的排好序的子音乐文件夹,他想把这些音乐放到一块,组成一个分数有序的序列。由于音乐文件很多,而文件里音乐的数目也是不确定的,怎么帮帮 xiaobai 完成这件工作呢?
   

 

Input

输入数据第一行为一个整数n(n<1000),代表文件夹的数量。接下来是n个文件夹的信息,每个文件夹信息的第一行是一个数字m(m<=10000),代表这个文件夹里有m首歌,后面m行每行一个歌曲名、分数,之间用空格分开。歌曲名称不超过5个字符。

Output

输出一行,为所有音乐组成的一个序列,音乐只输出名字。

如果音乐分数相同则按照音乐名字典序进行排序。

Example Input

34aaa 60aab 50aac 40aad 302kkk 60kkd 593qow 70qwe 60qqw 20

Example Output

qow aaa kkk qwe kkd aab aac aad qqw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值