数据结构(哈希函数)

#pragma once

//之前已经学完的,顺序表,链表等 他们总是有一个共有的特征,数据和其存储之间是没有任何关系的

//现在的需求 让查找函数的时间复杂度达到O(1);

//让数据和其存储位置之间产生某种函数(映射)关系 这就是哈希

//6种哈希函数的构建方法

//除留取余法

//折叠法

//平方取中法

//数组分析法

//直接定址法

//随机数法 散列==哈希

//如果出现了哈希冲突 怎么解决

//4个解决哈希冲突的方法 哈希冲突 不同的关键字,却

//开发地址法 存储位置==f(关键字)

// // 1 开发指针法

// f1(key)=(f(key)+d1)MODm (d1=1,2,3,4,,.....)(线性探测法)

// 二次探针法

// 随机探测法

//再散列函数法

//公共区溢出法

// 通过哈希函数的计算得到的哈希地址 先去与基本表来对比 如果等于 则成功 如果不等于 则对其溢出表进行顺序表查找

// 使用场景 冲突的数据表很小时

//链地址法

//

#define MAXSIZE 12

typedef struct LA_Node

{

int date;

struct LA_Node* next;

}LA_Node;

typedef struct LinkADDress

{

LA_Node LA_arrMAXSIZE;

}LinkAddress;

//0 哈希函数调用

int Get_HashAddress(int key);

//1 初始化

void Init_LA(LinkAddress* pla);

//2 插入

bool Insert_LA(LinkAddress* pla, int key);

//3 查找

LA_Node* search_LA(LinkAddress* pla, int key);

//4 打印

void Show(LinkAddress* pla);

//5 删除

bool Delete_LA(LinkAddress* p

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <assert.h>

#include <memory.h>

#include "Link_Address.h"

//0.计算哈希地址函数

int Get_HashAddress(int key)

{

return key % MAXSIZE;

}

//1.初始化

void Init_LA(LinkAddress* pla)

{

for (int i = 0; i < MAXSIZE; i++)

{

//pla->LA_arri.data;//数据域不使用 不用赋值

pla->LA_arri.next = NULL;

//pla->LA_arri.next=NULL;

}

}

//2.插入

bool Insert_LA(LinkAddress* pla, int key)

{

LA_Node* p = Search_LA(pla, key);

if (p != NULL)

{

return true;

}

int index = Get_HashAddress(key);

LA_Node* pnewnode = (LA_Node*)malloc(sizeof(LA_Node));

if (pnewnode == NULL)

exit(EXIT_FAILURE);

pnewnode->date = key;

pnewnode->next = pla->LA_arrindex.next;

pla->LA_arrindex.next = pnewnode;

return true;

/* LA_Node* p = Search_LA(pla, key);

if (p != NULL)

{

return true;

}

int index = Get_HashAddress(key);

LA_Node* pnewnode = (LA_Node*)malloc(sizeof(LA_Node));

if (pnewnode == NULL)

exit(EXIT_FAILURE);

pnewnode->data = key;

pnewnode->next = pla->LA_arrindex.next;

pla->LA_arrindex.next = pnewnode;

return true;*/

}

//3.查找

LA_Node* Search_LA(LinkAddress* pla, int key)

{

int index = Get_HashAddress(key);

for (LA_Node* p = pla->LA_arrindex.next; p != NULL; p = p->next)

{

if (p->date == key)

{

return p;

}

}

return NULL;

//int index = Get_HashAddress(key);

//for (LA_Node* p = pla->LA_arrindex.next; p != NULL; p = p->next)

//{

// if (p->data == key)

// return p;

//}

}

//4.打印

void Show(LinkAddress* pla)

{

for (int i = 0; i < MAXSIZE; i++)

{

printf("第%d行:", i);

for (LA_Node* p = pla->LA_arri.next; p != NULL; p = p->next)

{

printf("%d->", p->date);

}

printf("\n");

}

//for (int i = 0; i < MAXSIZE; i++)

//{

// printf("第%d行; ", i);

// for (LA_Node* p = pla->LA_arri.next; p != NULL; p = p->next)

// {

// printf("%d->", p->data);

// }

// printf("\n");

//}

}

//5.删除

bool Delete_LA(LinkAddress* pla, int key)

{

//作业

int index = Get_HashAddress(key);

LA_Node* q = Search_LA(pla, key);

if (NULL == q)

return false;

LA_Node* p = &pla->LA_arrindex;

for (; p->next != q; p = p->next);

p->next = q->next;

free(q);

return true;

/*int index = Get_HashAddress(key);

LA_Node* q = Search_LA(pla, key);

if(q!=NULL)

return true;

LA_Node* p = &pla->LA_arrindex;

for (; p->next != q; p = p->next);

p->next = q->next;

free(q);

return true;*/

}

//int main()

//{

// LinkAddress head;

// Init_LA(&head);

//

// Insert_LA(&head, 12);

// Insert_LA(&head, 67);

// Insert_LA(&head, 56);

// Insert_LA(&head, 16);

// Insert_LA(&head, 25);

// Insert_LA(&head, 37);

// Insert_LA(&head, 22);

// Insert_LA(&head, 29);

// Insert_LA(&head, 15);

// Insert_LA(&head, 47);

// Insert_LA(&head, 48);

// Insert_LA(&head, 34);

//

// Show(&head);

//

// return 0;

//}

la, int key);

相关推荐
飘尘2 小时前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试
mokongJ2 小时前
17 份异构销售数据的合并清洗方案:30 万行处理耗时 9.64 秒
数据结构
夏幻灵2 小时前
每日一题:LeetCode 3:无重复字符的最长子串——滑动窗口思路详解
算法·leetcode·职场和发展
CarIise3 小时前
Java实训阶段查漏补缺复习笔记2
java·linux·算法
无忧.芙桃3 小时前
C++ 并查集详解:原理、实现与应用
c语言·c++·算法·leetcode
蛋蛋的就会顺顺的3 小时前
hot100——二叉树
java·数据结构·算法·leetcode·力扣
Code_Solitude4 小时前
c语言:二分法的完整补充
c语言·开发语言·算法
一切皆是因缘际会4 小时前
掌控信息论:同源星际通信基础理论
人工智能·算法·ai
List<String> error_P5 小时前
freertos数据结构--链表
数据结构·链表
动词ing6 小时前
【C语言题目练习】算法 整数反转
c语言·开发语言·算法