1. 링크드 리스트(Linked List)
-배열과 같이 완전히 이어 붙히지 않고 지정하는 다음데이터를 가리키는 포인터를 만들어서 연결한다. 이렇게 연결된 사슬처럼 데이터를 저장하는 자료구조를 링크드 리스트(연결리스트)라고 한다.
-배열과의 차이점은 삽입,삭제가 배열보다 빠르다. 연결된 선만 바꿔주면 되기 때문이다. 단점으로는 데이터 조회시에 인덱스를 활용하지 못하므로 배열보다 느리다.
#기본적인 개념형태
class Node():
def __init__(self, data):
self.data = data
self.next = None
# 각 노드들 생성
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
n4 = Node(4)
#노드 연결
n1.next = n2
n2.next = n3
n3.next = n4
-링크드리스트
class LinkdList:
def __init__(self,data):
self.head = Node(data) #head가 노드의 객체가 된다.
def append(self, data):
pointer = self.head #head부터 출발
while pointer.next is not None:
pointer = pointer.next #None이 아니면 그다음 노드로 진행
pointer.next = Node(data) #끝에 도달하고 거기에 append
def print_(self):
pointer = self.head
while pointer.next is not None:
print(pointer.data)
pointer = pointer.next
print(pointer.data) #앞에서 마지막것은 while문에 들어가지 못하므로 여기에서 마지막것도 출력
def get_data(self, index):
pointer = self.head
while index> 0:
pointer = pointer.next
index -=1
return pointer.data
def add_(self,index, data):
add_node = Node(data)
pre_index = index-1
pointer = self.head
while pre_index>0:
pointer = pointer.next
index -=1
after_node = pointer.next #끊기전에 원래 노드
pointer.next = add_node #노드 새로연결
add_node.next = after_node #새로운노드의 next지정
def delete_(self, index):
pointer = self.head
pre_index = index-1 #삭제할 인덱스 직전
while pre_index>0:
pointer = pointer.next
index -= 1
after_node = pointer.next.next #해당 인덱스에서 두칸(중간이 삭제할 인덱스이므로) 이동
pointer.next = after_node #next를 해당 노드에 연결
a = LinkdList(1)
a.append(2)
a.append(3)
a.append(4)
a.append(5)
a.append(6)
a.print_()
######두번째 노드값
a.get_data(1)
#두번째 자리에 새로운 노드 삽입
a.add_(1,'k')
a.print_()
#두번째 노드 삭제
a.delete_(1)
a.print_()
'컴퓨터 > 자료구조와 알고리즘' 카테고리의 다른 글
자료구조와 알고리즘 - 힙(Heap) (0) | 2023.01.21 |
---|---|
자료구조와 알고리즘 - 그래프 (0) | 2023.01.08 |
자료구조와 알고리즘 - 트리구조2 (0) | 2023.01.03 |
자료구조와 알고리즘 - 트리구조 (0) | 2022.12.30 |
자료구조와 알고리즘 - 스택과 큐 (0) | 2022.12.26 |