數據結構哈希表課程設計
『壹』 數據結構(java版)哈希表的設計
1.什麼是哈希表?
哈希表是一種數據結構,它提供了快速的插入操作和查找操作。其基於數組來實現。
2.哈希化
1)直接將關鍵字作為索引。
2)將單詞轉換成索引。
<1>將字母轉換成ASCII碼,然後進行相加
<2>冪的連乘
<3>壓縮可選值
3.壓縮後仍然可能出現的問題。
沖突:不能保證每個單詞都映射到數組的空白單元。
解決辦法:
<1>開放地址法
<2>鏈地址法
/**
* 員工信息類
* @author Administrator
*
*/
public class Info {
private String key;
private String name;
public Info(String key, String name) {
this.key = key;
this.name = name;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import java.math.BigInteger;
public class HashTable {
private Info[] arr;
/**
* 默認的構造方法
*/
public HashTable() {
arr = new Info[100];
}
/**
* 指定數組初始化大小
*/
public HashTable(int maxSize) {
arr = new Info[maxSize];
}
/**
* 插入數據
*/
public void insert(Info info) {
arr[hashCode(info.getKey())] = info;
}
/**
* 查找數據
*/
public Info find(String key) {
return arr[hashCode(key)];
}
public int hashCode(String key) {
// int hashVal = 0;
// for(int i = key.length() - 1; i >= 0; i--) {
// int letter = key.charAt(i) - 96;
// hashVal += letter;
// }
// return hashVal;
BigInteger hashVal = new BigInteger("0");
BigInteger pow27 = new BigInteger("1");
for(int i = key.length() - 1; i >= 0; i--) {
int letter = key.charAt(i) - 96;
BigInteger letterB = new BigInteger(String.valueOf(letter));
hashVal = hashVal.add(letterB.multiply(pow27));
pow27 = pow27.multiply(new BigInteger(String.valueOf(27)));
}
return hashVal.mod(new BigInteger(String.valueOf(arr.length))).intValue();
}
}
public class TestHashTable {
public static void main(String[] args) {
HashTable ht = new HashTable();
ht.insert(new Info("a","張三"));
ht.insert(new Info("ct","李四"));
ht.insert(new Info("wangwu","王五"));
System.out.println(ht.find("a").getName());
System.out.println(ht.find("ct").getName());
}
}
『貳』 數據結構程序設計----哈希表設計
#include<iostream>
#include<string>
using namespace std;
#define M 47 //隨機數
#define n 50 //哈希表長
#define q 30 //人數
struct name{
char *py;
int k;
};
name NameList[n];
struct hash{
char *py;
int k;
int si;
};
hash hashlist[n];
void listname()
{
char *f;
int s0,r,i;
NameList[0].py="baojie";
NameList[1].py="chengaoyang";
NameList[2].py="chenguangzhong";
NameList[3].py="chenliangliang";
NameList[4].py="chenyongzhou";
NameList[5].py="fengchao";
NameList[6].py="gexiangfeng";
NameList[7].py="huting";
NameList[8].py="huangpinjin";
NameList[9].py="jiangxiaojia";
NameList[10].py="laidongjie";
NameList[11].py="liyexiao";
NameList[12].py="lihui";
NameList[13].py="lijue";
NameList[14].py="lizhuoqun";
NameList[15].py="linfujun";
NameList[16].py="luobin";
NameList[17].py="luokeqing";
NameList[18].py="nichao";
NameList[19].py="panhuafeng";
NameList[20].py="sijun";
NameList[21].py="songzhanhui";
NameList[22].py="sunzhengqing";
NameList[23].py="wanghaofeng";
NameList[24].py="wangjunshuai";
NameList[25].py="wangqinde";
NameList[26].py="wangzejun";
NameList[27].py="wangkeke";
NameList[28].py="weixing";
NameList[29].py="wurenke";
for(i=0;i<q;i++)
{
s0=0;
f=NameList[i].py;
for(r=0;*(f+r)!='\0';r++)
s0+=*(f+r);
NameList[i].k=s0;
}
}
void creathash()
{
int i;
for(i=0;i<n;i++)
{
hashlist[i].py="";
hashlist[i].k=0;
hashlist[i].si=0;
}
for(i=0;i<M;i++)
{
int sum=0;
int adr=(NameList[i].k)%M;
int d=adr;
if(hashlist[adr].si==0)
{
hashlist[adr].k=NameList[i].k;
hashlist[adr].py=NameList[i].py;
hashlist[adr].si=1;
}
else
{
while(hashlist[d].k!=0)
{
d=(d+NameList[i].k%10+1)%M;
sum=sum+1;
}
hashlist[d].k=NameList[i].k;
hashlist[d].py=NameList[i].py;
hashlist[d].si=sum+1;
}
}
}
void findlist()
{
string nam;
int s0=0,r,sum=1;
cout<<"請輸入姓名的拼音:"<<endl;
cin>>nam;
for(r=0;r<20;r++)
s0+=nam[r];
int adr=s0%M;
int d=adr;
if(hashlist[adr].k==s0)
cout<<"姓名:"<<hashlist[adr].py<<" "<<"關鍵字:"<<s0<<" "<<"查找長度為:1"<<endl;
else if(hashlist[adr].k==0)
cout<<"無此記錄!"<<endl;
else
{
int g=0;
while(g==0)
{
d=(d+s0%10+1)%M;
sum=sum+1;
if(hashlist[d].k==0)
{cout<<"無此記錄!"<<endl;
g=1;
}
if(hashlist[d].k==s0)
{
cout<<"姓名:"<<hashlist[adr].py<<" "<<"關鍵字:"<<s0<<" "<<"查找長度為:1"<<endl;
g=1;
}
}
}
}
void display()
{
int i;
for(i=0;i<30;i++)
cout<<NameList[i].py<<" "<<NameList[i].k<<endl;
}
int main()
{
char x;
listname();
creathash();
cout<<"d. 顯示哈希表 f.查找 任意鍵退出 請選擇"<<endl;
while(cin>>x)
{
if(x=='d'){display();cout<<endl;}
else if(x=='f'){findlist();cout<<endl;}
else break;
}
return 0;
}
『叄』 哈希表的設計(數據結構C語言版)
解決沖突方法無非兩種嘛,而且這個不難的,幫你寫不是害你嘛,這個不學好以後的課程容易出現問題的!
『肆』 數據結構課程設計<散列表的基本運算和簡單的學生信息管理系統>
醫險店
『伍』 課程設計 哈希表
星期 星期一 星期二 星期三 星期四 星期五
課程
上午 英語 數學版 數學 數學 語文權
語文 語文 語文 語文 數學
數學 音樂 數學 音樂 體育
美術 體育 微機 體育 語文
下午 語文 語文 語文 語文 英語
數學 數學 美術 思品 語文
語文 班會 數學 少先隊 閱讀
『陸』 急求 數據結構哈希表設計
1. 計算出字元串的三個哈希值 (一個用來確定位置,另外兩個用來校驗)
2. 察看哈希表版中的權這個位置
3. 哈希表中這個位置為空嗎?假如為空,則肯定該字元串不存在,返回
4. 假如存在,則檢查其他兩個哈希值是否也匹配,假如匹配,則表示找到了該字元串,返回
5. 移到下一個位置,假如已經越界,則表示沒有找到,返回
6. 看看是不是又回到了原來的位置,假如是,則返回沒找到
7. 回到3
怎麼樣,很簡單的演算法吧,但確實是天才的idea, 其實最優秀的演算法往往是簡單有效的演算法。
『柒』 數據結構課程設計《哈希表查找》,求大神給代碼啊
肯定不是A,因為模為23的余數為0~22,不會是3位數2789465^2=7781114986225,正好是答案B