11 雜湊1 電話聊天狂人 25分

2021-08-01 06:40:26 字數 1705 閱讀 6155

給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。

輸入首先給出正整數nn

(≤10^5

),為聯絡歷史條數。隨後n

行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。

在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中最小的號碼及其通話次數,並且附加給出並列狂人的人數。

4

13005711862 13588625832

13505711862 13088625832

13588625832 18087925832

15005713862 13588625832

13588625832 3

注意:1、狂人不唯一,要輸出最小的號碼,要另外輸出狂人的人數

2、用完的雜湊表的空間要釋放(好習慣,雖然不釋放也能通過)

#define maxtablesize 1000000 //允許開闢的最大雜湊表長度

#define maxd 5 //參與雜湊對映計算的字元個數

typedef char elementtype[keylength + 1];

typedef int index; //雜湊位址型別

//單鏈表定義

typedef struct lnode *ptrtolnode;

struct lnode ;

typedef ptrtolnode position;

typedef ptrtolnode list;

//雜湊表結點定義

typedef struct tblnode *hashtable; //雜湊表型別

struct tblnode ;

int nextprime( int n )

return p;

}hashtable createtable ( int tablesize )

return h;

}index hash ( const char *key, int tablesize )

position find ( hashtable h, elementtype key )

bool insert ( hashtable h, elementtype key )

p->count++;

return false; }}

void destroytable( hashtable h )

} free( h->heads ); //釋放頭結點陣列

free( h ); //釋放雜湊表頭結點

}void scanandoutput ( hashtable h )

else if ( ptr->count == maxcnt )

ptr = ptr->next;

} }printf("%s %d", minphone, maxcnt);

if ( pcnt > 1 )

printf(" %d", pcnt);

printf("\n");

}int main ()

scanandoutput( h );

destroytable( h );

system("pause");

return 0;

}

11 雜湊1 電話聊天狂人 25 分

給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...

11 雜湊1 電話聊天狂人 25 分

給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 10 5 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則...

11 雜湊1 電話聊天狂人 25 分

給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入首先給出正整數n 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。在一行中給出聊天狂人的手機號碼及其通話次數,其間以空格分隔。如果這樣的人不唯一,則輸出狂人中...