Linked List(링크드 리스트, 연결 리스트)
- 서로 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조
- 추상적 자료구조(Abstract Data Structures)
Linked List 특징
- Node(노드)와 Pointer(포인터)로 서로 연결하여 구성
- Node(노드): 데이터 저장 단위(데이터 값, 포인터)로 구성
- Pointer(포인터): 각 노드 안에서, 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간
- 본래 C언어에서 주요한 데이터 구조였으나, Python에서 List로 구현 가능
Linked List 장점
- 데이터 공간을 미리 할당하지 않아도 됨
(배열은 미리 데이터 공간을 할당 해야함)
Linked List 단점
- 연결을 위한 별도 데이터 공간이 필요, 저장공간 효율이 높진 않음
- 연결 정보를 찾는 시간이 필요하므로 접근 속도가 느림
- 중간 데이터 삭제 시, 앞뒤 데이터의 연결을 재구성해야 하는 부가적인 작업 필요
Linked List 구현 with Python
Node 구현
class Node:
def __init__(self, data):
self.data = data
self.next = None
def add(data):
node = head
while node.next:
node = node.next
node.next = Node(data)
node1 = Node(1)
head = node1
for index in range(2, 10):
add(index)
node = head
while node.next:
print(node.data)
node = node.next
print (node.data)
1
2
3
4
5
6
7
8
9
링크드 리스트 데이터 사이에 데이터 추가 기능
- 노드가 맨앞 또는 맨뒤가 아닌 중간에 추가될 경우를 구현
node3 = Node(1.5)
node = head
search = True
while search:
if node.data == 1:
search = False
else:
node = node.next
node_next = node.next
node.next = node3
node3.next = node_next
node = head
while node.next:
print(node.data)
node = node.next
print(node.data)
1
1.5
2
3
4
5
6
7
8
9
특정 노드 삭제
def delete(self, data):
if self.head == '';
print("해당 값을 가진 노드가 없습니다.")
return
if self.head.data == data:
temp = self.head
self.head = self.head.next
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
Linked List with Python
class Node:
def __init__(self, data):
self.data = data
self.next = None
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
if self.head.data == data:
temp = self.head
self.head = self.head.next
del temp
else:
node = self.head
while node.next:
if node.next.data == data:
temp = node.next
node.next = node.next.next
del temp
pass
else:
node = node.next
def search_node(self, data):
node = self.head
while node:
if node.data == data:
return node
else:
node = node.next
node_mgmt = NodeMgmt(0)
for data in range(1, 10):
node_mgmt.add(data)
node = node_mgmt.search_node(4)
print(node)
4