通话记录(数据结构)

通话记录

题目描述

使用3个队列,分别保留手机上最近10个,(0)未接来电、(1)已接来电、(2)已拨电话。
输入
全部通话记录,每行一条记录。
每条记录包含两个数字,第一个数代表记录类型,第二个数代表手机号码。
输出
分3列输出未接来电、已接来电、已拨电话。
列之间用空格分割,后接电话在最先输出,不足10条用0占位。

分析:

如过每个队列的数据大于10,则需要区分考虑。博主,在此题中,采用一直保存下来,到最后判断是不是数据大于10,分情况输出!需注意:后接电话在最先输出,不足10条用0占位。

#include"string.h"
#include"math.h"
int main()
{
    char a[13];
    char a0[1000][12];
    char a1[1000][12];
    char a2[1000][12];  //定义数组足够大,以至于能够保存足够多的数据,此方法极傻。
    int i,j,k,s,x,y,z,a01,a11,a21,t1,t2,t3;
    a01=a11=a21=0;
    for(i=0; i<10; i++)
    {
        a0[i][0]='0';
        a0[i][1]='\0';
        a1[i][0]='0';
        a1[i][1]='\0';
        a2[i][0]='0';
        a2[i][1]='\0';
    }//若数据不足10个,则要输出0,博主在此先将前10个数据赋值为0,为下续更好判断
    a0[10][0]='1';
    a1[10][0]='1';
    a2[10][0]='1';
    while(~scanf("%d%s",&x,a))//一直输入直到文件尾,或者自行结束
    {
        if(x==0)//分情况保存至不同数组
            strcpy(a0[a01++],a);
        else if(x==1)
            strcpy(a1[a11++],a);
        else if(x==2)
            strcpy(a2[a21++],a);
        /* if(a01==10)
           a01=0;
         if(a11==10)
           a11=0;
         if(a21==10)
           a21=0;*/

    }
    t1=a01-1;//此为后续判断是有10个数据
    t2=a11-1;
    t3=a21-1;
    if(a0[9][0]=='0'&&a0[10][0]=='1')//若不足10个则先置换位置
        for(i=0,a01--; i<a01; i++,a01--)
        {
            strcpy(a,a0[i]);
            strcpy(a0[i],a0[a01]);
            strcpy(a0[a01],a);
        }
    if(a1[9][0]=='0'&&a1[10][0]=='1')
        for(i=0,a11--; i<a11; i++,a11--)
        {
            strcpy(a,a1[i]);
            strcpy(a1[i],a1[a11]);
            strcpy(a1[a11],a);
        }
    if(a2[9][0]=='0'&&a2[10][0]=='1')
        for(i=0,a21--; i<a21; i++,a21--)
        {
            strcpy(a,a2[i]);
            strcpy(a2[i],a2[a21]);
            strcpy(a2[a21],a);
        }
    for(i=0; i<10; i++)//分情况输出,数据量大于10的和不大于10的
    {
        if(t1>=10)
            printf("%s ",a0[t1-9+i]);
        else
            printf("%s ",a0[i]);
        if(t2>=10)
            printf("%s ",a1[t2-9+i]);
        else
            printf("%s ",a1[i]);
        if(t3>10)
            printf("%s ",a2[t3-9+i]);
        else
            printf("%s ",a2[i]);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43506138/article/details/83748157