开散列表的查找、插入、删除操作的完整C代码
2014-12-21 12:53
465 查看
/*开散列表的插入、查找、删除算法的实现*/ #include <stdio.h> #include <stdlib.h> #define M 13 //表长定为13 typedef int KeyType; typedef struct KeyNode { KeyType key; struct KeyNode *next; }KeyNode; KeyNode *HashTable[M]; //关键字查找函数 int HashSearch(KeyType k) { int index = k%M; KeyNode *p; p = HashTable[index]; while( NULL != p ) { if( k == p->key ) return index; p = p->next; } return -1; } //关键字插入函数 void InsertHashTable( KeyType k ) { KeyNode *p, *q; int index = k%M; q = HashTable[index]; if( -1 == HashSearch( k ) ) { p = (KeyNode *)malloc(sizeof(KeyNode)); p->key = k; HashTable[index] = p; p->next = q; } } //创建Hash表函数 void CreateHashTable() { int i; int k; for(i=0; i<M; i++) HashTable[i] = NULL; printf("请输入关键字(以-1结束输入):\n"); scanf("%d", &k); while( -1 != k ) { InsertHashTable( k ); scanf("%d", &k); } } //删除关键字函数 void DeleteKey( KeyType k ) { int index = HashSearch( k ); if( -1 != index ) { KeyNode *p, *q; q = p = HashTable[index]; while( k != p->key ) { q = p; p = p->next; } if( q == p ) //删除第一个结点 HashTable[index] = p->next ; else q->next = p->next ; free(p); } else printf("无此关键字!"); } //打印Hash表 void PrintHashTable() { printf("当前的Hash表为:\n"); KeyNode *p; for(int i=0; i<13; i++) { p = HashTable[i]; printf("HashTable[%d]: ", i); while( NULL != p ) { printf("%d ", p->key ); p = p->next ; } printf("\n"); } } int main() { KeyType k; CreateHashTable(); PrintHashTable(); printf("请输入要插入的关键字:\n"); scanf("%d", &k); InsertHashTable( k ); PrintHashTable(); printf("请输入要删除的关键字:\n"); scanf("%d", &k); DeleteKey( k ); PrintHashTable(); printf("请输入要查找的关键字:\n"); scanf("%d", &k); if( -1 != HashSearch( k ) ) printf("当前Hash表的位置%d处查找到该关键字!\n", HashSearch( k )); else printf("无此关键字!\n"); return 0; }
测试数据以及测试结果
相关文章推荐
- 闭散列表的查找、插入和删除操作的完整C代码
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 自己写的顺序表的基本操作,插入、删除、修改,给出完整代码,其中运用到goto语句
- 散列表查找(哈希表)的基本操作 (完整代码)
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 单链表的基本操作,正序/逆序建表(尾插法/头插法)、计算单链表长度、输出单链表内容、插入、删除,给出完整代码
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 使用JAVA代码来模拟线性链表的相关操作(增加,删除,插入及查找等)
- C语言链表的创建、插入、查找、删除、清空操作
- 数据结构学习(三)——单链表的操作之查找、删除、插入。
- 【高质量代码实践】【链表】链表的建立,查找,删除,插入和输出
- 顺序表的建立、插入、删除、查找、遍历操作
- 单链表-创建、插入、删除、查找、反转等操作
- 单链表建立,插入,删除,查找,遍历操作
- 单链表的各种操作(建立,查找,删除,插入,归并等)