编辑代码

#include <stdio.h>
#define SIZE 1000

//1.定义散列表的数据结构:首先需要定义一个散列表的数据结构,
//包括散列表的大小、存储数据的数组、哈希函数等。
typedef struct {
    int key;
    int value;
} Entry;

typedef struct {
    Entry *entries[SIZE];
} HashTable;

//2.实现哈希函数:哈希函数用于将投票的内容映射到散列表的索引位置,可以使用简单的取模运算来实现。
int hash(int key) {
    return key % SIZE;
}

//3.初始化散列表:在主函数中初始化散列表,将所有索引位置的指针初始化为空。
void initHashTable(HashTable *ht) {
    for (int i = 0; i < SIZE; i++) {
        ht->entries[i] = NULL;
    }
}

//4.插入投票数据:实现一个函数用于向散列表中插入投票数据,
//如果该投票已经存在,则更新投票数,否则插入新的投票数据。
void insert(HashTable *ht, int key, int value) {
    int index = hash(key);
    while (ht->entries[index] != NULL && ht->entries[index]->key != key) {
        index = (index + 1) % SIZE;
    }
    if (ht->entries[index] != NULL) {
        ht->entries[index]->value += value;
    } else {
        Entry *newEntry = (Entry*)malloc(sizeof(Entry));
        newEntry->key = key;
        newEntry->value = value;
        ht->entries[index] = newEntry;
    }
}

//5.查询投票数据:实现一个函数用于查询投票数据,
//根据投票的内容找到对应的索引位置,返回投票数。
int search(HashTable *ht, int key) {
    int index = hash(key);
    while (ht->entries[index] != NULL && ht->entries[index]->key != key) {
        index = (index + 1) % SIZE;
    }
    if (ht->entries[index] != NULL) {
        return ht->entries[index]->value;
    } else {
        return 0;
    }
}

int main () {
    HashTable ht;
    initHashTable(&ht);

    // 插入投票数据
    insert(&ht, 1001, 1);
    insert(&ht, 1002, 2);
    insert(&ht, 1001, 1);
    insert(&ht, 1003, 3);

    // 查询投票数据
    printf("投票1001的数量: %d\n", search(&ht, 1001));
    printf("投票1002的数量: %d\n", search(&ht, 1002));
    printf("投票1003的数量: %d\n", search(&ht, 1003));
    return 0;
}