//stdafx.h
#include <stdio.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MAX_SIZE 20 //人名的最大长度
#define Rec_NUM 3 //记录的个数
#define HASHSIZE 40 //定义表长
#define SUCCESS 1
#define UNSUCCESS -1
#define LEN sizeof(HashTable)
typedef int Status;
typedef char NA[MAX_SIZE];
typedef struct{ //记录
NA name;
}Record;
typedef struct //哈希表
{
Record *elem[HASHSIZE]; //数据元素存储基址
int count; //当前数据元素个数
int size; //当前容量
}HashTable;
void getin(Record* a) //键盘输入各人的信息
{
int i;
printf("请输入姓名!\n注:1、用户名以小写汉语拼音形式输入,字符间不要输入空格!\n");
printf(" 2、用户名长度不得超过%d个字符!\n\n",MAX_SIZE-1);
for(i=0;i<Rec_NUM;i++) {
printf("请输入第%d个记录的用户名:\n",i+1);
scanf("%s",a[i].name);
}
}
long int fold(NA s) //人名的折叠处理
{
char *p;
long int sum=0;
NA ss;
strcpy(ss,s); //复制字符串,不改变原字符串的大小写
strupr(ss); //防止出现2个相同名字,却出现在不同地方,如liyuan,LIYUAN
p=ss;
while(*p!='\0')
sum+=*p++;
return sum;
}
int Hash(NA str){ //哈希函数
long int fold_num;
int remainder;
fold_num=fold(str); //先将用户名进行折叠处理
remainder=fold_num%HASHSIZE; //折叠处理后的数,用除留余数法构造哈希函数
return remainder; //并返回模值
}
Status collision(int p,int &c) //冲突处理函数,采用二次探测再散列法解决冲突,【这一段什么意思,不大理解】
{ //【我现在要把这段改成伪随机数序列,要如何改?】
int i,q;
i=c/2+1;
while(i<HASHSIZE)
{
if(c%2==0)
{
c++;
q=(p+i*i)%HASHSIZE;
if(q>=0) return q;
else i=c/2+1;
}
else
{
q=(p-i*i)%HASHSIZE;
c++;
if(q>=0) return q;
else i=c/2+1;
}
}
return UNSUCCESS;
}
void CreateHash(HashTable* H,Record* a) //建表,以30人的姓名为关键字,建立相应的散列表
{ //若哈希地址冲突,进行冲突处理
int i,p=-1,c,pp;
for(i=0;i<Rec_NUM;i++)
{
c=0;
p=Hash(a[i].name);
pp=p;
while(H->elem[pp]!=NULL)
{
pp=collision(p,c);
if(pp<0)
{
printf( "第%d记录无法解决冲突", i+1 ); //需要显示冲突次数时输出
continue;
} //无法解决冲突,跳入下一循环
}
H->elem[pp]=&(a[i]); //求得哈希地址,将信息存入
H->count++;
printf("第%d个记录冲突次数为%d。\n",i+1,c); //需要显示冲突次数时输出
}
printf("\n当前哈希表容量为%d,当前表内存储的记录个数为%d.\n",HASHSIZE,H->count);
}
void ClearHash(HashTable *H) //清空哈希表
{
for (int i=0;i<HASHSIZE;i++)
{
H->elem[i]=NULL;
H->count=0;
}
}
请高手帮解释一下那一段什么意思,要改的话怎么改,发我邮箱:
461323278@163.com,谢谢,答得好我会追分的
//main.cpp
#include "stdafx.h"
#include < iostream >
using std::cout;
using std::endl;
int main( )
{
char ch;
HashTable *H;
H=(HashTable*)malloc(LEN);
for(int i=0;i<HASHSIZE;i++)
H->elem[i]=NULL;
H->size=HASHSIZE;
H->count=0;
Record a[Rec_NUM];
getin(a); //从键盘输入各记录
CreateHash(H,a); //分别以姓名为关键字建立散列表
ClearHash(H);
while(1)
{
cout<< "rebuild the figure? input Y/N or y/n" << endl;
while(1)
{
ch=getchar();
if(ch=='Y'||ch=='y')
break;
else if(ch=='N'||ch=='n')
{
cout << "build ended!\nprogram exit!" << endl;
return 0;
}
else
continue;
}
system("pause");
system("cls");
getin(a);
CreateHash(H,a);
ClearHash(H);
}
return 0;
}
数据结构:设n为正整数,用大“O”记号,将下列程序段的执行时间表示为n的...
设s=2+3+……+k=(k+1)k\/2-1 则易知程序执行了k步,显然k=O(n^0.5),则执行时间为O(n^0.5)
高分悬赏 mysql多表查询,并统计的问题
查询Sql: select nameid ,name, count(*) from table2 a left join table 1 b on a.name = b.name group by a.nameid 第2种 : 数据量较多修改数据结构复杂时使用 把数据库数据遍历一遍,生成log文件 第3种: 使用其它搜索引擎,如coreseek ---第2种方法具体内容--- 表结构固定的情况下...
数模问题!高分悬赏!答案好的追加分!数模高手帮忙!谢谢~
再用1474-1312=162,所以下一个是加137 1312+137=1449<1474 再用1474-1449=25,发现数据中没有比25小的 所以第一次结束 第一次851+461+137 接下来再处理剩下的13个数 46KB,55KB, 62KB,87KB,108KB,114KB,164KB,253KB,364KB,372KB,388KB,406KB,432KB 从13个数据中依次由大到小...
高分悬赏 微观经济学问题
收税前,P=200-0.5Q = 0.5Q 得到Q = 200,P=100(晕,什么饮料这么贵?)。收税后,新的供给方程为 P-20 = 0.5Q,需求方程不变。那么 P = 0.5Q+20 = 200-0.5Q 解出 Q = 180,P = 110。所以买家和卖家分别分担了20美元(澳大利亚政府收税,为啥要用美元做单位?)中的各一...
五年级下册的应用题,高分悬赏,要求正确率高!求标准量的列方程解答。_百...
判断题 1.一个非零数除以一个分数,商一定大于这个数。 ( 错 )要看分数是真分数还是假分数。2.十四分之十三×五分之三>十四分之十三÷五分之三 ( 错 )是小于。3.一个数的二分之一是七分之三,求这个数,列式为七分之三÷二分之一(对)。4.甲的三分之二正好等于乙的二分...
回答下面的问题,高分悬赏
地图的使用者不同,那么所得到的对地图信息的理解也会有不同。对于特定的使用目的,地图将表现特定的信息。地图将一些复杂的并且内部结构隐藏着的数据进行简化。同时,也可以在地图上对数据进行描述——如,用标注(label)表示名称、种类(categories)、类型(types)和其它信息。 数据建模的目的就是设计一种能够创建包含...
问个数学问题。高分悬赏,求大神解答!
首先一点 这批货物只赚了69400-400-569-53250=15181元 如果平分利润(明明B注资较多,为什么平分,应该按投资比例来分配利润)那么每人得利润7590.5元 那个800是什么费用 ,成本还是A单独支取的私人费用 如果是私人,B应给A7590.5-800+23250=30040.5元 如果是成本 则每人得利润7190.5 ,B给A71...
数学问题!高分悬赏!答对了再加20分!
零售商的售价应该是:60*1.1=66 2、560\/(1+40%)=400 3、有题意可以知道,小杰妈妈的购入价比实际价格便宜了30%是69元,那么原价应该是69\/0.3=230。4、现在的价格是120*0.75=90 由题可以知道,成本价是90-10=80,那么原来的售价120,所以盈利率=(120-80)\/80=0.5=50 ...
一道初一奥数难题,超高分悬赏 高手快来啊!!!
应该是7次.因为这些数字和字母的组合只有6种可能,a, ax, ay, xy, x^2, y^2。(a 为1,2,3...10等常数。 )所以如果取7次后。无论如何都会有同类项了。若是在前六次中分别取到以上六种情况,那么第七次的一定与其中一种成同类项了。
java问题,高分悬赏!!!
java问题,高分悬赏!!! 两个问题:一,java数据库的链接能给个实际例子一步步解说给“学生”听吗?二,数据包的导入问题。(二可以简单的说说,重点是问题一)。我学了java有3个月了,感觉不是那么熟练。分数... 两个问题:一,java数据库的链接能给个实际例子一步步解说给“学生”听吗?二,数据包的导入问题。(二...