From d348544375ca2c951372c90ed993b7c514a8fd0d Mon Sep 17 00:00:00 2001 From: Mao1223 Date: Mon, 25 Sep 2023 16:04:30 +0800 Subject: [PATCH] Update README.md --- README.md | 93 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 6e7c323ca..5d13b768a 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,78 @@ -# ##请填写赛题题目## - -## 1. 简介 - - - -## 2. 数据结构设计说明 - - - -## 3. 测试程序说明 - - - -## 4. 运行结果(##需结合运行测试截图按步骤说明##) +# ##请填写赛题题目## +热身赛一级赛题1:基于cortex-m3-emulator实现哈希表并测试验证 +## 1. 简介 + +哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方。 +哈希表(散列表)是直接通过关键字key得到要查找的记录的内存存储位置。 +散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。 +采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表或者哈希表。 +整个散列过程分为两步: +1.在存储时,通过散列函数计算记录的散列地址,并按此地址存储该记录。 +2.当查找记录时,通过同样的散列函数计算记录的散列地址,按此地址方位记录。 +因此散列技术既是一种存储方法也是一种查找方法,数据元素之间不存在逻辑关系。 +散列技术最合适的问题是查找与给定值相等的记录。 +散列函数设计的两个原则是计算简单、散列地址分布均匀。 +最长用的方法是除留余数法,f(key)=key mod p(p小于等于散列表的长度m)。 +但散列函数可能会造成冲突,即两个不同的记录求得的散列地址一样,解决散列冲突最常用的方法为开放定址法。一旦发生冲突,就去寻找下一个散列地址,只要散列表足够大,空的散列地址总能找到。 + +## 2. 数据结构设计说明 + +typedef struct +{ + int *elem; + int count; +}HashTable; +int m=0; + +//初始化散列表 +int InitHashTable(HashTable *H) +{ + int i; + m=HASHSIZE; + H->count=m; + H->elem=(int*)malloc(m*sizeof(int)); + for(i=0;ielem[i]=NULLKEY; + return 1; +} +//散列函数 +int Hash(int key) +{ + return key%m; +} +//插入关键字进入散列表 +void InsertHash(HashTable *H,int key) +{ + int addr=Hash(key); + while(H->elem[addr]!=NULLKEY) + addr=(addr+1)%m; + H->elem[addr]=key; +} + +//散列表查找关键字 +int SearchHash(HashTable H,int key,int *addr) +{ + *addr=Hash(key); + while(H.elem[*addr]!=key) + { + *addr=(*addr+1)%m; + if(H.elem[*addr]==NULLKEY||*addr==Hash(key)) + { + return -1; + } + } + return *addr; +} + +## 3. 测试程序说明 + +1.安装qemu +sudo apt install qemu-system-arm +2.通过以下命令启动Q‎EMU并加载XiUOS ELF文件 +qemu-system-arm -machine lm3s6965evb -nographic -kernel build/XiZi-cortex-m3-emulator.elf + +## 4. 运行结果(##需结合运行测试截图按步骤说明##) +配置文件并编译,在终端中执行的命令行效果如下图 +[Image test]( + +