【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3571|回复: 0

[算法/加密解密] [转帖]哈希算法求教

[复制链接]
发表于 2006-6-13 01:01:00 | 显示全部楼层 |阅读模式
哈希算法求教

题目如下:
要求使用静态链表处理冲突....
北京(B取1, 四川,上海,... 按字母顺序
静态链地址

0 -1
1 -1 -> 0
2 -1 ->7
...
25
顺序存贮分配
0 BJ -1
1 TJ -1
...
6 HN 5
...
不只如何写算法. 哪位高手发一下..........十万火急

wi_in 2006-1-2 14:38
没人会吗????????摆脱大家了........

wi_in 2006-1-3 16:10
郁闷,,,,,,,,,,最后还是靠自己..........各位大侠帮我看看有没有什么问题

#include<stdio.h>

#include<string.h>

typedef struct HList{

char key[20];

int num;

int cur;

};

int Hash(char key[])

{ char ch;

ch=key[0];

if(ch>=97&&ch<=122)

ch=ch-32; //统一第一个字母为大写

ch=ch-65; //A的ASC码为65,这样使得A为0,Z为25

return ch;

}

void CreatHB(Hlist *HB[], char *key)

{ struct HList HB[32];

int i,j=-1,temp,p;

int H[26]={-1,},tp[26]; //H数组存放关键字相同的;tp存放当前关键字前驱的序号

char *key;

scanf("%s",key);

while(strcmp(key,"#")!=0)

{ h=Hash(key);

temp=tp[h];//用temp来查看关键字的前驱

H[h]=j+1; //用j来指示应该把关键字存放在HB第几个位置上

p=H[h]; //指示当前元素应存放在p位置

HB[p].key=key; //赋值

HB[p].num=p; //用num存放当前的位置

if(temp!=-1) //如果存在相同的(-1表示无)

tp[h]=HB[p].cur; //让当前的指针指向前一个相同的关键字

else HB[p].cur=-1;//否则当前为首元素,指向-1(空)

tp[h]=HB[p].num; //再把当前的位置给tp作为下一个相同关键字的前驱

scanf("%s",key);

}

}

void Search(Hlist *HB[], char *key)

{ h=Hash(key);

p=H[h]; //这时候cur实际是指向最后一个输入关键字

while(p!=-1&&strcmp(HB[P].key,key)!=0)

p=HB[p].cur; //当关键字不等切还有前驱时候向前

if(p!=-1) return p;

else return -1;

}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-6-23 01:04

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表