int insert_key( node *head, int f_key, int i_key )
삽입노드 선언
탐색노드 선언 및 head다음노드로 설정
key값을 찾거나 꼬리에 도달할때까지 반복
탐색노드를 다음노드로 이동
if( key값을 찾으면 )
삽입노드 할당 및 key값 설정 ( 할당에 실패하면 함수 종료 )
삽입노드 다음을 탐색노드 다음으로 설정
탐색노드 다음을 삽입노드로 설정
success 반환
else if( 꼬리라면 )
에러메세지 출력
fail 반환
- 성공시
- 실패시
- 인자값
- head : head 주소값
- i_key : 삽입할 노드의 key 값
|
int insert_key( node *head, int f_key, int i_key )
{
node *i_node = NULL;
node *s_node = head->next; // 탐색노드
while( s_node->next != NULL && s_node->key != f_key ) // key값을 찾거나 꼬리에 도달할때까지
{
s_node = s_node->next;
}
if( s_node->key == f_key ) // key값일경우
{
i_node = (node *)malloc( sizeof(node) );
if( i_node == NULL ) // 할당에 실패했을때
{
fputs( "Failed to allocate for Insert node\n", stdout );
return fail;
}
i_node->next = s_node->next;
i_node->key = i_key;
s_node->next = i_node;
return success;
}
else if( s_node->next == NULL ) // 꼬리일경우
{
fputs( "Search node is tail.\n", stdout );
return fail;
}
}
| |
int delete_key( node *head, int d_key )
탐색노드 선언 및 head 다음노드로 설정
탐색노드를 따라갈 이전노드 선언
탐색노드가 key값을 찾거나 꼬리에 도달할때까지 반복
이전노드를 탐색노드로 설정
탐색노드는 다음노드로 이동
if( key값을 찾았으면 )
이전노드 다음노드를 탐색노드 다음노드로 설정
탐색노드 해제
success 반환
else if( 꼬리라면 )
에러메세지 출력
fail 반환
- 성공시
- 실패시
- 인자값
- head : head 주소값
- int d_key : 삭제할 노드의 key 값
|
int delete_key( node *head, int d_key )
{
node *s_node = head->next; // 탐색노드
node *p_node = head; // 탐색노드를 따라갈 이전노드
while( s_node->next != NULL && s_node->key != d_key ) // key값을 찾거나 꼬리에 도달할때까지
{
s_node = s_node->next;
p_node = p_node->next;
}
if( s_node->key == d_key ) // key값일경우
{
p_node->next = s_node->next;
free( s_node );
return success;
}
else if( s_node->next == NULL ) // 꼬리일경우
{
fputs( "Search node is tail.\n", stdout );
return fail;
}
}
| |