Update test_hash.h

This commit is contained in:
kyt_2002 2023-10-05 19:01:52 +08:00
parent b20768ff97
commit 685bfb192a
1 changed files with 118 additions and 128 deletions

View File

@ -1,129 +1,119 @@
#ifndef __HASHMAP_H__
/** #define __HASHMAP_H__
* @file: test_hash.h
* @brief: a application of test hash function #include<stdlib.h>
* @version: 3.0 #include<string.h>
* @author: Yao wenying #include<stdio.h>
* @date: 2023/05/26
*/
// 实现数据的基本类型
// 字符串类型
#ifndef __HASHMAP_H__ #define string char *
#define __HASHMAP_H__ #define newString(str) strcpy((char *)malloc(strlen(str) + 1), str)
#define NEW(type) (type *)malloc(sizeof(type))
#include<stdlib.h>
#include<string.h> // 布尔类型
#include<stdio.h> enum _Boolean { True = 1, False = 0 };
typedef enum _Boolean Boolean;
// 实现数据的基本类型 #define let void *
// 字符串类型
#define string char * typedef struct entry {
#define newString(str) strcpy((char *)malloc(strlen(str) + 1), str) let key; // 键
#define NEW(type) (type *)malloc(sizeof(type)) let value; // 值
struct entry * next; // 冲突链表
// 布尔类型 }*Entry;
enum _Boolean { True = 1, False = 0 };
typedef enum _Boolean Boolean; #define newEntry() NEW(struct entry)
#define newEntryList(length) (Entry)malloc(length * sizeof(struct entry))
#define let void *
// 哈希结构
typedef struct entry { typedef struct hashMap *HashMap;
let key; // 键
let value; // 值 #define newHashMap() NEW(struct hashMap)
struct entry * next; // 冲突链表
}*Entry; // 哈希函数类型
typedef int(*HashCode)(HashMap, let key);
#define newEntry() NEW(struct entry)
#define newEntryList(length) (Entry)malloc(length * sizeof(struct entry)) // 判等函数类型
typedef Boolean(*Equal)(let key1, let key2);
// 哈希结构
typedef struct hashMap *HashMap; // 添加键函数类型
typedef void(*Put)(HashMap hashMap, let key, let value);
#define newHashMap() NEW(struct hashMap)
// 获取键对应值的函数类型
// 哈希函数类型 typedef let(*Get)(HashMap hashMap, let key);
typedef int(*HashCode)(HashMap, let key);
// 删除键的函数类型
// 判等函数类型 typedef let(*Remove)(HashMap hashMap, let key);
typedef Boolean(*Equal)(let key1, let key2);
// 清空Map的函数类型
// 添加键函数类型 typedef void(*Clear)(HashMap hashMap);
typedef void(*Put)(HashMap hashMap, let key, let value);
// 判断键值是否存在的函数类型
// 获取键对应值的函数类型 typedef Boolean(*Exists)(HashMap hashMap, let key);
typedef let(*Get)(HashMap hashMap, let key);
typedef struct hashMap {
// 删除键的函数类型 int size; // 当前大小
typedef let(*Remove)(HashMap hashMap, let key); int listSize; // 有效空间大小
HashCode hashCode; // 哈希函数
// 清空Map的函数类型 Equal equal; // 判等函数
typedef void(*Clear)(HashMap hashMap); Entry list; // 存储区域
Put put; // 添加键的函数
// 判断键值是否存在的函数类型 Get get; // 获取键对应值的函数
typedef Boolean(*Exists)(HashMap hashMap, let key); Remove remove; // 删除键
Clear clear; // 清空Map
typedef struct hashMap { Exists exists; // 判断键是否存在
int size; // 当前大小 Boolean autoAssign; // 设定是否根据当前数据量动态调整内存大小,默认开启
int listSize; // 有效空间大小 }*HashMap;
HashCode hashCode; // 哈希函数
Equal equal; // 判等函数 // 迭代器结构
Entry list; // 存储区域 typedef struct hashMapIterator {
Put put; // 添加键的函数 Entry entry; // 迭代器当前指向
Get get; // 获取键对应值的函数 int count; // 迭代次数
Remove remove; // 删除键 int hashCode; // 键值对的哈希值
Clear clear; // 清空Map HashMap hashMap;
Exists exists; // 判断键是否存在 }*HashMapIterator;
Boolean autoAssign; // 设定是否根据当前数据量动态调整内存大小,默认开启
}*HashMap; #define newHashMapIterator() NEW(struct hashMapIterator)
// 迭代器结构 // 默认哈希函数
typedef struct hashMapIterator { static int defaultHashCode(HashMap hashMap, let key);
Entry entry; // 迭代器当前指向
int count; // 迭代次数 // 默认判断键值是否相等
int hashCode; // 键值对的哈希值 static Boolean defaultEqual(let key1, let key2);
HashMap hashMap;
}*HashMapIterator; // 默认添加键值对
static void defaultPut(HashMap hashMap, let key, let value);
#define newHashMapIterator() NEW(struct hashMapIterator)
// 默认获取键对应值
// 默认哈希函数 static let defaultGet(HashMap hashMap, let key);
static int defaultHashCode(HashMap hashMap, let key);
// 默认删除键
// 默认判断键值是否相等 static let defaultRemove(HashMap hashMap, let key);
static Boolean defaultEqual(let key1, let key2);
// 默认判断键是否存在
// 默认添加键值对 static Boolean defaultExists(HashMap hashMap, let key);
static void defaultPut(HashMap hashMap, let key, let value);
// 默认清空Map
// 默认获取键对应值 static void defaultClear(HashMap hashMap);
static let defaultGet(HashMap hashMap, let key);
// 重新构建
// 默认删除键 static void resetHashMap(HashMap hashMap, int listSize);
static let defaultRemove(HashMap hashMap, let key);
// 创建一个哈希结构
// 默认判断键是否存在 HashMap createHashMap(HashCode hashCode, Equal equal);
static Boolean defaultExists(HashMap hashMap, let key);
// 创建哈希结构迭代器
// 默认清空Map HashMapIterator createHashMapIterator(HashMap hashMap);
static void defaultClear(HashMap hashMap);
// 迭代器是否有下一个
// 重新构建 Boolean hasNextHashMapIterator(HashMapIterator iterator);
static void resetHashMap(HashMap hashMap, int listSize);
// 迭代到下一次
// 创建一个哈希结构 HashMapIterator nextHashMapIterator(HashMapIterator iterator);
HashMap createHashMap(HashCode hashCode, Equal equal);
// 释放迭代器内存
// 创建哈希结构迭代器 void freeHashMapIterator(HashMapIterator * iterator);
HashMapIterator createHashMapIterator(HashMap hashMap);
// 迭代器是否有下一个
Boolean hasNextHashMapIterator(HashMapIterator iterator);
// 迭代到下一次
HashMapIterator nextHashMapIterator(HashMapIterator iterator);
// 释放迭代器内存
void freeHashMapIterator(HashMapIterator * iterator);
#endif // !__HASHMAP_H__ #endif // !__HASHMAP_H__