728x90
단일 연결 리스트의 노드 탐색은 한계점이 많다.
탐색 방향이 일편적이고, 순차적으로 노드의 수를 세어나가서
원하는 요소에 접근해야 한다는 점이 있다.
1. 노드 탐색
1
2
3
4
5
6
7
8
9
10
11
12
|
Node* search_Node(Node* Head, unsigned short SearchValue, unsigned short *search_count)
{
Node* Current = Head;
while (Current->Data != SearchValue)
{
Current = Current->Next;
(*search_count)++;
}
return Current;
}
|
2. 노드 탐색 실행 결과
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
void main(void)
{
Node* List = NULL;
Node* NewNode = NULL;
unsigned short search_count = 1;
NewNode = Create_Node(100);
AddNode(&List, NewNode);
NewNode = Create_Node(200);
AddNode(&List, NewNode);
NewNode = Create_Node(300);
AddNode(&List, NewNode);
NewNode = search_Node(List, 300, &search_count);
printf("search value = %d\nserch_count = %d\n", NewNode->Data, search_count);
search_count = 0;
}
|
3. 노드 삭제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
Node* delete_Node(Node** Head, Node* RemoveItem)
{
if (*Head == RemoveItem)
{
*Head = RemoveItem->Next; //이전 노드가 삭제한 노드가 가리킨 다음 노드를 가리키게함.
}
else
{
Node* Current = *Head;
//삭제할 노드를 찾을때까지 순차적으로 다음노드를 탐색한다.
while (Current != NULL && Current->Next != RemoveItem)
{
Current = Current->Next;
}
if (Current != NULL) //이전 노드가 삭제한 노드가 가리킨 다음 노드를 가리키게함.
{
Current->Next = RemoveItem->Next;
}
}
}
|
삭제시킬 노드를 반환해서 free를 통해 할단된 노드의 메모리를 해제 시켜주는것이 바람직하다.
4. 노드 삽입
1
2
3
4
5
|
void InsertNode(Node* head, Node* NewItem)
{
head->Next = NewItem; //기존 노드의 링크에 새 노드를 가리키게 하고,
NewItem->Next = head->Next; // 새로운 노드의 링크에 기존 노드가 가리킨 링크를 걸자
}
|
300x250
'DataStructure' 카테고리의 다른 글
단일 리스트로 스택 구현하기 -Stack- C 언어 (0) | 2019.06.05 |
---|---|
이중 연결 리스트 -Double Linked List(2) (삭제, 삽입, 생성,추가) - C 언어 (0) | 2019.06.03 |
단일 연결 리스트 -Linked List(1) (노드생성, 삭제, 추가) - C 언어 (0) | 2019.04.07 |
댓글