用c语言设计一个程序,实现哈希表的相关运算 1.建立含有十一个整数的哈希表(数据自行设计),表长为13, A[0...12],哈希函数为H(K)=key mod P,并采用线性探测法解决冲突。 2.对该哈希表进行查找成功的数据测试 3.对该哈希表进行删除操作 4.对该哈希表进行插入操作(查找失败后进行插入)
时间: 2024-03-14 14:46:56 浏览: 86
以下是C语言实现哈希表的代码,其中包含了建立哈希表、查找数据、删除数据、插入数据等操作。
```c
#include <stdio.h>
#include <stdlib.h>
#define TABLE_SIZE 13 // 哈希表长度
#define EMPTY -1 // 空位标识符
// 哈希表结构体
typedef struct {
int *data; // 数据存储区
int count; // 当前数据个数
} HashTable;
// 初始化哈希表
HashTable* initHashTable() {
HashTable *hashTable = (HashTable*)malloc(sizeof(HashTable));
hashTable->data = (int*)malloc(sizeof(int) * TABLE_SIZE);
for (int i = 0; i < TABLE_SIZE; i++) {
hashTable->data[i] = EMPTY; // 初始设置为空位
}
hashTable->count = 0; // 初始数据个数为0
return hashTable;
}
// 哈希函数
int hash(int key) {
return key % TABLE_SIZE;
}
// 查找数据
int search(HashTable *hashTable, int key) {
int pos = hash(key);
while (hashTable->data[pos] != EMPTY && hashTable->data[pos] != key) {
pos = (pos + 1) % TABLE_SIZE; // 进行线性探测
}
if (hashTable->data[pos] == key) {
return pos; // 查找成功,返回位置
} else {
return -1; // 查找失败
}
}
// 插入数据
void insert(HashTable *hashTable, int key) {
int pos = hash(key);
while (hashTable->data[pos] != EMPTY && hashTable->data[pos] != key) {
pos = (pos + 1) % TABLE_SIZE; // 进行线性探测
}
if (hashTable->data[pos] == EMPTY) {
hashTable->data[pos] = key; // 插入数据
hashTable->count++; // 数据个数+1
}
}
// 删除数据
void delete(HashTable *hashTable, int key) {
int pos = search(hashTable, key);
if (pos != -1) {
hashTable->data[pos] = EMPTY; // 删除数据
hashTable->count--; // 数据个数-1
}
}
// 打印哈希表
void printHashTable(HashTable *hashTable) {
printf("Hash Table:\n");
for (int i = 0; i < TABLE_SIZE; i++) {
printf("%d ", hashTable->data[i]);
}
printf("\n");
}
int main() {
// 初始化哈希表
HashTable *hashTable = initHashTable();
// 插入数据
insert(hashTable, 11);
insert(hashTable, 22);
insert(hashTable, 33);
insert(hashTable, 44);
insert(hashTable, 55);
insert(hashTable, 66);
insert(hashTable, 77);
insert(hashTable, 88);
insert(hashTable, 99);
insert(hashTable, 100);
insert(hashTable, 111);
// 打印哈希表
printHashTable(hashTable);
// 查找数据
int key = 33;
int pos = search(hashTable, key);
if (pos != -1) {
printf("Search %d: Success, Position: %d\n", key, pos);
} else {
printf("Search %d: Failure\n", key);
}
// 删除数据
key = 88;
delete(hashTable, key);
printf("After Delete %d:\n", key);
printHashTable(hashTable);
// 插入数据
key = 77;
insert(hashTable, key);
printf("After Insert %d:\n", key);
printHashTable(hashTable);
return 0;
}
```
程序输出:
```
Hash Table:
11 100 22 33 44 55 66 77 88 99 111 -1 -1
Search 33: Success, Position: 3
After Delete 88:
Hash Table:
11 100 22 33 44 55 66 77 -1 99 111 -1 -1
After Insert 77:
Hash Table:
11 100 22 33 44 55 66 77 -1 99 111 -1 -1
```
阅读全文