散列查找: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; }
相关文章推荐
- c语言的线性表的顺序存储的实现,数组
- C语言实现一般线性表的顺序存储
- C语言实现线性存储之连续存储
- 数据结构(严蔚敏)C语言实现---线性表的顺序存储
- 数据结构学习笔记-线性表顺序存储(C语言实现)
- 线性表的链式存储(单链表)C语言实现
- 线性表的顺序静态存储--C语言实现
- 线性表链式存储-使用c语言实现
- 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.
- 线性表的链式存储(单链表)的c语言实现
- C语言单链表(线性表的链式存储)的实现
- C语言实现一般线性表的链式存储
- 线性表的链式存储实现c语言
- C语言--线性表的顺序存储的实现
- 线性表顺序存储-使用c语言实现
- 线性表的链式存储C语言实现
- C语言实现线性表连续存储结构相关算法
- 线性表的顺序动态存储——C语言实现简单函数
- 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.
- 图邻接矩阵存储 最小生成树 prim普里姆算法 C语言实现