“cotex-m3哈希表测试”

This commit is contained in:
pgh_dd 2023-07-25 23:01:25 +08:00
parent d8021b55f8
commit 7601ef45fe
1 changed files with 91 additions and 0 deletions

View File

@ -0,0 +1,91 @@
# **热身赛一级赛题1基于cortex-m3-emulator实现哈希表并测试验证**
## 1. 简介
**基于矽璓模拟器cortex-m3-emulator实现哈希表支持链地址法解决哈希冲突并编写测试程序在shell终端打印结果**。
## 2. 数据结构设计说明
为实现链地址法解决冲突的哈希表,需要以下三个结构体,包括数据数据键值对单元,节点单元,和总体的哈希表。
```c
typedef struct ElementType
{
int key;//键
int value;//值
int hash;//哈希值
}ElementType;
typedef struct Pnode
{
ElementType *data;//链表节点
struct Pnode *next;//下一个节点
}Node;
typedef struct HashTable
{
int size;//哈希表数组大小
int length;//哈希表当前长度
struct Pnode *head;//哈希表数组
}HashTableType;
int Hash(int key);//计算哈希值
HashTableType* CreatTable(int table_size);//创建哈希表
Node *LookUp(HashTableType *h , int key);//根据键查找对应值
void Insert(HashTableType *h , ElementType k);//插入键值对
void DestroyTable(HashTableType *h);//销毁哈希表
void PrintTable(HashTableType *h);//打印哈希表的值
int Hash(int value);
HashTableType* CreatTable(int table_size);
Node *LookUp(HashTableType *h , int key);
void Insert(HashTableType *h , ElementType k);
void DestroyTable(HashTableType *h);
void PrintTable(HashTableType *h);
```
## 3. 测试程序说明
测试哈希表在插入一组数据的情况下表中数据的分布情况。
```c
void Test()
{
ElementType a[]={{12,1},{2,2},{31,3},{45,4},{8,5}};
int n = sizeof(a)/sizeof(ElementType);
HashTableType *h = CreatTable(n);//测试创建哈希表
int i = 0;
for(i = 0 ; i<n ; i++)
{
Insert(h,a[i]);//测试插入键值对
}
PrintTable(h); // 打印哈希表
printf("%d\n\n", LookUp(h,12)->data->key); //查找key值为12的Element
printf("%d\n",h->length); //打印哈希表的元素个数
DestroyTable(h); // 摧毁哈希表
}
```
## 4. 运行结果(##需结合运行测试截图按步骤说明##
哈希表中数据分布情况如图1所示。
![alt 图1](./img/testHash.png)