十一 雜湊查詢 電話聊天狂人

2021-10-08 04:13:17 字數 1936 閱讀 6878

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

輸入格式:

輸入首先給出正整數n(≤10​5​​ ),為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,這裡只列出撥出方和接收方的11位數字構成的手機號碼,其中以空格分隔。

輸出格式:

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

輸入樣例:

4

13005711862

13588625832

13505711862

13088625832

13588625832

18087925832

15005713862

13588625832

輸出樣例:

#include

#include

#include

#include

#include

#define keylength 11

#define maxtablesize 100000

#define maxd 5

typedef

char elementtype[keylength+1]

;/* char陣列結尾是/0 */

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

(int key,

int tablesize)

position find

( hashtable h, elementtype key )

bool insert

( hashtable h, elementtype key )

else

}scanfandoutput

(hashtable h)

else

if(ptr->count == maxcnt)

ptr = ptr->next;}}

printf

("%s %d"

,minphone,maxcnt);if

(pcnt>1)

printf

(" %d"

,pcnt);}

void

destroytable

(hashtable h)

}free

(h->heads)

;free

(h);

}int

main()

scanfandoutput

(h);

destroytable

(h);

return0;

}

將**號碼的後五位作為關鍵字,用atoi函式轉化成五位int型整數,取餘法獲得位置,解決衝突的方法是分離鏈結法。

destroytable函式先free頭結點後連線的所有節點,然後free頭結點陣列,最後free整個h。

演算法 雜湊1 電話聊天狂人

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

11 雜湊1 電話聊天狂人

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

11 雜湊1 電話聊天狂人

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