zoukankan      html  css  js  c++  java
  • SDUT 2053 整理音乐

    此题还是上机考试题,也算是水题吧。注意要求是用链表做。

    注意换行getchar()。然后就是字典序排列用字符串函数。排序用链表的归并。

    归并后将它给一个指针存起来。

    题目描述


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

    输入

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

    输出

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

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

    示例输入

    3
    4
    aaa 60
    aab 50
    aac 40
    aad 30
    2
    kkk 60
    kkd 59
    3
    qow 70
    qwe 60
    qqw 20
    

    示例输出

    qow aaa kkk qwe kkd aab aac aad qqw
    View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 struct node
     5 {
     6     int data;
     7     char name [200];
     8     struct node*next;
     9 };
    10 struct node*creat(int n)
    11 {
    12     struct node*head,*p,*tail;
    13     int i;
    14     head=(struct node*)malloc(sizeof(struct node));
    15     head->next=NULL;
    16     tail=head;
    17     for(i=1;i<=n;i++)
    18     {
    19         p=(struct node*)malloc(sizeof(struct node));
    20         scanf("%s",&p->name);
    21         scanf("%d",&p->data);
    22         p->next=NULL;
    23         tail->next=p;
    24         tail=p;
    25     }
    26     return head;
    27 
    28 }
    29 void list(struct node*r)
    30 {
    31     struct node*m;
    32     m=r;
    33     while(m->next->next!=NULL)
    34     {
    35         printf("%s ",m->next->name);
    36         m=m->next;
    37     }
    38     printf("%s\n",m->next->name);
    39 }
    40 struct node*merge(struct node*head1,struct node*head2)
    41 {
    42     struct node *p1,*p2,*tail;
    43     p1=head1->next;
    44     p2=head2->next;
    45     tail=head1;
    46     free (head2);
    47     while(p1&&p2)
    48 
    49         if(p1->data<p2->data)
    50         {
    51             tail->next=p2;
    52             tail=p2;
    53             p2=p2->next;
    54         }
    55         else if(p1->data==p2->data&&strcmp(p1->name,p2->name)>0)
    56         {
    57             tail->next=p2;
    58             tail=p2;
    59             p2=p2->next;
    60         }
    61         else
    62         {
    63             tail->next=p1;
    64             tail=p1;
    65             p1=p1->next;
    66         }
    67         if(p1)
    68         tail->next=p1;
    69         else
    70         tail->next=p2;
    71         return head1;
    72 }
    73 int main()
    74 {
    75     int n,m;
    76     scanf("%d",&m);
    77     struct node*head1,*head2,*l;
    78     scanf("%d",&n);
    79     getchar();
    80     head1=creat(n);
    81     m--;
    82     while(m--)
    83     {
    84         scanf("%d",&n);
    85         getchar();
    86         head2=creat(n);
    87         l=merge(head1,head2);
    88     }
    89     list(l);
    90     return 0;
    91 }
  • 相关阅读:
    《java.util.concurrent 包源码阅读》10 线程池系列之AbstractExecutorService
    《java.util.concurrent 包源码阅读》09 线程池系列之介绍篇
    《java.util.concurrent 包源码阅读》08 CopyOnWriteArrayList和CopyOnWriteArraySet
    《java.util.concurrent 包源码阅读》07 LinkedBlockingQueue
    《java.util.concurrent 包源码阅读》06 ArrayBlockingQueue
    《java.util.concurrent 包源码阅读》05 BlockingQueue
    NewBluePill源码学习 <一>
    深入理解Windows X64调试
    x64 结构体系下的内存寻址
    Windows PAE 寻址
  • 原文地址:https://www.cnblogs.com/timeship/p/2519800.html
Copyright © 2011-2022 走看看