日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈希表2

發布時間:2023/11/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈希表2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哈希表的初始化

void HashInit(HashTable* ht, HashFunc func) {if(ht == NULL){return;}ht -> size = 0;ht -> func = func;size_t i = 0;for(; i < MaxSize; i++){ht -> data[i] = NULL;} }

哈希表的結點創建

HashElem* CreateHashElemNode(KeyType key, ValueType value) {HashElem* new_node = (HashElem*)malloc(sizeof(HashElem));new_node -> key = key;new_node -> value = value;new_node -> next = NULL;return new_node; }void DestroyHashElemNode(HashElem* node) {if(node == NULL){return;}free(node); }

哈希表的銷毀

void HashDestroy(HashTable* ht) {if(ht == NULL){return;}ht -> size = 0;ht -> func = NULL;size_t i = 0;for(; i < MaxSize; i++){HashElem* cur = ht -> data[i];while(cur != NULL){HashElem* next = cur -> next;DestroyHashElemNode(cur);cur = next;}} }

哈希表的查找

int HashBucketFind(HashElem* node, KeyType key) {if(node == NULL){return 0;}HashElem* cur = node;while(cur != NULL){if(cur -> key == key){return 1;}cur = cur -> next;}return 0; }int HashFind(HashTable* ht, KeyType key, ValueType* value) {if(ht == NULL || value == NULL){return 0;}size_t offset = ht -> func(key);HashElem* cur = ht -> data[offset];while(cur != NULL){if(cur -> key == key){*value = cur -> value;return 1;}cur = cur -> next;}return 0; }int HashBucketFindEx(HashElem* node, KeyType key, HashElem** cur_node, HashElem** prev_node) {if(node == NULL){return 0;}if(cur_node == NULL || prev_node == NULL){return 0;}HashElem* cur = node;HashElem* prev = NULL;while(cur != NULL){prev = cur;if(cur -> key == key){break;}cur = cur -> next;}if(cur == NULL){return 0;}*cur_node = cur;*prev_node = prev;return 1; }

哈希表的插入

void HashInsert(HashTable* ht, KeyType key, ValueType value) {if(ht == NULL){return;}size_t offset = ht -> func(key);HashElem* new_node = CreateHashElemNode(key, value);int ret = HashBucketFind(ht -> data[offset], key);if(ret == 1){return;}new_node -> next = ht -> data[offset];ht -> data[offset] = new_node;ht -> size++; }

哈希表的刪除

void HashRemove(HashTable* ht, KeyType key) {if(ht == NULL){return;}if(ht -> size == 0){return;}size_t offset = ht -> func(key);HashElem* cur = NULL;HashElem* prev = NULL;int ret = HashBucketFindEx(ht -> data[offset], key, &cur, &prev);if(ret == 0){return;//沒有找到}if(prev == NULL){ht -> data[offset] = cur -> next;}else{prev -> next = cur -> next;}DestroyHashElemNode(cur);cur = NULL;ht -> size--; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的哈希表2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。