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_arr[MAXSIZE];
}LinkAddress;
int Get_HashAddress(int key);
void Init_LA(LinkAddress* pla);
bool Insert_LA(LinkAddress* pla, int key);
LA_Node* Search_LA(LinkAddress* pla, int key);
void Show(LinkAddress* pla);
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"
int Get_HashAddress(int key)
{
return key % MAXSIZE;
}
void Init_LA(LinkAddress* pla)
{
for (int i = 0; i < MAXSIZE; i++)
{
//pla->LA_arr[i].data;//数据域不使用 不用赋值
pla->LA_arr[i].next = NULL;
}
}
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_arr[index].next;
pla->LA_arr[index].next = pnewnode;
return true;
}
LA_Node* Search_LA(LinkAddress* pla, int key)
{
int index = Get_HashAddress(key);
for (LA_Node* p = pla->LA_arr[index].next; p != NULL; p=p->next)
{
if (p->data == key)
{
return p;
}
}
return NULL;
}
void Show(LinkAddress* pla)
{
for (int i = 0; i < MAXSIZE; i++)
{
printf("第%d行:", i);
for (LA_Node* p = pla->LA_arr[i].next; p != NULL; p=p->next)
{
printf("%d->", p->data);
}
printf("\n");
}
}
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_arr[index];
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;
}