生活随笔
收集整理的這篇文章主要介紹了
数据结构源码笔记(C语言):哈希表的相关运算算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<stdio.h>
#include<malloc.h>
#include<string.h>#define MaxSize 100
#define NULLKEY -1
#define DELKEY -2typedef 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
)
{int i
,adr
;adr
=k
%p
;if(ha
[adr
].key
==NULLKEY
||ha
[adr
].key
==DELKEY
){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
)
{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
)
{int adr
;adr
=SearchHT(ha
,p
,k
);if(adr
!=-1){ha
[adr
].key
=DELKEY
;n
--;return 1;}elsereturn 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(" ");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(" ");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语言):哈希表的相关运算算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。