c语言定义一个map
时间: 2024-10-01 18:00:29 浏览: 38
在C语言中,标准库并没有直接提供像其他高级语言那样的映射结构(如哈希表、关联数组等),但我们可以使用数组结合指针来模拟一种类似于“map”的功能。其中最常用的是链表实现的哈希表,例如使用`struct`定义键值对,并用`void**`类型的指针数组来存储这些节点。
下面是一个简化的例子,使用一个数组和链表作为“map”实现:
```c
#include <stdlib.h>
// 定义键值对的结构体
typedef struct Node {
void* key; // 键
void* value; // 值
struct Node* next; // 链接下一个元素
} Node;
// 假设我们有一个固定大小的数组作为哈希表
#define TABLE_SIZE 100
Node table[TABLE_SIZE] = { .next = NULL }; // 初始化所有元素为NULL
// 插入键值对
void insert_map(void* key, void* value) {
int hash_index = (int)hash_function(key, TABLE_SIZE); // 哈希函数计算索引
Node* newNode = malloc(sizeof(Node)); // 分配新的节点内存
newNode->key = key;
newNode->value = value;
newNode->next = table[hash_index];
table[hash_index] = newNode;
}
// 查找键对应的值
void* find_value(void* key) {
int hash_index = (int)hash_function(key, TABLE_SIZE);
Node* current = table[hash_index];
while (current != NULL && current->key != key) {
current = current->next;
}
return current ? current->value : NULL; // 返回找到的值,如果未找到则返回NULL
}
阅读全文