C語言中hash表的結(jié)構(gòu)設(shè)計(jì)

小樊
83
2024-08-08 04:09:45
欄目: 編程語言

在C語言中,可以使用結(jié)構(gòu)體和指針來實(shí)現(xiàn)hash表的設(shè)計(jì)。以下是一個(gè)簡(jiǎn)單的hash表結(jié)構(gòu)設(shè)計(jì)示例:

#define SIZE 100

typedef struct Node {
    int key;
    int value;
    struct Node* next;
} Node;

typedef struct HashTable {
    Node* table[SIZE];
} HashTable;

// 初始化hash表
void initHashTable(HashTable* ht) {
    for (int i = 0; i < SIZE; i++) {
        ht->table[i] = NULL;
    }
}

// 哈希函數(shù),將key映射到數(shù)組索引
int hashFunction(int key) {
    return key % SIZE;
}

// 插入鍵值對(duì)
void insert(HashTable* ht, int key, int value) {
    int index = hashFunction(key);
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->key = key;
    newNode->value = value;
    newNode->next = NULL;

    if (ht->table[index] == NULL) {
        ht->table[index] = newNode;
    } else {
        Node* current = ht->table[index];
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}

// 查找鍵對(duì)應(yīng)的值
int find(HashTable* ht, int key) {
    int index = hashFunction(key);
    Node* current = ht->table[index];

    while (current != NULL) {
        if (current->key == key) {
            return current->value;
        }
        current = current->next;
    }

    return -1;  // 表示未找到
}

以上示例中,我們定義了一個(gè)Node結(jié)構(gòu)體用來存儲(chǔ)鍵值對(duì),以及一個(gè)HashTable結(jié)構(gòu)體用來存儲(chǔ)hash表。在HashTable結(jié)構(gòu)體中,使用一個(gè)指針數(shù)組來表示hash表的存儲(chǔ)空間。

我們還定義了一些操作函數(shù),如initHashTable用來初始化hash表,hashFunction用來計(jì)算key的哈希值,insert用來插入鍵值對(duì),find用來查找鍵對(duì)應(yīng)的值。通過這些操作函數(shù),可以方便地對(duì)hash表進(jìn)行操作。

0