티스토리 뷰
Python/알고리즘_with Python
[자료구조] : 링크드 리스트(Linked List) - 단순연결리스트(Singly linked list)
샰롯 2022. 6. 15. 01:01링크드 리스트(Linked List) - 단순연결리스트(Singly linked list)
- 연결 리스트라고도 한다.
- 배열(Array)
→ 장점 : 빠르게 접근이 가능하다.
→ 단점 : 메모리 사용이 비 효율적
배열 내의 공간을 미리 확보하여 구성하므로 데이터를 추가로 넣기 어렵다.
- 연결리스트(Linked List)
- 링크드 리스트는 떨어진 곳에 존재하는 데이터를 포인터로 연결해, 관리하는 데이터 구조
- 파이썬은 리스트 타입이 링크드 리스트의 기능을 모두 지원 한다.
→ 장점 : 삽입과 삭제가 편하다.
사용 후 메모리의 재사용이 가능하다.
메모리 공간을 미리 할당하지 않아도 되어 데이터를 추가, 제거, 등이 편하다.
→ 단점 : 포인터의 사용으로 저장공간 또한 추가로 사용한다.
알고리즘이 복잡하다.
특정 자료의 탐색 시간이 많이 소요된다.
중간에 데이터를 삽입, 삭제시 노드 연결을 재 구성해야한다.
- 용어
→ 노드(Node) : 데이터 저장 단위 (데이터값, 포인터)로 구성
→ 포인터(Pointer) : 각 노드 안에서 다음, 이전의 노드와 연결 주소를 가지고 있는 공간
→ head : 가장 첫 번째 노드
→ tail : 가장 마지막 노드
→ get_all() : 모든 노드의 데이터 가져오기
→ get_Node() : 인덱스에 해당하는 노드 가져오기
→ append_() : 기존 Tail 노드에 새 노드 추가
→ insert_() : 기존 인덱스에 새 노드 삽입
→ delete() : 인덱스에 해당하는 노드 제거
Singly Linked List

append_() :
연결리스트에 노드가 추가될 때



insert_() :
연결리스트의 특정 위치에 노드가 추가될 때



delete() :
연결리스트의 특정 위치의 노드가 제거될 때


Python 구현
class Node:
"""
파이썬으로 Node 구현
---------------------
"""
def __init__(self, data):
self.data = data
self.pointer = None
class SinglyLinkedList:
"""
파이썬으로 단순 연결리스트 구현
-------------------------------
get_all : 모든 노드 데이터 가져오기
get_Node : 인덱스에 해당하는 노드 가져오기
append_ : 기존 Tail 노드에 새 노드 추가
insert_ : 기존 인덱스에 새 노드 삽입
delete : 인덱스에 해당하는 노드 삭제
"""
def __init__(self, data):
"""
Head 노드 생성
"""
self.head = Node(data)
def get_all(self):
cursor = self.head
while cursor != None:
print(cursor.data)
cursor = cursor.pointer
def get_Node(self, index_):
"""
return 노드
index_ : 노드 인덱스
"""
cursor = self.head
count_ = 0
while index_ > count_:
count_ += 1
cursor = cursor.pointer
return cursor
def append_(self, data):
"""
return None
data : 추가할 데이터
"""
cursor = self.head
while cursor.pointer is not None:
cursor = cursor.pointer
cursor.pointer = Node(data)
def insert_(self, index_, data):
"""
return None
index_ : 노드 인덱스
data : 삽입할 데이터
"""
insert_Node = Node(data)
if index_ == 0:
insert_Node.pointer = self.head
self.head = insert_Node
return
cursor = self.get_Node(index_-1)
next_cursor = cursor.pointer
cursor.pointer = insert_Node
insert_Node.pointer = next_cursor
def delete(self, index_):
"""
return None
index_ : 노드 인덱스
"""
delete_Node = self.head
if index_ == 0:
self.head = self.head.pointer
return
cursor = self.get_Node(index_-1)
cursor.pointer = cursor.pointer.pointer
del delete_Node
# singly linked list(node head)생성
data = SinglyLinkedList('F')
→ get_all()를 사용하여 Singly Linked List의 모든 노드 데이터값 확인
# get_all()을 사용하여 생성된 singly linked list안의 모든 노드 값 출력
data.get_all()
F
→ append_()를 사용하여 생성된 Singly Linked List에 노드 추가
# 생성된 singly linked list에 노드 추가
for i in '7 prj':
data.append_(i)
→ get_all()를 사용하여 Singly Linked List의 모든 노드 데이터값 확인
# get_all()을 사용하여 생성된 singly linked list안의 모든 노드 값 출력
data.get_all()
F
7
p
r
j
→ insert_()를 사용하여 생성된 Singly Linked List의 특정 위치에 노드 추가
# 특정 인덱스에 노드 넣기
data.insert_(5, 'o')
→ get_all()를 사용하여 Singly Linked List의 모든 노드 데이터값 확인
# get_all()을 사용하여 생성된 singly linked list안의 모든 노드 값 출력
data.get_all()
F
7
p
r
o
j
→ delete()를 사용하여 생성된 Singly Linked List의 특정 위치의 노드 제거
# 특정 인덱스 노드 제거
data.delete(5)
→ get_all()를 사용하여 Singly Linked List의 모든 노드 데이터값 확인
# get_all()을 사용하여 생성된 singly linked list안의 모든 노드 값 출력
data.get_all()
F
7
p
r
j'Python > 알고리즘_with Python' 카테고리의 다른 글
| [자료구조] : 스택(Stack) & 재귀함수(recursive function) 동작방법 (0) | 2022.06.06 |
|---|---|
| [자료구조] : 큐(Queue) - 우선순위 선출, Priority (0) | 2022.06.05 |
| [자료구조] : 큐(Queue) - 후입선출, LIFO(Last-In-First-Out) (0) | 2022.06.05 |
| [자료구조] : 큐(Queue) - 선입선출, FIFO(First-In-First-Out) (0) | 2022.06.05 |
| [자료구조] : 배열(Array) (0) | 2022.05.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- anaconda
- matplotlib
- 콘다
- parameters
- 덮어쓰기
- conda
- 이스케이프 코드
- print()
- recursive
- recursive function
- 변수 덮어쓰기
- sep=
- 재귀함수 이해
- 연산속도
- Python
- arguments
- _의미
- 파이썬
- _meaning
- 파이썬 변수
- sdsad
- d asd asd
- underscore
- 재귀?
- 백준
- list comprehension
- 재귀함수 설명
- sad asd
- asd ad
- 이중 프린트
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함