当前位置:首页 » 课程大全 » 数据结构哈希表课程设计

数据结构哈希表课程设计

发布时间: 2021-03-02 02:33:29

『壹』 数据结构(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

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919