2026.4.26数据结构 链地址法

Link_Address.h

#pragma once

#define MAXSIZE 12

//链地址法对应的单链表的有效节点结构体设计

typedef struct LA_Node

{

int data;

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* pla, int key);

Link_Address.cpp

#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;

}

}

//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->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->data == key)

{

return p;

}

}

return NULL;

}

//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->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);

q = NULL;

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;

}

相关推荐
刘马想放假3 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠3 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦10 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠11 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾11 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82111 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q11 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒12 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记12 天前
单项不带头不循环链表
数据结构·链表
小糯米60112 天前
JS 数组
数据结构·算法·排序算法