
🧩 단순연결리스트(SinglyLinkedList): 데이터 → 순서를 보장한 상태에서 저장하는 자료구조
순차적저장 ✅📎 선형리스트와 단순연결리스트 비교
| 구분 | 특징 | 의미 |
|---|---|---|
| 선형리스트 (도서관장서) | ① 책장의 용량이 한정적 | → 미리 저장공간 정해져있음 ⛔️ |
| ② 책의 청구기호로 빠르게찾기 가능 | → 인덱싱기능 | |
| ③ 새로운장서가 들어오면 나머지 책 밀어내기함 | → 새로운공간 확보 후, 밀어내기 | |
| 단순연결리스트(온라인강의수강생) | ① 수강생규모가 한정적 ❌ | → 미리 저장공간 안정해져있음 ✅ |
| ② 수강신청정정으로 추가 및 삭제 가능 | → 추가 및 삭제 효율적 | |
| ③ 출석정보조회를 위해 전체정보검색 | → 인덱싱기능 ❌ |

데이터 + 다음데이터주소값 → 저장📍 head : 단순연결리스트의 첫번째 노드가 무엇인지 의미하는 정보
📍 노드 : 데이터(item) + 링크(reference)
📍 데이터 : 항목. 노드값이 저장됨
📍 링크 : 메모리주소. 다음 노드 위치를 알려줌
>>> class Node(): # Node 데이터형 정의 -> class 사용
def __init__(self): # class 생성자
self.data = None # 데이터공간
self.link = None # 링크공간
📍 1. 서울 노드정의
>>> node1 = Node() # 객체생성
>>> node1.data = "서울" # 생성자값주입
📍 2. 대구 노드정의
>>> node2 = Node() # 객체생성
>>> node2.data = "대구" # 생성자값주입
>>> node1.link = node2 # node1 링크 연결
📍 3. 부산 노드정의
>>> node3 = Node() # 객체생성
>>> node3.data = "부산" # 생성자값주입
>>> node2.link = node3 # node2 링크 연결
📍 단순연결리스트 출력
# Link.link•••로 데이터 뽑아냄
>>> print(node1.data, end = '')
>>> print(node1.link.data, end = '')
>>> print(node1.link.link.data, end = '')
📍 단순연결리스트 탐색함수
>>> current = node1 # 첫번째노드 -> 현재노드로 지정
>>> print(current.data, end = '')
# current 링크가 없을때까지 반복
>>> while current.link != None:
# 현재노드의 다음노드 -> current로 지정
current = current.link
print(current.data, end = '')
Head : 첫번째 노드Current(현재) : 현재 처리중인 노드Pre(이전) : 현재 처리중인 앞 노드
📍 단순연결리스트 데이터삽입(중간)
>>> current = head # current 제일 처음부터 시작
>>> while 마지막노드까지:
pre = current # pre노드 -> 한칸씩이동
current = current.link # current노드 -> 한칸씩이동
if current.data == "부산":
node = Node() # 새로운노드 생성
node.data = "포항" # 새로운노드 생성자주입
# 새로운 노드 연결
node.link = current
pre.link = node
📍 단순연결리스트 데이터삽입(첫번째)
>>> newNode = Node() # 새로운노드(객체)생성
>>> newNode.data = "파주" # 새로운노드 생성자주입
>>> newNode.link = Head # 새로운노드 링크 -> 기존 Head에 연결
>>> Head = newNode # 새로 Head 재지정
📍 단순연결리스트 데이터삽입(마지막)
>>> current = 마지막노드
>>> node = Node() # 새로운노드(객체)생성
>>> node.data = "제주" # 새로운노드 생성자주입
>>> current.link = node # 마지막노드링크 -> 새로운노드
📍 단순연결리스트 데이터삭제(첫번째)
>>> current = head # 동시에 가리킴
>>> head = head.link # 헤드 -> 두번째로 옮김
>>> del(current) # 첫번째 노드 삭제
📍 단순연결리스트 데이터삭제(지정)
>>> current = head # 동시에 가리킴
>>> while 마지막노드까지:
pre = current
current = current.link # 한칸씩 이동
if current.data = "대구": # 원하는노드에 도착
pre.link = current.link # 이전과 이후 연결
del(current)
📍 노드검색
>>> current = head
>>> if current.data = "대구"
return current
>>> while current.link != None:
current = current.link
if current.data = "대구"
return current
return Node() # 빈 노드 반환
| 항목 | 조회 | 삽입 | 삭제 |
|---|---|---|---|
| 선형리스트 | O(1) | O(n) | O(n) |
| 단순연결리스트 | O(n) | O(1) | O(1) |