언어/자료구조
[자료구조]#2_원형 연결 리스트(Circular Linked List)
Hardii2
2022. 12. 20. 17:49
[자료구조]#2_원형 연결 리스트(Circular Linked List)
선형 자료 구조 중 "원형 연결 리스트"에 대해 알아보겠습니다.
Overview
- 원형 연결 리스트
- 삽입, 제거 알고리즘
원형 연결 리스트
1. 원형 연결 리스트
- 원형 연결 리스트는 연결 리스트의 마지막 노드가 "nullptr" 가리키지 않고, 연결 리스트의 첫 번째 노드를 가리키는 자료구조입니다.
삽입, 삭제 알고리즘
1. 삽입
#include <iostream>
#include <string>
using namespace std;
typedef struct _Node {
string Name;
struct _Node* Next;
}Node;
int main()
{
Node* Head;
Node* Node_1 = new Node();
Node_1->Name = "First";
// 1. 최초의 원형 리스트 생성
if (Head->Next == nullptr)
{
Head = Node_1;
// 주의! nullptr가 아니라 다시 Head를 가리킵니다.
Node_1->Next = Head;
}
// 2. 원형 리스트의 삽입
Node* Node_2 = new Node();
Node_2->Name = "Second";
Node_2->Next = Node_1->Next;
Node_1->Next = Node_2;
}
Details
- 원형 연결 리스트의 삽입 알고리즘은 단일 연결 리스트의 것과 크게 다름이 없습니다.
- 다만, 리스트의 끝 단에 위치할 노드의 "링크 포인터"가 nullptr를 가리키는지, Head를 가리키는지 눈여겨봐야 합니다.
2. 삭제
int main()
{
//...
// 원형 리스트의 삭제
Node_1->Next = Node_2->Next;
Node_2->Next = nullptr;
Node_2->Name.clear();
delete Node_2;
//...
}
Details
- 원형 연결 리스트의 삭제 알고리즘은 '더' 간단합니다.
- 삭제할 노드의 이전 노드에게 다음 노드를 가리키는 포인터를 전달해주고, 연결을 끊어버리면 됩니다.