#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct data{
char name[20];
int score;
struct data* next;
} student;
student *hashtable[111];
int tablesize=111;
int hash(char s[]){
int i = 0;
while(*s){
i+=*s++;
}
return i%tablesize;
}
void init_hashtable(void){
for (int i = 0; i <= tablesize; i++){
hashtable[i]=NULL;}
}
int hdata(char name[]){
student *i;
i=hashtable[hash(name)];
do{ if(i!=NULL){
if(i->name==name){return i->score;} i=i->next;} else{break;} } while(i!=hashtable[hash(name)]);
}
void create_key( char name[], int score){
student *tmp=malloc(sizeof(student));
tmp->score=score;
tmp->next=NULL;
strcpy(tmp->name,name);
//重複確認
student *i;
int k=0;
i=hashtable[hash(name)];
do{
if(i!=NULL){
if(i->name==name){k=1;}
i=i->next;}
else if(i==NULL){
break;
}
}
while(i!=hashtable[hash(name)]);
if(hashtable[hash(name)]==NULL){
hashtable[hash(name)]=tmp;
}
else if(k){printf("登録済みです");}
else{
student *head;
head=i;
while(i->next=head){i=i->next;}
tmp->next=i->next; i->next=tmp; }
}
/-------------------------------/
/------------- main ------------/
/-------------------------------/
int main(void){
init_hashtable();
create_key("A",100);
printf("%d",hdata("A"));
}
ハッシュをチェイン法で作りたかったのですが、うまくいかず、どこかでループ個所がおかしいのですが、見直してもどこがおかしいのかいまいちわかりません。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー