用c语言编写程序实现:统计一个整型序列中出现次数最多的整数及其出现次数。
时间: 2023-06-18 12:07:18 浏览: 141
c代码-计算 ab ba的个数
可以使用一个哈希表来实现统计整数出现次数的功能,具体步骤如下:
1. 定义一个哈希表结构体,包含两个成员,一个是整数值,一个是出现次数。
```c
typedef struct {
int val;
int count;
} HashNode;
```
2. 定义一个哈希表数组,用来存储哈希表结构体。数组的大小可以根据实际情况进行调整,这里假设整数值的范围在[0, 100]之间。
```c
#define HASH_SIZE 101
HashNode hashTable[HASH_SIZE];
```
3. 初始化哈希表,将每个哈希表结构体的出现次数初始化为0。
```c
void initHashTable() {
for (int i = 0; i < HASH_SIZE; i++) {
hashTable[i].val = i;
hashTable[i].count = 0;
}
}
```
4. 遍历整型序列,将每个整数对应的哈希表结构体的出现次数加1。
```c
void count(int *arr, int len) {
for (int i = 0; i < len; i++) {
hashTable[arr[i]].count++;
}
}
```
5. 找到出现次数最多的整数及其出现次数。
```c
void findMaxCount() {
int maxCount = 0;
int maxVal = 0;
for (int i = 0; i < HASH_SIZE; i++) {
if (hashTable[i].count > maxCount) {
maxCount = hashTable[i].count;
maxVal = hashTable[i].val;
}
}
printf("出现次数最多的整数是%d,出现次数为%d\n", maxVal, maxCount);
}
```
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define HASH_SIZE 101
typedef struct {
int val;
int count;
} HashNode;
HashNode hashTable[HASH_SIZE];
void initHashTable() {
for (int i = 0; i < HASH_SIZE; i++) {
hashTable[i].val = i;
hashTable[i].count = 0;
}
}
void count(int *arr, int len) {
for (int i = 0; i < len; i++) {
hashTable[arr[i]].count++;
}
}
void findMaxCount() {
int maxCount = 0;
int maxVal = 0;
for (int i = 0; i < HASH_SIZE; i++) {
if (hashTable[i].count > maxCount) {
maxCount = hashTable[i].count;
maxVal = hashTable[i].val;
}
}
printf("出现次数最多的整数是%d,出现次数为%d\n", maxVal, maxCount);
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 3, 2, 1, 2, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7};
int len = sizeof(arr) / sizeof(int);
initHashTable();
count(arr, len);
findMaxCount();
return 0;
}
```
阅读全文