博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【2053】整理音乐 SDUTOJ
阅读量:7072 次
发布时间:2019-06-28

本文共 2355 字,大约阅读时间需要 7 分钟。



整理音乐

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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

输入

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

输出

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

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

示例输入

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

示例输出

qow aaa kkk qwe kkd aab aac aad qqw
 
 
 
 
 
提示:本题主要运用链表的归并解决问题
 
#include 
#include
#include
struct node{    int score;    char name[20];    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
name,&p->score);        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->score > p2->score)        {            tail->next=p1;            tail=p1;            p1=p1->next;        }        else if(p1->score < p2->score)        {            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;};int main(){    int n,i,m;    struct node *head1,*head2;    scanf("%d %d",&n,&m);    head1=creat(m);    for(i=2; i<=n; i++)    {        scanf("%d", &m);        head2=creat(m);        head1 = merge(head1, head2);    }    while (head1->next!=NULL)    {        if(head1->next->next!=NULL)            printf("%s ",head1->next->name);        else            printf("%s\n",head1->next->name);        head1=head1->next;    }    free(head1);    return 0;}

转载于:https://www.cnblogs.com/jiangyongy/p/3971702.html

你可能感兴趣的文章
使用Python进行并发编程
查看>>
自动机器学习简述(AutoML)
查看>>
iPhone X适配
查看>>
虚拟化笔记
查看>>
[vim]-vim基础
查看>>
JAVA 8入门(一)Lambda表达式
查看>>
resin集成eclipse开发
查看>>
将Excel文件中的数据导入到mysql【Excel中拼sql】
查看>>
H5移动端知识点
查看>>
【js与jquery】网站更换皮肤功能
查看>>
Ubuntu ssh连接root验证错误
查看>>
Android WebView 详解(持续更新)
查看>>
ElasticSearch动态添加节点及相关配置项
查看>>
Android studio 使用心得(十)---android studio 多渠道打包(三)
查看>>
数据库选型的一些看法
查看>>
PHP接口&抽象类验证笔记
查看>>
Spark Streaming源码解读之No Receivers
查看>>
使用背景图的div宽高自适应
查看>>
sql注入工具
查看>>
MongoDB 开启用户认证登录
查看>>