现在的位置: 首页 > 综合 > 正文

代码

2013年02月18日 ⁄ 综合 ⁄ 共 2409字 ⁄ 字号 评论关闭
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <fstream>
#include<conio.h>
#include<time.h> 
#define N 10
using namespace std;
#define  HASHSIZE 1201
#define  SIZE 1000  

typedef struct MapNode{
	MapNode    *next;
	//unsigned int nHashValue; 
	char   *name;    //key
	//char   *value;  //value
}MapNode;

static MapNode *hashtab[HASHSIZE];

unsigned int Hash(char *str)	
{
	//8
	//unsigned int hashval = 1;
	//unsigned int g = 4;
	unsigned int hashval = 0;
	unsigned int g;
	long n=0x100; 
	int r ;

	for(hashval = 0; *str != '\0';str++)
	{
		//1
		//hashval = *str + 31 * hashval;
		//2
		//hashval = *str + 32 * hashval+hashval;
		//3		
		//hashval=(hashval<<5)+hashval+*str;
		//4
		//hashval = hashval*31 + *str++;
		//5
		//hashval=(hashval<<5)+hashval+*str++;
		//6
		/*hashval = (hashval << 4) + *str++; 
		if ((g = (hashval & 0xF0000000))) { 
			hashval = hashval ^ (g >> 24); 
			hashval = hashval ^ g; 
		}*/
		//7
		/*
		g=n|(*str); 
		n+=0x100; 
		r= (int)((g>>2)^g)&0x0f; 
		hashval=(hashval * (32-r)); 
		hashval&=0xFFFFFFFFL; 
		hashval^=g*g; 
		*/
		//8
// 		hashval^= (((hashval & 63)+g)*(*str++))+ (hashval << 8); 
// 		g+=3; 
		 //9
		hashval *= 16777619; 
		hashval ^= (unsigned int) *(unsigned char*) str; 

	}
	return hashval % HASHSIZE;
}

MapNode *lookup(char *str)
{
	MapNode *np;

	for(np = hashtab[Hash(str)]; np != NULL; np = np->next)
	{
		if(strcmp(str,np->name) == 0)
		return np;
	}
	return NULL;
}

MapNode  *insert(char *name)
{
	MapNode *mp;
	unsigned int hashval;
	
	if((mp = lookup(name)) == NULL){
		mp = (MapNode *)malloc(sizeof(MapNode));
		if(mp == NULL || (mp->name = strdup(name)) == NULL)
			return NULL;
		hashval = Hash(name);
		mp->next= hashtab[hashval];
		hashtab[hashval] = mp;
 	}
//		else
// 		free((void *)np->value);
// 	if((np->value = strdup(defn)) == NULL)
// 		return NULL;
	return mp;
}


void makeStr(void){
	int flag; 
	int j,k=0; 

	char str[11] ={};
	for(j=0;j<N;j++)  
	{  
		flag=rand()%2;    
		if(flag) 
			str[k++]='A'+rand()%26;  
		else str[k++]='a'+rand()%26; 
	} 
	str[k]='\0';  
	insert(str);
} 
int main()
{	
	ofstream os("results.txt",ios::binary);
//  	for (int i =0;i<SIZE;i++) //number 0-999
//  	{
//  		char temp[5]={};
//  		sprintf(temp,"%d",i);
//  		insert(temp);
//  	}
	srand((unsigned)time(NULL));  
	for (int i =0;i<SIZE;i++)
	{
		makeStr();	          //string 
	}
	
	int countTime1 = 0;
	int countTime2 = 0;
	int countTime3 = 0;
	int countTime4 = 0;
	
	for (int i =0;i<HASHSIZE;i++)
	{
		if (hashtab[i]!=NULL)
		{
			countTime1++;
			int Time2  = 2;
			int	Time3  = 3;
			int Time4  = 4;
			//printf("%d  ",i);
			os<<i<<" ";
			for(MapNode *np = hashtab[i]; np != NULL; np = np->next)
			{
				if(--Time2==0)
				{
					countTime2++;
				}
				if(--Time3==0)
				{
					countTime3++;
				}
				if(--Time4==0)
				{
					countTime4++;
				}
				
			//	printf("%s  ",np->name);
				os<<np->name<<" ";
			}

			//printf("\n");
			os<<endl;
		}
		
	}
	os<<countTime1<<endl;
	os<<countTime2<<endl;
	os<<countTime3<<endl;
	os<<countTime4<<endl;
	


//	MapNode *mp = lookup("555");
//	printf("%s\n",mp->name);
	printf("ok\n");
	getchar();
}

 

【上篇】
【下篇】

抱歉!评论已关闭.