赞
踩
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #define NUM 5 typedef struct hash { int num;//哈希表多少个值 char* data;//data的指针 }hash; hash* init() { hash* L = (hash*)malloc(sizeof(hash)); L->num = 0; //指针型的若要用内部东西就要开辟空间 L->data = (char*)malloc(sizeof(char) * NUM); for (int i = 0; i < NUM; i++) { L->data[i] = 0; } return L; } int achash(int data) { return data % NUM; } void inhash(hash* L, char data) { int index = achash(data); if (L->data[index] != 0) {//<>0说明被空间占住了 int xianxing = 1;//线性探测法 while (L->data[index] != 0){ index = achash(achash(data) + xianxing); xianxing++; }//遍历直到不冲突为止 L->data[index] = data; } else//不冲突直接将元素放入这个地方 L->data[index]=data; } int ss(hash* L, char data) { int index = achash(data); while (L->data[index] != data) { int xianxing = 1; while (L->data[index] != data) { index = achash(achash(data) + xianxing); if (xianxing == NUM) return -1; xianxing++; } } return index; } int main() { hash* H = init(); char a; inhash(H, 'A'); inhash(H, 'F'); inhash(H, 'H'); inhash(H, 'D'); inhash(H, 'C'); for (int i = 0; i < NUM; i++) printf("H->data[%d]=%c\n", i, H->data[i]); //查找多次 while (1) { printf("输入查找的元素(大写英语字母):\n"); a = _getche();//不回车直接出结果 ss(H, a) != -1 ? printf("\n此字母存在\n") : printf("\n此字母不存在\n"); } //查找一次 /* printf("输入查找的元素(大写英语字母):\n"); scanf_s("%d", &a); ss(H, a) != -1 ? printf("\n此字母存在\n") : printf("\n此字母不存在\n"); */ return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。