본문 바로가기
카테고리 없음

힙기반 연결 리스트의 delete node 함수 구현

by Hyper하이퍼 2022. 12. 30.
반응형

<아이디어>

1. 링크를 무한히 돌면서 원하는 id값과 똑같으면 data를 free시켜준다.

2. n(prev->next)값이 0이 되면 return하여 무한루프를 종료한다.

3. prev = n으로 / n = n->next로 업데이트 시켜준다.

 

연결 list는 초기값 세팅과 그 변수의 업데이트를 어떻게 할 것인지가 중요한 항목이다. 

초기 data는 link 연결이 안되어 있기 때문에 규칙에 맞춰 변수들을 초기화 시켜준다.

반응형
int Delet_Data(int id)
{
    prev = &hash_table[r]; // 첫 배열의 주소를 이전 노드로 설정한다
    n = prev->next; // 첫 배열의 next에 그 다음에 들어올 노드의 주소와 연결한다.
 
}

 

 

이렇게 초기 세팅을 규칙에 맞춰 해놓으면 그 다음은 편해진다.

int Delete_Data(int id)
{
	// 코드 작성
	int r;
	
	SCORE *prev;
	SCORE *n;
	SCORE *temp;

	r = Get_Hash_Key(id); // r번째 방의 x 데이터를 찾아서 지운다.

	prev = &Hash_table[r];
	n = prev->next;

	// 무한루프로 전체를 탐색하다가 id와 같은걸 찾으면 free시킨다.
	
	for (;;)
	{
		if (n == (SCORE *)0x0) break;

		if (id == n->id) // 찾고자 하는 id가 나타나면
		{
			prev->next = n->next; // 삭제할 next의 정보를 그 전 node의 next에 전달해준다

			free(n);  // 노드를 삭제한다.
			return 1;
		}

		prev = n;   // 초기에 세팅했던 규칙과 같은 규칙으로 변수를 업데이트해준다.
		n = n->next; // 먼저 들어왔던 node(n)는 그 다음 node에 의해 이전 node(prev)로 바뀐다.
                      // 먼저 들어왔던 node(n)의 next 주소를 다음 node 주소와 맞춘다.
	}

	return -1;

}

 

반응형