/*
第2種情報処理技術者試験 平成4年度・秋期・午後 問18
BohYoh Shibata PREPARATION
*/
#include <stdio.h>
#include <string.h>
#define HASHSIZE 63
struct srec {
struct srec *next;
int price;
char *name;
};
void dprice(char *, struct srec *[]);
unsigned hash(char *);
struct srec *search(struct srec *, char *);
/* 商品名 sname を検索し,その単価を表示する */
void dprice(char *sname, struct srec *hashtab[])
{
unsigned i;
struct srec *srecp;
i = hash(sname) ;
srecp = search(hashtab[i], sname );
if (srecp != NULL)
printf("%s = %d\n", sname, srecp->price );
else
printf("%s NOT FOUND\n", sname );
}
/* 文字列 s のハッシュ値を返す関数 */
unsigned hash(char *s)
{
unsigned i = 0;
while(*s != '\0')
i += *s++;
return i % HASHSIZE;
}
/* p が指すレコードのリストから商品名 s のレコードを探す関数 */
struct srec *search(struct srec *p, char *s)
{
while(( p != NULL) && (strcmp(p->name,s) != 0))
p = p->next ;
return p;
}