C语言散列表 --电话聊天狂人

通过分析大量手机用户通话记录,利用哈希表(散列表)数据结构,找到通话次数最多的‘聊天狂人’。程序首先读取通话记录条数N,然后逐条处理记录,使用散列表存储每个手机号码及其对应的通话次数。最终,输出通话次数最多的号码及其通话次数,若存在多个狂人,则输出最小号码及并列人数。

给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。

输入格式:
输入首先给出正整数N(≤10​00000​​),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。

输出格式:
在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。

输入样例:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832

输出样例:
13588625832 3

My code:

#include<stdio.h>
#include<math.h>
#include<stdbool.h>

#define KEYLENGTH 11 //phone number has 11 digits
typedef char ElementType[KEYLENGTH+1];   //string end with '\0', so do not forget +1
typedef int Index;

typedef struct LNode *PtrToLNode;
struct LNode
{
   
   
    ElementType Data;
    PtrToLNode Next;
    int Count;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;

typedef struct TblNode *HashTable;
struct TblNode
{
   
   
    int TableSize;
    List Heads;
};
//typedef PtrToTblNode HashTable;

int NextPrime(int N);
HashTable CreateTable(int N);
int Hash(int Key, int p);  //使用简单的除留余数法 h(Key) = Key(最后5位) mod p
Position Find(HashTable H, ElementType Key);
bool Insert(HashTable H, ElementType Key);
ScanfAndOutput(HashTable H);
void Destroy(HashTable H);     // remember to destroy HashTable in the end, be a good programmer

int main()
{
   
   
    int N,i;
    HashTable H;
    ElementType Key;
    scanf("%d", &N);
    H = CreateTable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值