연결 리스트(Linked List)는 데이터를 저장하는 선형 자료구조 중 하나로, 각 요소(Node)가 다음 요소를 가리키는 포인터를 포함하는 방식으로 연결되어 있는 구조입니다. 배열과 달리 요소가 연속된 메모리 공간에 저장되지 않고, 동적으로 메모리를 할당받아 유연하게 크기를 조정할 수 있습니다.
연결 리스트는 여러 개의 노드(Node)로 구성되며, 각 노드는 데이터(Data)와 다음 노드를 가리키는 포인터(Next)로 이루어져 있습니다.
연결 리스트의 종류는 다음과 같습니다.
연결 리스트는 주로 구조체(struct) 또는 클래스를 사용하여 구현됩니다. 기본적인 단일 연결 리스트(Singly Linked List)의 구현 방법을 예제로 설명하면 다음과 같습니다.
struct Node {
int data; // 데이터 저장
Node* next; // 다음 노드를 가리키는 포인터
}; // 새 노드 추가 (리스트 끝에 추가)
void append(Node*& head, int newData) {
Node* newNode = new Node();
newNode->data = newData;
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
return;
}
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
// 노드 삭제
void deleteNode(Node*& head, int key) {
Node* temp = head;
Node* prev = nullptr;
if (temp != nullptr && temp->data == key) {
head = temp->next;
delete temp;
return;
}
while (temp != nullptr && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == nullptr) return;
prev->next = temp->next;
delete temp;
}
| 비교 항목 | 배열 리스트(Array List) | 연결 리스트(Linked List) |
|---|---|---|
| 메모리 할당 | 고정 크기 할당(연속된 메모리 공간 사용) | 동적 크기 할당(노드별 개별 메모리 할당) |
| 삽입/삭제 성능 | 중간 삽입/삭제 시 많은 데이터 이동 필요 | 중간 삽입/삭제가 빠름 (포인터 변경만 필요) |
| 접근 속도 | O(1) (인덱스로 바로 접근 가능) | O(n) (처음부터 순차적으로 탐색) |
| 메모리 사용 효율 | 오버헤드 없음 (포인터 필요 없음) | 오버헤드 있음 (포인터 저장 공간 필요) |
결론:
요양원 선택 전 반드시 확인해야 할 체크리스트를 공개합니다. 공식 평가 자료 조회법, 방문 시 확인…
공공기관 채용 비리의 실태와 피해 지원자의 대응법을 정리했습니다. 채용 비리 신고 방법, 공익신고자 보호제도, 취준생…
주식 손실을 세금 절약에 활용하는 합법적 방법을 공개합니다. 해외주식 손익통산, ISA 계좌 활용, 연금계좌 절세까지…
배달이 예상 시간보다 크게 늦으면 취소·환불을 요청할 수 있습니다. 배달앱별 지연 취소 방법과 잘못 배달됐을…
통신비 절약의 핵심은 요금제 최적화입니다. 내 데이터 사용량 확인법, 알뜰폰 전환 비교, 위약금 없이 요금제…