add test_hash
This commit is contained in:
parent
d8021b55f8
commit
9a682a0ca0
|
@ -239,6 +239,10 @@ menu "test app"
|
||||||
menuconfig USER_TEST_TIMER
|
menuconfig USER_TEST_TIMER
|
||||||
bool "Config test soft timer"
|
bool "Config test soft timer"
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
menuconfig USER_TEST_HASH
|
||||||
|
bool "Config test hash"
|
||||||
|
default n
|
||||||
|
|
||||||
endif
|
endif
|
||||||
endmenu
|
endmenu
|
||||||
|
|
|
@ -101,5 +101,9 @@ ifeq ($(CONFIG_ADD_XIZI_FEATURES),y)
|
||||||
SRC_FILES += test_timer.c
|
SRC_FILES += test_timer.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_USER_TEST_HASH),y)
|
||||||
|
SRC_FILES += test_hash/test_hash.c
|
||||||
|
endif
|
||||||
|
|
||||||
include $(KERNEL_ROOT)/compiler.mk
|
include $(KERNEL_ROOT)/compiler.mk
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
### 截图和测试流程记录
|
||||||
|

|
Binary file not shown.
After Width: | Height: | Size: 1.8 MiB |
|
@ -0,0 +1,132 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 AIIT XUOS Lab
|
||||||
|
* XiUOS is licensed under Mulan PSL v2.
|
||||||
|
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||||
|
* You may obtain a copy of Mulan PSL v2 at:
|
||||||
|
* http://license.coscl.org.cn/MulanPSL2
|
||||||
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||||
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||||
|
* See the Mulan PSL v2 for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file: test_hash.c
|
||||||
|
* @brief: a application of hash function
|
||||||
|
* @version: 1.1
|
||||||
|
* @author: SHU
|
||||||
|
* @date: 2023/7/26
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "test_hash.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <transform.h>
|
||||||
|
#ifdef ADD_XIZI_FEATURES
|
||||||
|
|
||||||
|
|
||||||
|
HashNode* [HASH_TABLE_MAX_SIZE]; // 初始化哈希表
|
||||||
|
|
||||||
|
void TestHash(void) {
|
||||||
|
// 这是一个测试哈希表的函数,其实现对应的功能
|
||||||
|
// 实现哈希表的初始化,插入,删除和查找等功能
|
||||||
|
InitHashTable();
|
||||||
|
|
||||||
|
// 插入测试样例
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
InsertNode(i, i * 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找测试样例
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
HashNode* node = FindNode(i);
|
||||||
|
if (node != NULL) {
|
||||||
|
printf("Find node key = %d, value = %d\n", node->key, node->value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除测试样例
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
DeleteNode(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 再次查找测试样例,其中部分已被删除
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
HashNode* node = FindNode(i);
|
||||||
|
if (node != NULL) {
|
||||||
|
printf("Find node key = %d, value = %d\n", node->key, node->value);
|
||||||
|
} else {
|
||||||
|
printf("Node with key = %d not found\n", i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 初始化哈希表
|
||||||
|
void InitHashTable() {
|
||||||
|
|
||||||
|
for (int i = 0; i < HASH_TABLE_MAX_SIZE; ++i) {
|
||||||
|
hashTable[i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算哈希值
|
||||||
|
int HashFunc(int key) {
|
||||||
|
return key % HASH_TABLE_MAX_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 插入节点
|
||||||
|
void InsertNode(int key, int value) {
|
||||||
|
HashNode* node = malloc(sizeof(HashNode));
|
||||||
|
node->key = key;
|
||||||
|
node->value = value;
|
||||||
|
node->next = NULL;
|
||||||
|
|
||||||
|
int hashey = HashFunc(key);
|
||||||
|
if (hashTable[hashkey] == NULL) {
|
||||||
|
hashTable[hashkey] = node;
|
||||||
|
} else {
|
||||||
|
node->next = hashTable[hashkey];
|
||||||
|
hashTable[hashkey] = node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除节点
|
||||||
|
void DeleteNode(int key) {
|
||||||
|
int hashkey = HashFunc(key);
|
||||||
|
HashNode* node = hashTable[hashkey];
|
||||||
|
HashNode* pre = NULL;
|
||||||
|
while (node != NULL) {
|
||||||
|
if (node->key == key) {
|
||||||
|
if (pre == NULL) {
|
||||||
|
hashTable[hashkey] = node->next;
|
||||||
|
} else {
|
||||||
|
pre->next = node->next;
|
||||||
|
}
|
||||||
|
free(node);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pre = node;
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找节点
|
||||||
|
HashNode* FindNode(int key) {
|
||||||
|
int hashkey = HashFunc(key);
|
||||||
|
HashNode* node = hashTable[hashkey];
|
||||||
|
while (node != NULL) {
|
||||||
|
if (node->key == key) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRIV_SHELL_CMD_FUNCTION(TestHash, a hash test sample, PRIV_SHELL_CMD_MAIN_ATTR);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 AIIT XUOS Lab
|
||||||
|
* XiUOS is licensed under Mulan PSL v2.
|
||||||
|
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||||
|
* You may obtain a copy of Mulan PSL v2 at:
|
||||||
|
* http://license.coscl.org.cn/MulanPSL2
|
||||||
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||||
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||||
|
* See the Mulan PSL v2 for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file: test_hash.c
|
||||||
|
* @brief: a application of hash function
|
||||||
|
* @version: 1.1
|
||||||
|
* @author: SHU
|
||||||
|
* @date: 2023/7/26
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef TEST_HASH_H
|
||||||
|
#define TEST_HASH_H
|
||||||
|
|
||||||
|
#define HASH_TABLE_MAX_SIZE 1024
|
||||||
|
|
||||||
|
// 声明哈希节点结构体
|
||||||
|
typedef struct HashNode_Struct HashNode;
|
||||||
|
struct HashNode_Struct {
|
||||||
|
int key;
|
||||||
|
int value;
|
||||||
|
HashNode* next;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 初始化哈希表
|
||||||
|
void InitHashTable(void);
|
||||||
|
|
||||||
|
// 计算哈希值
|
||||||
|
int HashFunc(int key);
|
||||||
|
|
||||||
|
// 插入节点
|
||||||
|
void InsertNode(int key, int value);
|
||||||
|
|
||||||
|
// 删除节点
|
||||||
|
void DeleteNode(int key);
|
||||||
|
|
||||||
|
// 查找节点
|
||||||
|
HashNode* FindNode(int key);
|
||||||
|
|
||||||
|
#endif // HASH_TABLE_H
|
Loading…
Reference in New Issue