💡 자료구조

연결리스트 - 함수들 정리

ji-hyun 2021. 8. 4. 19:58

※ 인프런 강의 "C로 배우는 자료구조 및 여러가지 예제실습(권오흠 교수님)"를 보고 개인적인 복습을 위해 정리한 내용입니다.

 

 

void add ( int index, ...)

 

연결리스트의 index 번째 위치에 새로운 노드를 만들어서 삽입한다.

 

int add(int index, char *item) {
 	if (index < 0)
 		return 0;
    
 	if (index == 0) {        /* 맨 앞에 삽입하는 경우 */
 		add_first(item);
 		return 1;
 	}
    
 Node *prev = get_node(index - 1);     /* 그 이외의 경우 */
 if (prev != NULL) {      
 	add_after(prev, item);
 	return 1;
 }
 return 0;
}

 

삽입에 실패하면 0을, 성공하면 1을 반환하도록 한다.

여기서 삽입함수는 맨 앞에 삽입하는 경우와 그 이외에 삽입하는 경우로 나눌 수 있는데, 두번째 경우는 이전 노드의 주소가 필요하다.

 

 

 

 

 

 

char *remove ( int index, …)

 

index번째 노드를 삭제하고, 그 노드에 저장된 데이터를 반환한다.

 

Node *remove(int index) {
 	if (index < 0) {
 		return NULL;
 	}
 	if (index==0) {       /* 첫번째 노드 삭제 */
 		return remove_first();
 	}
 
 Node *prev = get_node(index-1);    /* 그 이외의 삭제하는 경우 */
 	if (prev==NULL)      /* 삭제할 노드가 존재하지 않음 */
 		return NULL;
 	else {
 		return remove_after(prev);
 		}
}

 

 

 

 

 

char *remove( char *item )

 

입력된 스트링을 저장한 노드를 찾아 삭제한다. 삭제된 노드에 저장된 스트링을 반환한다.

 

Node *remove(char * item) {
 	Node *p = head;
 	Node *q = NULL;
    
 	while (p!=NULL && strcmp(p->data, item)!=0) {
 		q = p;
 		p=p->next;
 }
 	if (p==NULL)
 		return NULL;
    
 	if (q==NULL)        /* 삭제할 노드가 첫번째 노드 */
 		return remove_first();
 	else
 		return remove_after(q);     /* q 다음 노드를 삭제 */
}

 

두 개의 포인터가 필요하며, q는 항상 p의 직전 노드를 가리킨다.

p가 첫번째 노드일 경우 q는 NULL이다.

 

 

 

 

 

void add_to_ordered_list ( char * item )

 

연결리스트에 데이터들이 오름차순으로 정렬되어 있다는 가정 하에서 새로운 데이터를 삽입한다.

 

void add_to_ordered_list(char *item) {
 	Node *p = head;
 	Node *q = NULL;
 	while (p!=null && strcmp(p->data, item)<=0) {
 		q = p;
 		p=p->next;
 }
 	if (q==NULL)
 		add_first(item);
 	else
 		add_after(q);
}

 

strcmp 함수

(1) str1 < str2 인 경우에는 음수 반환

(2) str1 > str2 인 경우에는 양수 반환

(3) str1 == str2 인 경우에는 0을 반환 합니다.

 

 

 

'💡 자료구조' 카테고리의 다른 글

이중연결리스트  (0) 2021.08.10
연결리스트 - 다항식  (0) 2021.08.04
연결리스트 - 순회하기  (0) 2021.08.04
연결리스트 - 삭제하기  (0) 2021.08.04
연결리스트 - 삽입하기  (0) 2021.08.02