利用散列表找出出现次数最多的元素的C语言代码
时间: 2024-10-02 07:03:30 浏览: 34
在C语言中,我们可以使用散列表(哈希表)以及一个数组或链表来找出出现次数最多的元素。以下是一个简单的示例,假设我们有一个整数数组:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int key; // 键值,这里用于存储数组元素
int count; // 记录元素出现的次数
} HashEntry;
// 创建并初始化散列表
HashEntry* createHashTable() {
HashEntry* hashTable = (HashEntry*)malloc(MAX_SIZE * sizeof(HashEntry));
for (int i = 0; i < MAX_SIZE; i++) {
hashTable[i].key = -1;
hashTable[i].count = 0;
}
return hashTable;
}
// 插入元素到散列表
void insertIntoHashTable(int value, HashEntry* hashTable) {
int index = abs(value) % MAX_SIZE; // 按元素值取模作为索引
if (hashTable[index].key == value) {
hashTable[index].count++;
} else {
hashTable[index].key = value;
hashTable[index].count = 1;
}
}
// 找出出现次数最多的元素
int findMaxFrequencyElement(HashEntry* hashTable) {
int maxCount = 0;
int mostFrequentKey = -1;
for (int i = 0; i < MAX_SIZE; i++) {
if (hashTable[i].count > maxCount) {
maxCount = hashTable[i].count;
mostFrequentKey = hashTable[i].key;
}
}
return mostFrequentKey;
}
// 示例用法
int main() {
HashEntry* hashTable = createHashTable();
int arr[] = {1, 2, 3, 2, 3, 4, 5, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++) {
insertIntoHashTable(arr[i], hashTable);
}
int mostCommon = findMaxFrequencyElement(hashTable);
printf("出现次数最多的元素是: %d\n", mostCommon);
free(hashTable); // 释放内存
return 0;
}
```
这个程序首先创建一个散列表,然后遍历输入数组,将每个元素插入到相应的桶中。最后,通过遍历散列表找到出现次数最多的元素。
阅读全文