开散列表的查找、插入、删除操作的完整C代码
来源:互联网 发布:淘宝店老板 编辑:程序博客网 时间:2024/06/06 05:58
/*开散列表的插入、查找、删除算法的实现*/#include <stdio.h>#include <stdlib.h>#define M 13 //表长定为13typedef 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 ;elseq->next = p->next ;free(p);}elseprintf("无此关键字!");}//打印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;}
测试数据以及测试结果
0 0
- 开散列表的查找、插入、删除操作的完整C代码
- 闭散列表的查找、插入和删除操作的完整C代码
- BST二叉排序树的查找和删除的完整C代码
- 二叉排序树的构造,插入,删除,完整c代码实现
- 散列表查找(哈希表)的基本操作 (完整代码)
- C语言---单链表的插入、删除、查找操作
- C语言---双向链表的插入、删除、查找操作
- C语言---双向链表的插入、删除、查找操作
- C语言顺序表的插入、删除、查找操作实现
- BST的插入、删除、查找操作
- AVL树的插入、删除、查找操作
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- 二叉查找树的操作(插入、删除、查找)
- 二叉查找树的基本操作之查找插入删除
- 二叉查找树的插入、删除、查找操作
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- B-树的插入、查找、删除 及 可执行的C语言代码
- avl tree的插入删除操作代码
- Eclipse快捷键大全(转载)
- 交叉编译libvpx
- 数据结构与算法概念解析
- IPV4地址的分类(五种)
- thttpd源码解析 定时器模块
- 开散列表的查找、插入、删除操作的完整C代码
- wpf treeview实现item为不选中状态
- UVa 11809 Floating-Point Numbers(浮点数)
- unity3d功能脚本大全
- Java开发部新员工学习课程
- java Copy-On-Write容器
- 环境信息术语(HJ/T 416—2007)
- 实习篇---第二十二天
- FrameWork之View绘制过程