C언어/문제풀다 하나씩

해쉬함수 쓰기! 나이 입력하고 이름 출력

mcdn 2020. 6. 23. 12:37
반응형
#include <iostream>
#include <string>
using namespace std;

struct node {
	string name;
	int age;
	node* next;
};
node *head[100];

int hasf(int age) {
	return age % 10;
}
void addnode(string t, int age) {
	node* temp = new node();
	temp->name = t;
	temp->age = age;
	temp->next = head[hasf(age)];
	head[hasf(age)] = temp;


}
int main() {
	addnode("Sour", 1000000005);
	addnode("Dav", 1000000002);
	addnode("Nica", 1000000003);
	addnode("Timer", 1000000006);
	addnode("Pico", 1000000015);
	addnode("Topisl", 1000000022);
	addnode("Whab", 1000000013);
	addnode("Hap", 1000000009);

	int ansage;
	cin >> ansage;
	int hasage = hasf(ansage);
	for (node* p = head[hasage];p != NULL;p = p->next) {
		if (p->age == ansage) {
			cout << p->name;
			//break;
		}
	}
}

1 해시함수 

hasf()함수다

age 가 억단위니까 %10으로 완전 줄여서 index를 형성한다. 

2 addnode

 

addnode()함수다

여기서는 메모리풀을 따로 형성하지 않았으므로 

temp에다가 new node()로 주소 할당하고 

name, age값을 다 넣은 후에 head[해쉬함수로얻은인덱스]에 바로 넣는다. 

 

반응형