연결리스트자료 구조/알고리즘2024. 11. 22. 13:07
Table of Contents
반응형
1. 선형 구조란?
- 자료 구조의 분류
구조설명종류
선형 구조 | 데이터를 연속적으로 연결한 자료 구조 | 리스트, 스택, 큐, 데크 |
---|---|---|
비선형 구조 | 데이터를 비연속적으로 연결한 자료 구조 | 트리, 그래프 |
- 리스트
2. 연결리스트란?
개념
- 연속된 노드(Node)의 연결체
- 데이터를 감싼 노드를 포인터로 연결해서 공간적인 효율성을 극개화시킨 자료 구조
노드(Node)
- 연결리스트에서 사용되는 하나의 데이터 덩어리이며, 데이터 & 링크이 2가지의 필드를 담고 있는 구조
- data : 노드가 담고 있는 데이터/값, 문자열, 숫자 등등 원하는 값을 넣고 저장
- next : 링크/ 포인터 역할, 다음 노드의 주소를 저장
- 양방향 연결 리스트의 경우 prev 포인터(이전 노드의 주소)추가
연결 리스트의 구조
- 마지막 연결할 것은 없기에 null과 연결
- 연결리스트의 첫 번째 즉, 시작 지점에 있는 것을 head라고 함
- 연결리스트의 마지막은 tail라고 부름
배열 vs 연결리스트
배열
- 배열은 메모리 공간 안에 모든 원소들이 이어진 공간에 자리 잡음
- 인덱스를 통해 원소 탐색을 효율적으로 빠르게 실행 가능
- random access 가능 : 배열의 n번째 원소 방문 시 O(1) 시간으로 가능 EX. arr[3]
- 원소 삽입 & 삭제 일반적으로 O(N) 시간 소요 ⇒ 원소 개수 대로 늘어남
연결리스트
- 이어진 메모리 공간이 아닌 불특정한 공간에 존재
- 그렇기 때문에 포인터, 주소를 참조하는 것을 통해 연결
- 노드의 탐색은 선형시간이 걸림
- c를 가려면 a, b를 거쳐 감
- random access 불가능 : 리스트의 n번째 노드 방문 시 O(N)시간 소요 ⇒ head 노드부터 n번째 노드까지 순회
- 상황에 따라 배열보다 빨라질 수 있는 노드 삽입 & 삭제
- 연결리스트의 노드를 맨 앞에 삽입 시켜줄 때는 head 노드의 참조위치만 달라지기 때문 O(1) 처리 가능
연결리스트의 종류
Singly Linked List(단일 연결 리스트)
- 대부분의 연결리스트의 문제의 주력
- 다음 노드에 대한 포인터만 가지고 있다
- 일방향이다.
Doubly Linked List(이중 연결 리스트)
- 다음 노드에 대한 포인터와 이전 노드를 가르치는 포인터를 가지고 있다.
- 앞 뒤로 탐색하는 게 빠르다는 장점이 있지만, 노드마다 2개의 포인터를 가져야 해서 데이터의 구조와 흐름이 복잡해질 수 있음
Circular Linked List(원형 연결 리스트)
- 이중연결리스트와 같지만 마지막 노드의 next 포인터가 헤드 노드를 가르친다.
연결리스트 구현 방법
노드의 구현 방법
class Node{
constructor(data){
this.data = data;
this.next = null;
}
}
연결리스트
let head = new Node("a");
head.next = new Node("b");
head.next.next = new Node("c");
head.next.next.next = new Node("d");
- 시작점 : head 변수에 새로운 노드를 a라는 변수와 함께 생성
- head라는 노드에 next라는 참조 포인터를 새로 생성할 노드 b로 지정
- 노드 b를 새로 생성한 노드 c로 지정
- 마지막 노드 지정
반응형
'자료 구조 > 알고리즘' 카테고리의 다른 글
구현 알고리즘 (1) | 2024.11.14 |
---|---|
그리디 알고리즘이란? (2) | 2024.11.08 |
@mellona :: 주니어의 다사다난 성장기
안녕하세요. si 회사 소속 sm LMS 팀에 소속중인 1년차 백엔드 개발자입니다😀 함께 나누고 성장하는 것을 좋아해요. 언제든 디스코드나 구글 메일로 질문해도 됩니다!
⭐ 잘못된 내용은 댓글 적어주세요 :)