采用数组链表的方式实现哈希表hashtable。cifndefHASHTABLEHdefineHASHTABLEHincludestdio。hincludestring。hincludestdlib。hdefineMAXKEYLEN100defineMAXTABLESIZE1000typedefstructHashNode{structHashN}HashNtypedefstructHashTable{intcurrentIHashNodehashNode〔MAXTABLESIZE〕;}HashT创建hashTablevoidcreateHashTable(HashTablehashTable);散列函数unsignedlongHashFun(constcharkey);插入key、valuevoidinsert(HashTablehashTable,charkey,intvalue);打印哈希表voidprintHashTable(HashTablehashTable);intget(HashTablehashTable,charkey);intdelete(HashTablehashTable,charkey);voidclearHashTable(HashTablehashTable);endifintmain(){HashTablehashTable(HashTable)malloc(sizeof(HashTable));createHashTable(hashTable);insert(hashTable,1234,1);insert(hashTable,11234,1);insert(hashTable,hello,2);insert(hashTable,world,3);insert(hashTable,hzp,4);insert(hashTable,java,5);insert(hashTable,b,12);insert(hashTable,c,12);insert(hashTable,c1,12);insert(hashTable,c,18);insert(hashTable,html,18);insert(hashTable,web,18);insert(hashTable,python,56);printHashTable(hashTable);intvalueget(hashTable,b);printf(keyb,itsvalued,value);delete(hashTable,java);printf();printHashTable(hashTable);clearHashTable(hashTable);return0;} 函数实现voidcreateHashTable(HashTablehashTable){memset(hashTablehashNode,0,MAXTABLESIZEsizeof(HashNode));hashTablecurrentIndex0;}unsignedlongHashFun(constcharkey){unsignedlonghash0;unsignedlonglenstrlen(key);for(inti0;i){hashhash33key〔i〕;}}voidinsert(HashTablehashTable,charkey,intvalue){HashNodenode(HashNode)malloc(sizeof(HashNode));nodekey(char)malloc((strlen(key)1)sizeof(char));strcpy(nodekey,key);nodekey〔strlen(key)〕;nodenextNULL;intposHashFun(key)MAXTABLESIZE;HashNodephashTablehashNode〔pos〕;if(pNULL){如果头结点为空,说明没有冲突hashTablehashNode〔pos〕hashTablecurrentI}头结点不为空,同时头结点的key和输入的key相同,覆盖valueif(strcmp(pkey,key)0){}头结点不为空,冲突,插入到链表的第二个节点HashN}voidprintHashTable(HashTablehashTable){for(inti0;iMAXTABLESIZE;i){HashNodeheadhashTablehashNode〔i〕;if(headNULL)printf(下标:d〔keys:valued〕,i,headkey,headvalue);while(head){printf(、〔keys:valued〕,headkey,headvalue);}printf();}}intget(HashTablehashTable,charkey){intposHashFun(key)MAXTABLESIZE;HashNodephashTablehashNode〔pos〕;if(pNULL){如果头结点为空,说明不存在这样的keyreturnNULL;}else{HashNwhile(q!NULL){if(strcmp(qkey,key)0){return(qvalue);}}returnNULL;}}intdelete(HashTablehashTable,charkey){intposHashFun(key)MAXTABLESIZE;HashNodephashTablehashNode〔pos〕;if(pNULL){如果头结点为空,说明不存在这样的keyreturn0;}else{if(strcmp(pkey,key)0){删除的如果是头结点hashTablehashNode〔pos〕free(pkey);free(p);return1;}删除的不是头结点的情况HashNHashNwhile(q!NULL){if(strcmp(qkey,key)0){free(qkey);free(q);return1;}}return0;}}voidclearHashTable(HashTablehashTable){for(inti0;iMAXTABLESIZE;i){HashNodeheadhashTablehashNode〔i〕;while(head){HashNfree(headkey);free(head);}}}