Скачиваний:
33
Добавлен:
10.05.2014
Размер:
2.39 Кб
Скачать
#include <iostream>
#include <string.h>

using namespace std;


int hash_calc_sv2(char x[],const int size)
{
	int StringLength,HashKey,i,tmp;
	StringLength=strlen(x); //Начало вычисления ключа
		HashKey=0;
		if (StringLength%2==0) //Чётный случай
		{
			for (i=0; i<StringLength; i=i+2)
			{
				tmp=x[i];
				tmp=tmp*1000;
				tmp=tmp+x[i+1];
				HashKey=HashKey+tmp;
			}
		}
		if (StringLength%2!=0) //Нечётный случай
		{
			for (i=1; i<=StringLength; i=i+2)
			{
				tmp=x[i];
				tmp=tmp*1000;
				tmp=tmp+x[i+1];
				HashKey=HashKey+tmp;
			}
			HashKey=HashKey+x[0];
		} //конец вычисления ключа
		return (HashKey);
}

int hash_calc(char x[],const int size)
{
	int StringLength,HashKey,i;
	StringLength=strlen(x); //Начало вычисления ключа
	HashKey=0;
	for (i=0; i<=StringLength; i++)
	{
		HashKey=HashKey+x[i];
	}
	return (HashKey);
}



int main(void)
{
	int N=19;
	char st[N][10];
	int j,k,keyd[N],ht[N],ArrOfSin[N];
	
	strcpy(st[0],"zero");
    strcpy(st[1],"one ");
    strcpy(st[2],"twoa");
    strcpy(st[3],"three");
    strcpy(st[4],"four"); 
    strcpy(st[5],"five");
    strcpy(st[6],"six");
    strcpy(st[7],"seven");
    strcpy(st[8],"eight");
    strcpy(st[9],"nine");
    strcpy(st[10],"ten");
    strcpy(st[11],"eleven");
    strcpy(st[12],"twelve");
    strcpy(st[13],"thirteen");
    strcpy(st[14],"fourteen");
    strcpy(st[15],"fifteen");
    strcpy(st[16],"sixteen");
    strcpy(st[17],"seventeen");
    strcpy(st[18],"eighteen");
    strcpy(st[19],"nineteen");
    
    for (j=0; j<=N; j++) //Инициализация массивов
    {
		ht[j]=-1;
		ArrOfSin[j]=-1;	
	}
	k=0;
    for (j=0; j<=N; j++) //Заполнение хэш таблицы
    {
		keyd[j]=hash_calc_sv2(st[j],strlen(st[j]))%(N+1); //(свёртка 2) mod (количество строк)
		if (ht[keyd[j]]==-1) {ht[keyd[j]]=j;}
		else
		{
			keyd[j]=hash_calc_sv2(st[j],strlen(st[j]))%19; //Простое число
			if (ht[keyd[j]]==-1) {ht[keyd[j]]=j; cout<<j<<"\n";}
			else
			{
				ArrOfSin[k]=j;
				k++;
			}
		}
	}
	/*for (j=0; j<=N; j++) {cout<<j<<") "<<st[j]<<" * "<<keyd[j]<<"\n";}
	cout<<"\n";
	for (j=0; j<=N; j++) {cout<<"ht["<<j<<"]="<<ht[j]<<" * "<<ArrOfSin[j]<<"\n";}*/
}
Соседние файлы в папке old1