Python
[OOP] Linked List 자료구조 만들기
SCodaily
2023. 3. 19. 21:26
Linked List란?
- Linked List란?
배열 -> 연결된 공간에 데이터 나열
Linked List -> 각각의 공간에 존재하는 데이터를 연결해서 관리
- Linked List의 구성 요소 및 용어
노드(Node) : 데이터 저장 단위 -> 데이터 값, 포인터로 구성
-> 포인터(Pointer) : 노드 끼리의 연결 정보 저장
헤드(Head) : Linked List의 시작을 의미, 데이터 값으로 NULL을 가짐
Linked List 기본 구성 요소 구현
- Attribution ( 속성 )
Linked List의 구성 요소 : head, node, pointer
Node의 구성 요소 : value(값), pointer
-> Node 클래스 생성
-> Linked List 클래스 생성
-> Node 클래스 상속
1. Node 클래스 생성자 ( Attribution )
class Node:
def __init__(self, value):
self.data = value
self.next = None
2. Linked List 클래스 생성자 ( Attribution )
-> 노드 상속
class Linked_List:
def __init__(self):
self.head = Node(None)
- Method ( 주요 기능 )
class Node:
def __init__(self, value):
self.data = value
self.next = None
class Linked_List:
def __init__(self):
self.head = Node(None)
def addlist(self, value):
new_node = Node(value)
current_node = self.head
while current_node.next:
current_node = current_node.next
current_node.next = new_node
def deletenode(self, idx):
target = 0
prev_node = self.head
if prev_node.next is None:
return print("List is Empty")
next_node = prev_node.next
while next_node.next is not None and target != idx:
next_node = next_node.next
prev_node = prev_node.next
target += 1
prev_node.next = next_node.next
return print(f"{idx}th node delete, value : {next_node.data}")
def find(self, value):
current_node = self.head
idx = -1
while current_node is not None:
if current_node.data == value:
return print(f"Node at {idx}")
current_node = current_node.next
idx += 1
return print("Node not found")
def size(self):
current_node = self.head
res = 0
while current_node.next:
current_node = current_node.next
res += 1
return print(f"size : {res}")
def printlist(self):
current_node = self.head
while current_node.next:
current_node = current_node.next
print(current_node.data, end=" ")
print()
ls1 = Linked_List()
ls1.addlist(1)
ls1.addlist(2)
ls1.addlist(3)
ls1.addlist(4)
ls1.printlist()
# 출력 : 1 2 3 4
ls1.find(1)
# 출력 : Node at 0
ls1.deletenode(0)
# 출력 : 0th node delete, value : 1
ls1.find(1)
# 출력 : Node not found
ls1.printlist()
# 출력 : 2 3 4
ls1.size()
# 출력 : size : 3