일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 제로베이스 #백엔드 #Java #Spring #개발자 #백엔드공부 #백엔드 스쿨
- DAO 연동 컨트롤러 서비스 설계
- #devops #terraform #state
- 데이터베이스 연동
- spring
- 유효성검사
- 스프링 부트 핵심 가이드
- MariaDB
- 제로베이스
- 인텔리제이
- ORM
- Swagger
- 리포지토리 인터페이스
- 프로젝트 생성
- 백엔드
- Java
- 백엔드스쿨
- 백엔드공부
- 개발자
- auditing
- DAO 설계
- 스프링부트실전가이드
- validated
- 엔티티 설계
- JPA
- Today
- Total
JeongJin's Blog
연결리스트 개념 알아보기 본문
1. 연결리스트란 (Linked List)?
- 데이터를 링크로 연결해서 관리하는 자료구조
- 자료의 순서는 정해져 있지만, 메모리상 연속성이 보장되지 않음
2. 연결 리스트의 장점
- 데이터 공간을 미리 할당할 필요 없다
- 즉, 리스트의 길이가 가변적이라 데이터 추가/삭제 용이
3. 연결 리스트의 단점
- 연결 구조를 위한 별도 데이터 공간 필요
- 연결 정보를 찾는 시간이 필요 (접근 속도가 상대적으로 느림)
- 데이터 추가, 삭제 시 앞뒤 데이터의 연결을 재구성하는 작업 필요
4. 연결 리스트의 기본 구조
- 노드(Node)
- 데이터 저장 단위로, 값과 포인터로 구성
단방향 리스트를 기준으로 데이터를 추가하는 예시를 살펴보자
- 가장 앞에 데이터 추가
1. 추가할 데이터를 담을 노드 생성
2. 링크 연결 작업
3. head 이전 작업
- 가장 뒤에 데이터 추가
1. 추가할 데이터를 담을 노드 생성
2. head로 부터 끝 노드까지 순회
3. 링크 연결 작업
- 중간에 데이터 추가
1. 추가할 데이터를 담을 노드 생성
2. head로 부터 데이터를 추가 위치 직전 노드까지 순회
3. 링크 연결 작업
* 주의할점 : 중간에 링크가 끊기지 않도록 연결 작업 필요.
- new_node.next 에 data1.next 로 연결
- data1.next에 new_node 연결
단방향 리스트를 기준으로 데이터를 삭제하는 예시를 살펴보자
* Java의 경우 GC(Garbage Collection) 기능이 존재하여 메모리를 알아서 회수한다.
그러므로 null 처리 또는 링크를 끊어주면 된다.
- 가장 앞에 데이터 삭제
1. 삭제 대상 노드 지정(delete_node)
2. head 이전 작업
3. delete_node 삭제
- 가장 뒤에 데이터 삭제
1. head로 부터 가장 끝까지 순회
2. 끝 노드 삭제
3. 삭제 이전 노드의 링크 처리
- 중간에 데이터 삭제
1. head로부터 삭제 대상 노드까지 순회 및 해당 노드 지정(delete_node)
2. 삭제 대상 이전/이후 노드의 링크 연결 작업
3. delete_node 삭제
연결리스트 경우 LinkedList가 연결리스트를 구현한 클래스이다. 그렇기 때문에 추가 삭제 를 쉽게 구현이 가능하다.
// 노드
import java.util.LinkedList;
class Node {
}
public class Main {
public static void main(String[] args) {
LinkedList<Node> list = new LinkedList<>();
} |
- 노드 클래스를 생성한 후 제너릭 변수로 선언해서 사용하면 된다.
'1일1공부 > 선형자료구조' 카테고리의 다른 글
해시 테이블 개념과 자바로 구현해보기 (0) | 2023.09.13 |
---|---|
데크의 개념과 자바로 구현해보기 (0) | 2023.09.13 |
큐의 개념과 자바로 구현해보기 (0) | 2023.09.12 |
스택의 개념과 자바로 구현해 보기 (0) | 2023.09.12 |
배열의 개념과 자바로 구현해 보기 (0) | 2023.09.11 |