哈希表分离链接法--两种初始化方法及其对比
来源:互联网 发布:mac rebel和diva对比 编辑:程序博客网 时间:2024/05/17 22:52
在教材中多为第一种方法。实际上可以改变,减少h->tablesize次的malloc()操作
下面是依次是声明、方法一、方法二:
typedef int ElementType;/* hashSep.h */#ifndef HashSep_H#define HashSep_Htypedef unsigned int Index;//Hash()散列函数的返回类型struct listnode;typedef struct listnode *position;typedef struct listnode *list;struct hashta1;typedef struct hashta1 *hashtable;list MakeEmpty(void);hashtable InitTable_1(int tableSize);//一个不太好的初始化程序hashtable InitTable_2(int tableSize);//一个比较好的初始化程序void DestoryTable(hashtable h);position Find(ElementType key, hashtable h);void Insert(ElementType key, hashtable h);ElementType Retrieve(position p);#endif/* ENDING *//* hashSep.c *//* The list using headers */#include<stdio.h>#include<stdlib.h>#define MinTableSize (5)struct listnode{ElementType element;position next;};struct hashta1{int tableSize;list *theLists;//指向指针的指针};hashtable InitTable_1(int tableSize){hashtable h;int i;if (tableSize < MinTableSize){printf("Table size too small!!\n");return NULL;}/* allocate tabel */h = malloc(sizeof(struct hashta1));if (h == NULL){printf("Out of space!!\n");exit(1);}h->tableSize =NextPrime(tableSize);/* allocate array of lists */h->theLists = malloc(sizeof(list)*h->tableSize); //本方法中,存放的是多个headers指针,不是listnode结构体,故下面要有 h->tableSize次调用malloc函数为数组中的每个指针赋值if(h->theLists==NULL){ printf("Out of space!!\n");exit(1);}/* allocate list header */for (i = 0;i < h->tableSize;++i){h->theLists[i] = malloc(sizeof(struct listnode));if (h->theLists[i] == NULL){printf("Out of space!!\n");exit(1);}elseh->theLists[i]->next= NULL;}return h;}hashtable InitTable_2(int tableSize){hashtable h;int i;if (tableSize < MinTableSize){printf("Table size too small!\n");return NULL;}/* allocate table */h = malloc(sizeof(struct hashta1));if (h == NULL){printf("Out of space!!\n");exit(1);}h->tableSize = NextPrime(tableSize);/* allocate array of list */h->theLists = malloc(sizeof(struct listnode)*h->tableSize); //避免了调用h->tableSize次的malloc()为h->theLists[i]赋值,降低时间复杂度if (h->theLists == NULL){printf("Out of space!!\n");exit(1);}/* allocate list header */for (i = 0;i < h->tableSize;++i){h->theLists[i]->next= MakeEmpty();}}
阅读全文
0 0
- 哈希表分离链接法--两种初始化方法及其对比
- 跨平台开发的两种方法及其对比
- AP库初始化元素为零的两种方法时间对比
- Mysql读写分离的两种方法对比:Spring+JPA应用层实现 vs Amoeba中间件实现
- 分离链接法实现哈希表
- 哈希表(分离链接法)
- HashTable(哈希表分离链接法)
- C语言两种字符串初始化方式的对比
- lib文件引用两种方法对比
- Map遍历的两种方法对比
- 初始化ArrayList的两种方法
- spring两种初始化bean的方法
- 初始化ArrayList的两种方法
- 初始化ArrayList、List的两种方法
- Java 数组初始化的两种方法
- map初始化的两种方法
- IOS初始化控制器的两种方法
- yii初始化控制器的两种方法
- Principle for Mac 3.3 简体中文完美汉化包 原型设计工具
- FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
- NoSQL之Memcached
- 【转载自宋博士的博客】CAE入门-材料力学的困惑(1)
- 无监督学习面临的众多挑战
- 哈希表分离链接法--两种初始化方法及其对比
- UVA
- Struts2的简单使用
- web学习第二天
- 全连接层的实现
- 关于AOP概念不清踩得深坑
- oj网站的训练题
- java执行cmd命令并获取返回结果字符串
- 中秋#2 OpenCup_10353