| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8081 人关注过本帖
标题:Hash应用 - 哈希(散列)表
只看楼主 加入收藏
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

你翻译的第一段漏了说明,其实那个data.txt文件就是425行的文件,结束在第一行

"----------"这里,然后这下面的几行是用来搜索的,从你建立的哈希表中搜索出关键字。

2004-11-02 11:45
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

用fstream读取文件储存好数据,然后按照给出的算式列入哈希表,其中,

H=int(k) mod 350 意思是,把k转换成int类型,然后取模(int(k)%350)。

我上年学的数据结构没学好,要看很久才能懂哈希表插入。

2004-11-02 11:50
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
半成品,未测试

#include<iostream> #include<string> #include<fstream> using namespace std;

const int HashMaxSize = 350; //hash表大小 const int ItemsAmount = 425; //数据数量

void Input(string data[]) { ifstream hashdata("E:\\data.txt"); //打开data.txt for(int i=0; i<ItemsAmount; i++) { hashdata>>data[i]; } }

int Hash(string data,int m) //字符转换成int后取模 { unsigned int h=0; for(int i=0; i<data.length(); i++) { h<<=3; h+=data[i]; } return h%m; }

struct LNode{ //单接点结构 string data; LNode* next; };

class HashList { private: LNode* HT[HashMaxSize]; //指针数组

public: void InitHashList(); //初始化hash表 void ClearHashList(HashList*& hl); //清空hash表 void Insert(HashList &hl,string data[]); //插入数据 };

void HashList::InitHashList() { for(int i=0; i<HashMaxSize; i++) HT[i]=NULL; }

void HashList::ClearHashList(HashList*& hl) { LNode* p; for(int i=0; i<HashMaxSize; i++) { p=HT[i]; while(p!=NULL) { HT[i]=p->next; delete p; p=HT[i]; } } }

void HashList::Insert(HashList &hl,string data[]) { int key[ItemsAmount]; for(int i=0; i<ItemsAmount; i++) { key[i] = Hash(data[i],HashMaxSize); LNode* p=new LNode; if(p==NULL) system("exit"); p->data=data[i]; p->next=HT[key[i]]; HT[key[i]]=p; } }

void main() { HashList hl; hl.InitHashList();

string data[ItemsAmount]; Input(data); hl.Insert(hl,data); }

[此贴子已经被作者于2004-11-02 17:15:57编辑过]

2004-11-02 16:57
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

楼上的代码写了我两个小时,晕~~~没心机写下去了, 其实类里面就差查找和删除函数,自己想想加上就完成了。

你的题目还要求计算出350个链表指针的长度。

[此贴子已经被作者于2004-11-02 21:23:05编辑过]

2004-11-02 17:17
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

不好意思,HashTable可不是那么简单就写出来的,在短时间里我实现不了,不过在我读过的STL(C++标准模板库)的原始码里有一份非常爽的HashTable的实现,类名称就是hash_table,可以到SGI的网站上下载.希望能对你有帮助!

还有更好的获得方法就是侯捷写的<STL源码刨析>一书,那里讲的更清楚!


I am a big fan of c plus plus.
2004-11-02 21:07
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

晕~~~倒~~~我挂了~~~

楼主要的是最原始的hash表,就像数据库最原始的时候也是用代码实现没有系统。

总是用已经弄好的东西会变笨的。就像MFC,程序员变笨的原因是舍弃了原来的基础。

[此贴子已经被作者于2004-11-02 21:19:55编辑过]

2004-11-02 21:17
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

你说写Hash要很久,我已经给了一大半代码了,写了我2个小时了。

不写也可以,先答我怎样ifstream>>data分行啊!!!

2004-11-02 21:21
dicklin
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2004-11-1
收藏
得分:0 

哇哇哇~~~版主你哪里人,我立刻邮寄几瓶(鸡精)给你保养一下!!不过我还是不太明白!因为我以前在国内没有学过编程,,来到这边才转专业!!所以没有什么概念,,,,,希望你有时间可以帮我完成一下!!谢谢!

还有另外一位版主,你说的原件我们可能不能用拉!因为老师可能要看最原始的!!晕死!!不过也真的谢谢你的关注!谢谢!

怎么这个论坛的人那么好!晕死!

2004-11-03 00:19
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
我想问个问题,你对hash有概念吗?知道是怎么回事吗?
2004-11-03 00:28
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

鸡精就不用了,希望你好好学习吧

我给出的代码还没完成,我又写了些注释,你看着注释加上剩下的功能就完事了。

你什么时候要交作业?我明天一早就要回学校,学校没网上,星期六才回来。

希望你能看懂我的代码,并补充完整,其实书上有教的。

2004-11-03 00:38
快速回复:Hash应用 - 哈希(散列)表
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016063 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved