通話記錄(資料結構)
阿新 • • 發佈:2018-11-09
通話記錄
題目描述
使用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]); } }