알고리즘(LinkedList)-2022.02.01

Jonguk Kim·2022년 2월 3일
0

알고리즘

목록 보기
7/7

1. Array vs LinkedList

배열

  • 인덱스를 이용해 즉시 접근 가능 ( O(1)의 시간 복잡도 )
  • 중간에 삽입/삭제 하려면 모든 원소 이동 ( 최악의 경우 O(N)의 시간 복잡도 )

링크드리스트

  • 특정 원소 접근하려면 연결고리 탐색 (최악의 경우 O(N)의 시간 복잡도 )
  • 원소 중간에 삽입/삭제하기 위해서는 포인터만 변경하면 됨 ( O(1)의 시간 복잡도 )

2. 클래스

class Person:
    # 파이썬 생성자 함수 이름은 __init__ 으로 고정 
    def __init__(self, param_name):
        print("hihihi", self)
        self.name = param_name

    def talk(self):
        print("안녕하세요 저는", self.name, "입니다")

person_1 = Person("유재석")  # hihihi <__main__.Person object at 0x1067e6d60> 이 출력됩니다!
print(person_1.name)  # 유재석
person_1.talk()  # 안녕하세요 저는 유재석 입니다

person_2 = Person("박명수")  # # hihihi <__main__.Person object at 0x106851550> 이 출력됩니다!
print(person_2.name)  # 박명수
person_2.talk()  # 안녕하세요 저는 박명수 입니다

3. 링크드 리스트 구현

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self, value):
        self.head = Node(value)  # head 에 시작하는 Node 를 연결합니다.

    def append(self, value):     # LinkedList 가장 끝에 있는 노드에 새로운 노드를 연결합니다.
        cur = self.head         
        while cur.next is not None: # cur의 다음이 끝에 갈 때까지 이동합니다. 
            cur = cur.next          
        cur.next = Node(value)
        
    def print_all(self):
        cur = self.head
        while cur is not None:
            print(cur.data)
            cur = cur.next

# 5 -> 12 -> 8 형태로 노드를 연결
linked_list = LinkedList(5)
linked_list.append(12)
linked_list.append(8)

linked_list.print_all()
profile
Just Do It

0개의 댓글