1. 程式人生 > >通話記錄(資料結構)

通話記錄(資料結構)

通話記錄

題目描述

使用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]);
    }
}