일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 함수
- Queue
- Deep Dive
- Algorithm
- blockchain
- 파이썬
- git pull
- 백준
- 클로저
- 실행 컨텍스트
- 딥다이브
- 알고리즘
- react
- 프로퍼티
- 블록체인
- var
- 변수
- 솔리디티
- nft
- Python
- 자바스크립트
- frontend
- let
- solidity
- BOJ
- 정렬
- 리액트
- Execution context
- Interview
- Javascript
Archives
- Today
- Total
공부하자
[자료구조] 링크드 리스트(Linked List) 본문
링크드 리스트
떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조.
미리 연결된 공간을 예약해야 하는 배열의 단점을 극복한 자료구조.
[ 기본 구조 및 용어 ]
현재 데이터와 다음 데이터의 주소값을 같이 가지고 있음.
노드(Node) : 데이터 저장 단위(데이터 값, 포인터)로 구성
포인터(Pointer) : 각 노드 안에서 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간
맨 앞에 있는 노드(head)의 주소만 알 수 있으면 전체의 주소값을 알 수 있음.
[ 장·단점 ]
장점
- 미리 데이터 공간을 할당할 필요 없음(<-> 배열)
단점
- 별도의 데이터 공간(포인터)이 필요, 저장 공간 효율이 안 좋음.
- 연결 정보를 찾는 시간이 필요, 접근 속도 느림
- 중간 데이터 삭제 시, 앞 뒤 데이터의 연결을 재구성해야 하는 부가적인 작업 필요
[ 더블 링크드 리스트 ]
항상 앞에서부터 검색을 해야하는 링크드 리스트의 단점을 보완한 리스트
[ 링크드 리스트 구현 ]
class Node: # 노드 생성
def __init__(self, data, next=None):
self.data = data
self.next = next
class NodeMgmt: # 링크드 리스트를 관리
def __init__(self, data):
self.head = Node(data) # 가장 처음 노드 설정
def add(self, data): # 노드 추가 함수
if self.head == ' ':
self.head = Node(data)
else:
node = self.head
while node.next: # 제일 마지막 노드 다음에 추가 해야하기 때문에 마지막 노드 찾기
node = node.next
node.next = Node(data) # 지금 추가할 노드 새로 생성
def desc(self): # 순회, 전체 노드를 출력
node = self.head
while node:
print(node.data)
node = node.next
def delete(self, data):
if self.head == ' ':
print("해당 값을 가진 노드가 없습니다.")
return
# head 삭제하는 경우
if self.head.data == data:
temp = self.head
self.head = self.head.next # 다음 노드를 head로 바꿔줌.
del temp
# 나머지(중간, 마지막) 삭제하는 경우
else:
node = self.head
while node.next:
if node.next.data == data:
temp = node.next
node.next = node.next.next
del temp
return
else:
node = node.next
'Algorithm' 카테고리의 다른 글
[Algorithm] 소수 판별 & 소수 리스트 만들기 (1) | 2022.12.27 |
---|---|
[Algorithm] 투 포인터(Two Pointers) 알고리즘 with BOJ 3273번 (0) | 2022.12.21 |
[Algorithm] 위상 정렬 (0) | 2022.08.10 |
[코테 공부] 정렬 정리 (0) | 2022.04.18 |
스택(Stack) & Memoization (0) | 2021.10.20 |
Comments