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;

}

相关推荐
路灯上の马陈9 小时前
二叉树的定义与性质
数据结构·二叉树·树结构·1024程序员节
Bshaya_13 小时前
红黑树详解:概念、规则与插入实现
数据结构·红黑树·二叉搜索树·平衡树·插入逻辑
WBluuue13 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
路灯上の马陈14 小时前
数据结构-树
数据结构·1024程序员节
benjormin15 小时前
Java数据结构 二叉搜索树
数据结构·算法
H.莓飛18 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
码少女19 小时前
数据结构——B+树基础
数据结构·b树
揽星河..21 小时前
【初阶数据结构】常见的排序算法
数据结构·排序算法·1024程序员节
YLCHUP1 天前
【模拟&STL】题解:AT_abc203_e [ABC203E] White Pawn_基础算法_数据结构_STL模板库_AtcoderABC_C++算法竞赛
数据结构·c++·算法·leetcode·动态规划·哈希算法·近邻算法
啊啊啊啊啊!!!!1 天前
【c++】⽤哈希表封装myunordered_map和myunordered_set
数据结构·哈希算法·散列表