배열은 순차적으로 연결된 공간에 데이터를 나열하는 구조
배열은 미리 공간을 예약해둬야 한다는 단점이 있다.
이 단점을 해결한 것이 연결 리스트(Linked List)이다.
연결 리스트는 미리 공간을 예약 해두지 않아도 필요할 때 마다 데이터를 추가할 수 있는 구조.
연결 리스트는 데이터와 다음 데이터를 가리키는 주소가 결합되어 하나의 노드라고 부른다.
최초의 노드를 만들고
다음의 추가할 노드를 만든다.
그 후에 최초의 노드의 포인터에 추가할 노드의 데이터의 주소값을 가리키도록 한다.
연결 리스트에 있는 노드 들 중에 주소 값이 없는 노드가 있다면 그 노드가 마지막 노드일 수 있다.
class Node:
def __init__(self, data, next = None):
self.data = data
self.next = next
def add(data):
node = head
while node.next:
node = node.next
node.next = Node(data)
def insert(data, index):
node = head
insert_node = Node(data)
for i in range(index-1):
node = node.next
insert_node.next = node.next
node.next = insert_node
# node_next = node.next
# node.next = insert_node
# insert_node.next = node_next
노드 등록, 추가, 삽입을 구현해보았다.
data와 주소값을 가지는 생성자를 만들었다. (주소 값을 넣지 않을 경우를 디폴트로)
add는 추가하고자 하는 노드를 가장 뒤에 만드는 메소드이다.
insert는 추가하고자 하는 노드를 기존에 있던 노드와 노드 사이에 넣고자 할 때 사용한다.
insert는 강의에서 본 것과는 다르게 나름대로 생각해서 연결 리스트의 인덱스를 기준으로 삽입할 수 있도록 구현해봤다.
주석 처리 한 부분은
삽입하고자 하는 노드를 기존의 노드와 연결하는 코드인데, 강사님은 저것과 비슷한 방법으로 하셨다.
'Algorithms > 패캠 알고리즘 강의' 카테고리의 다른 글
시간 복잡도(2) (0) | 2020.01.21 |
---|---|
시간 복잡도(1) (0) | 2020.01.20 |
연결리스트(4) (0) | 2020.01.17 |
연결 리스트(3) (0) | 2020.01.17 |
연결리스트(2) (0) | 2020.01.17 |