200105 TIL

1 minute read

Linked List

떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조

필요할 때마다 데이터를 추가하기 용이함. (기존의 배열은 다 짜놓고 하기 때문에 데이터를 추가하기 어려운 단점이 존재함)

  • Node: 데이터 저장 단위(데이터값, 포인터)로 구성됨
  • Pointer: 각 노드 안에서 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간
class Node:
  def __init__(self, data, next = None):
  self.data = data
  self.next = next

배열과 링크드리스트의 차이

배열은 미리 확보한 공간에 빈 공간 없이 데이터를 저장해야 하는데, 링크드 리스트의 경우 이러한 단점을 해결하게 위해 생성됨

데이터를 추가하고 싶다면, 노드를 만들어서 연결만 해주면 되기 때문!

링크드리스트 이용

하나의 노드에는, 데이터와 주소를 저장해야 하는데, 이렇게 두 개를 저장하려면 클래스를 이용하는 것이 편리하다.

링크드리스트의 장단점

  • 장점: 미리 데이터 공간을 할당하지 않아도 됨

  • 단점: 연결을 위한 데이터 공간이 별도로 필요함, 연결 정보를 찾는 시간이 필요함, 중간의 데이터 삽입 또는 삭제시 연결을 재구성해야 함

(단점이 굉장히 많지만.. 정해진 공간 할당이 어려운 경우가 있기 때문에 사용되는 경우가 분명 있다)

간단한 링크드리스트 구현

 
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: # next 가 None 이 아니면
        node = node.next
      node.next = Node(data)
      
  def desc(self):
    node = self.head
    while node:
      print(node.data)
      node = node.next

맨날 까먹는 내용 T.T

  • join 함수: Python을 사용할 때, join()을 사용하여 리스트의 요소들을 붙여 문자열로 출력할 수 있다.
    print(" ".join(list))
    
  • 리스트 거꾸로 출력: 리스트나 문자열을 거꾸로 출력하고 싶을 때는, [::-1]와 같이 사용하면 거꾸로 출력할 수 있다.
    list.append(cmd[j][::-1])
    

Categories:

Updated: