您的位置:首页 > 编程语言 > C语言/C++

散列查找:C语言线性探查与拉链存储的实现

2014-11-03 02:24 274 查看
//散列查找:C语言线性探查与拉链存储的实现
#include <stdio.h>
#include <stdlib.h>
#define LineSize 13

typedef struct node{
int data;
struct node *next;
}ElemSN;

//线性探查法存储
int * LinearProbing(int d[],int n)
{
int * const Plp = (int *)malloc(LineSize * sizeof(int));
int i,j;

//初始化申请的存储空间值为-1
for(i = 0;i < LineSize;i++)
Plp[i] = -1;

//存入数据
for(i = 0;i < n;i++){
j = 0;
while(Plp[(d[i] + j) % LineSize] > 0)
j++;
Plp[(d[i] + j) % LineSize] = d[i];
}

//输出存储结构
printf("线性探查存储:\n");
for(i = 0;i < LineSize;i++)
printf("%d ",Plp[i]);
putchar('\n');

//返回数组首地址
return Plp;
}

//拉链法存储
ElemSN * Zipper(int d[],int n)
{
ElemSN * const Pz = (ElemSN *)malloc(LineSize * sizeof(ElemSN));
ElemSN *p,*t;
int i;

//初始化存储空间中初始指针域为NULL;
for(i = 0;i < LineSize;i++)
Pz[i].next = NULL;

//存入数据
for(i = 0;i < n; i++){
p = &Pz[d[i] % LineSize];
t = (ElemSN *)malloc(sizeof(ElemSN));
t->data = d[i];
t->next = NULL;
while(p->next){
p = p->next;
}
p->next = t;
}

//输出存储结构
printf("拉链存储:\n");
for(i = 0;i < LineSize;i++){
printf("Pz[%d]:",i);
p = &Pz[i];
if(p->next)
while(p->next){
printf("%d ",p->next->data);
p = p->next;
}
else
printf("NULL");
putchar('\n');
}

return Pz;
}

int main(void)
{
int Data[9] = {5,13,17,42,46,55,70,82,94};
int *Plp;
ElemSN * Pz;

Plp = LinearProbing(Data,9);
Pz = Zipper(Data,9);
free(Plp);
free(Pz);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: