Task4
【散列表(哈希表)】
- 实现一个基于链表法解决冲突问题的散列表
- 实现一个 LRU 缓存淘汰算法
【字符串】
- 实现一个字符集,只包含 a~z 这 26 个英文字母的 Trie 树
- 实现朴素的字符串匹配算法
链表法解决冲突(C实现):
/*链接法解决哈希散列碰撞问题*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define N 20 //数组数量
#define Nhash 7 //哈希槽的数量
#define N_R 200
//每个数据结点
typedef struct node{
int key;
int num;
struct node * next;
struct node * pre;
}Node, *Pnode;
//哈希链表
typedef struct Hash{
Pnode link[N]; //每个链表的表头指针
int num; //哈希表中现存数据
int len; //哈希数组长度
}hash,*Phash;
Pnode IniPnode(int key){
Pnode p=(Pnode)malloc(sizeof(Node));
p->key=key;
p->num=1;
p->next=NULL;
p->pre=NULL;
}
//散列位置计算
int HashPos(int key){
return key % Nhash;
}
Pnode FindNodePos(Phash h, int key){
int pos=HashPos(key);
Pnode link = h->link[pos];
while(link->next != NULL && link->key != key){
link=link->next;
}
return link;
}
void IniHash(Phash *h, int len){
int i;
*h=(Phash)malloc(sizeof(hash));
for(i=0;i<len;i++){
(*h)->link[i] = IniPnode(-1); //头结点
}
(*h)->num =0; //总数为0
(*h)->len=len;
}
void Insert(Phash h, int