sdut.acm2012级《程序设计基础Ⅱ)》_链表 金牌、银牌、铜牌


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
    char name[30];
    int score;
    struct node *next;
} lian,*list;
lian pai[9000];
int comp(const void *p1, const void *p2)
{
    return ( *(const list)p2).score - (*(const list)p1).score;
}
int main()
{
    int n,i,j,d,g,o=0;
    char c,s1[30];
    scanf("%d",&n);
    lian *head,*tail,*p,*q,*t;
    memset(pai,0,sizeof(pai));
    head=&pai[0];
    o++;
    head->name[0]='0';
    head->score=1<<30;
    head->next=NULL;
    tail=head;
    while(n--)
    {
        p=&pai[o];
        o++;
        scanf("%s%d",&p->name,&p->score);
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
    getchar();
    while(scanf("%c",&c))
    {
        if(c=='A')
        {
            p=&pai[o];
            o++;
            scanf("%s%d",&p->name,&p->score);
            getchar();
        }
        else if(c=='Q')
        {
            scanf("%s",s1);
            for(i=0;i<o;i++)
            {
                if(strcmp(pai[i].name,s1)==0)
                {
                    pai[i].score=-1;
                    break;
                }
            }
            getchar();
        }
        else if(c=='C')
        {
            scanf("%s%d",s1,&d);
            for(i=0;i<o;i++)
            {
                if(strcmp(pai[i].name,s1)==0)
                {
                    pai[i].score+=d;
                    break;
                }
            }
            getchar();
        }
        else if(c=='S')
        {
            qsort(pai,o,sizeof(lian),comp);
            for(i=1;i<o;i++)
            {
                if(pai[i].score==-1)
                {
                    break;
                }
                printf("%s %d\n",pai[i].name,pai[i].score);
            }
            i=o;
            printf("\n");
            getchar();
        }
        else if(c=='O')
        {
            qsort(pai,o,sizeof(lian),comp);
            for(i=0;i<o;i++)
            {
                pai[i].next=&pai[i+1];
            }
            p=&pai[1];
            i=0;
            printf("#1 : %s",p->name);
            i=p->score;
            p=p->next;
            while(p&&p->score==i)
            {
                printf(" %s",p->name);
                p=p->next;
            }
            printf("\n");
            printf("#2 :");
            if(p&&p->score!=-1)
            {
                printf(" %s",p->name);
                p=p->next;
            }
            if(p&&p->score!=-1)
            {
                printf(" %s",p->name);
                i=p->score;
                p=p->next;
            }
            while(p&&p->score==i&&p->score!=-1)
            {
                printf(" %s",p->name);
                p=p->next;
            }
            printf("\n");
            printf("#3 :");
            if(p)
            {

                j=0;
                while(p&&j!=3&&p->score!=-1)
                {
                    printf(" %s",p->name);
                    i=p->score;
                    p=p->next;
                    j++;
                }
                if(p&&p->score!=-1)
                {
                    while(p->score==i&&p!=NULL)
                    {
                        printf(" %s",p->name);
                        p=p->next;
                    }
                }
            }
            printf("\n");
            break;
        }
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值