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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构源码笔记(C语言):哈希表的相关运算算法

發布時間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构源码笔记(C语言):哈希表的相关运算算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//實現哈希表的相關運算算法 #include<stdio.h> #include<malloc.h> #include<string.h>#define MaxSize 100 //定義最大哈希表長度 #define NULLKEY -1//定義空關鍵字 #define DELKEY -2// 定義被刪關鍵字值typedef int KeyType;//關鍵字類型 typedef char * InfoType;//其他數據類型typedef struct {KeyType key;//關鍵字域InfoType data;//其他數據域int count;//探查次數域 }HashTable[MaxSize];void InsertHT(HashTable ha,int &n,KeyType k,int p) {//將關鍵字k插入到哈希表中int i,adr;adr=k%p;if(ha[adr].key==NULLKEY||ha[adr].key==DELKEY){//x[j] 可以直接放在哈希表中ha[adr].key=k;ha[adr].count=1;}else//發生沖突時采用線性探查法解決沖突{i=1;do{adr=(adr+1)%p;i++;}while(ha[adr].key!=NULLKEY && ha[adr].key!=DELKEY);ha[adr].key=k;ha[adr].count=i;}n++; }void CreateHT(HashTable ha,KeyType x[],int n,int m,int p)//創建哈希表 {int i,n1=0;for(i=0;i<m;i++){ha[i].key=NULLKEY;//哈希表置初值ha[i].count=0;}for(i=0;i<n;i++)InsertHT(ha,n1,x[i],p); }int SearchHT(HashTable ha,int p,KeyType k)//在哈希表中查找關鍵字k {int i=0,adr;adr=k%p;while(ha[adr].key!=NULLKEY && ha[adr].key!=k)//采用線性探查法找下一個地址{i++;adr=(adr+1)%p;}if(ha[adr].key==k)//查找成功return adr;else //查找失敗return -1; }int DeleteHT(HashTable ha,int p,int k,int &n)//刪除哈希表中關鍵字k {int adr;adr=SearchHT(ha,p,k);if(adr!=-1)//在哈希表中找到該關鍵字{ha[adr].key=DELKEY;n--;//哈希表長度減1return 1;}else//在哈希表中未找到該關鍵字return 0; }void DispHT(HashTable ha,int n,int m)//輸出哈希表 {float avg=0;int i;printf("哈希表地址:\t");for(i=0;i<m;i++)printf("%3d",i);printf("\n");printf("哈希表關鍵字:\t");for(i=0;i<m;i++)if (ha[i].key==NULLKEY || ha[i].key==DELKEY)printf(" ");//輸出3個空格elseprintf(" %3d",ha[i].key);printf("\n");printf("搜索次數:\t");for(i=0;i<m;i++)if(ha[i].key==NULLKEY||ha[i].key==DELKEY)printf(" ");//輸出3空格else printf(" %3d",ha[i].count);printf("\n");for(i=0;i<m;i++)if(ha[i].key!=NULLKEY && ha[i].key!=DELKEY)avg=avg+ha[i].count;avg=avg/n;printf(" 平均搜索長度ASL(%d)=%g\n",n,avg); }int main() {int x[]={16,74,60,43,54,90,46,31,29,88,77};int n=11,m=13,p=13,i,k=29;HashTable ha;CreateHT(ha,x,n,m,p);printf("\n");DispHT(ha,n,m);i=SearchHT(ha,p,k);if(i!=-1)printf("ha[%d].key=%d\n",i,k); elseprintf("未找到%d\n",k);k=77;printf("刪除關鍵字%d\n",k);DeleteHT(ha,p,k,n);DispHT(ha,n,m);i=SearchHT(ha,p,k);if(i!=-1)printf("ha[%d].key=%d\n",i,k);elseprintf("\n 未找到%d\n",k);printf("插入關鍵字%d\n",k);InsertHT(ha,n,k,p);DispHT(ha,n,m);printf("\n");return 0; }

數據結構源碼筆記(C語言描述)匯總:

數據結構源碼筆記(C語言):英文單詞按字典序排序的基數排序

數據結構源碼筆記(C語言):直接插入排序

數據結構源碼筆記(C語言):直接選擇排序

數據結構源碼筆記(C語言):置換-選擇算法

數據結構源碼筆記(C語言):Huffman樹字符編碼

數據結構源碼筆記(C語言):Josephus問題之順序表

數據結構源碼筆記(C語言):Josephus問題之循環鏈接表

數據結構源碼筆記(C語言):多項式合并

數據結構源碼筆記(C語言):二叉樹之葉子結點旋轉銷毀

數據結構源碼筆記(C語言):哈夫曼樹

數據結構源碼筆記(C語言):集合的位向量表示

數據結構源碼筆記(C語言):鏈接隊列

數據結構源碼筆記(C語言):鏈接棧

數據結構源碼筆記(C語言):線性表的單鏈表示

數據結構源碼筆記(C語言):線性表的順序表示

數據結構源碼筆記(C語言):棧的基本操作

數據結構源碼筆記(C語言):中綴表達式

數據結構源碼筆記(C語言):希爾插入排序

數據結構源碼筆記(C語言):索引文件建立和查找

數據結構源碼筆記(C語言):冒泡排序

數據結構源碼筆記(C語言):快速排序

數據結構源碼筆記(C語言):可變長度字符串的快速排序

數據結構源碼筆記(C語言):基數排序

數據結構源碼筆記(C語言):二路歸并排序

數據結構源碼筆記(C語言):堆排序

數據結構源碼筆記(C語言):二叉樹搜索樹Kruskal

數據結構源碼筆記(C語言):二叉搜索樹Prim

數據結構源碼筆記(C語言):最短路徑弗洛伊德算法

數據結構源碼筆記(C語言):深度、廣度優先生成樹

數據結構源碼筆記(C語言):鄰接矩陣轉化鄰接表

數據結構源碼筆記(C語言):統計字符串中出現的字符及其次數

數據結構源碼筆記(C語言):順序查找

數據結構源碼筆記(C語言):哈希表的相關運算算法

數據結構源碼筆記(C語言):分塊法查找

數據結構源碼筆記(C語言):二分查找

數據結構源碼筆記(C語言):二叉樹遍歷

數據結構源碼筆記(C語言):二叉平衡樹的相關操作算法

數據結構源碼筆記(C語言):二叉排序樹的基本操作算法

數據結構源碼筆記(C語言):B樹的相關運算算法

總結

以上是生活随笔為你收集整理的数据结构源码笔记(C语言):哈希表的相关运算算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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