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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

6-23 分离链接法的删除操作函数 (20 分)

發布時間:2023/12/4 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 6-23 分离链接法的删除操作函数 (20 分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

試實現分離鏈接法的刪除操作函數。

函數接口定義:

bool Delete( HashTable H, ElementType Key );

其中HashTable是分離鏈接散列表,定義如下:

typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List;typedef struct TblNode *HashTable; /* 散列表類型 */ struct TblNode { /* 散列表結點定義 */int TableSize; /* 表的最大長度 */List Heads; /* 指向鏈表頭結點的數組 */ };

函數Delete應根據裁判定義的散列函數Hash( Key, H->TableSize )從散列表H中查到Key的位置并刪除之,然后輸出一行文字:Key is deleted from list Heads[i],其中Key是傳入的被刪除的關鍵詞,i是Key所在的鏈表的編號;最后返回true。如果Key不存在,則返回false。

裁判測試程序樣例:

#include <stdio.h> #include <string.h>#define KEYLENGTH 15 /* 關鍵詞字符串的最大長度 */ typedef char ElementType[KEYLENGTH+1]; /* 關鍵詞類型用字符串 */ typedef int Index; /* 散列地址類型 */ typedef enum {false, true} bool;typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List;typedef struct TblNode *HashTable; /* 散列表類型 */ struct TblNode { /* 散列表結點定義 */int TableSize; /* 表的最大長度 */List Heads; /* 指向鏈表頭結點的數組 */ };Index Hash( ElementType Key, int TableSize ) {return (Key[0]-'a')%TableSize; }HashTable BuildTable(); /* 裁判實現,細節不表 */ bool Delete( HashTable H, ElementType Key );int main() {HashTable H;ElementType Key;H = BuildTable(); scanf("%s", Key);if (Delete(H, Key) == false)printf("ERROR: %s is not found\n", Key);if (Delete(H, Key) == true)printf("Are you kidding me?\n");return 0; }/* 你的代碼將被嵌在這里 */

哈希表HashTable(Key,value)就是把Key通過一個固定的算法函數既所謂的哈希函數轉換成一個整形數字,然后就將該數字對數組長度進行取余,取余的結果就當作數組下標,將value存儲在以該數字為下標的數組空間里
而當使用哈希表進行查詢的時候,就是再次使用哈希函數將Key轉換為對應的數組下標,并定位到該空間獲取value,這樣就可以充分利用到數組的定位性能進行數據定位

數組的特點是:尋址容易,插入和刪除困難
鏈表的特點是:尋址困難,插入和刪除容易

綜合兩者的特性,做出一種尋址容易,插入刪除也容易的數據結構:拉鏈法構建哈希表

解決沖突:分離鏈接法、開放尋址法

bool Delete( HashTable H, ElementType Key ){int w=Hash( Key, H->TableSize );//題目給的,不解釋,讀題目程序就好if(H->Heads[w].Next==NULL) return false;//判斷有沒有下一個節點PtrToLNode p,q;p=H->Heads[w].Next;//第一個位置沒有存東西,所以直接到下一個節點while(strcmp(p->Data,Key)!=0&&p->Next!=NULL){q=p;//記錄要刪除的上一個節點p=p->Next;//節點移動}if(strcmp(p->Data,Key)==0){//找到printf("%s is deleted from list Heads[%d]\n",Key,w);q=p->Next;//刪除操作free(p);//這一句必須寫,不寫會錯,很迷return true;//樣例 沒有輸出 printf("Are you kidding me?\n"); 不懂~~~}else return false;//找不到 }

總結

以上是生活随笔為你收集整理的6-23 分离链接法的删除操作函数 (20 分)的全部內容,希望文章能夠幫你解決所遇到的問題。

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