반응형

2학년 1학기를 급하게 대비하면서 처음으로 한 거는 자료구조 복습!

자료구조, Data Structure는 컴퓨터가 데이터를 효율적으로 다룰 수 있도록 만드는 각종 구조를 말합니다

대부분의 자료구조는 라이브러리로 구현돼있지만, 만들 줄 알아야 한다고 생각했습니다!

 

글을 쓰면서 아래에 목록들을 추가해두겠습니다!

2. 링크드 리스트 - 1 싱글 링크드 리스트

2. 링크드 리스트 - 2 더블 링크드 리스트

2. 링크드 리스트 - 3 환형 링크드 리스트

2. 링크드 리스트 - 4 정리 + 메인 프로그램 만들기

 

 


 자료구조는 단순해서 고급 언어에는 대부분 구현돼있는 단순(Primitive)과 복합(Non-primitive)로 나뉩니다. 물론 복합으로 묶이는 구조들도 많이 구현되어 있습니다!

우선, 단순에는 int, long, double 같은 자료형들이 들어가는데 단순이라는 말처럼 한 종류의 데이터만 들어가있습니다.

반면 복합에는 배열, 링크드 리스트, 트리, 그래프 등 여러 개의, 여러 종류가 들어갈 수 있는 구조들도 있습니다.

 

 이 글에서는 복합에 속하는 것들을 위주로 설명하고 구현해보겠습니다.

복합 자료구조는 크게 두가지로 나뉘는데 하나는 선형 자료구조(Linear), 다른 하나는 비선형 자료구조(Non-linear)입니다.

선형 자료구조에는 배열, 링크드 리스트, 스택, 큐, 힙 등이 있습니다.

비선형 자료구조에는 트리, 그래프가 있습니다.

 

 자료구조는 종류와 양이 생각보다 많습니다. 기본적으로 클래스로 구현하는 경우가 많고 C로 구현하는 경우에는 헤더파일과 함수를 적극적으로 이용해서 구현합니다.

 

 어쨌든 각 포스트에서 하나씩 자료구조를 설명해보겠습니다!

그에 앞서서 우선 자료구조의 기본이 되는 노드(Node)를 설명하겠습니다.

앞에서 복합 자료구조는 여러 개의, 여러 종류의 자료구조를 포함할 수 있기 때문에 노드를 이용해서 자료를 저장하도록 합니다. 노드에는 값인 데이터(data), 총 갯수(count) 등을 자유롭게 포함시킬 수 있습니다.

이외엔 경우에 따라 이전 노드, 다음 노드 등도 포함 가능합니다.

 

간단하게 파이썬으로 노드를 구현해보겠습니다. 이걸 기본으로 한다고 생각하시면 되겠습니다!

Node.py

class Node:
    count = 0 # 총 갯수

    def __init__(self):
        self.name = ""
        self.data = "" # initialize 때는 값과 이름을 비워두겠습니다.
    
    # 노드 생성 함수
    def createNode(self, data="", name="data") -> bool: # bool값을 리턴한다는 뜻입니다.
        Node.count += 1 # 총 갯수 + 1
        if name == "data": # 기본값인 경우
            name += str(self.count) # 이름에 갯수를 붙여줍니다.
        self.name = name
        self.data = data

        return True # 완료되었다는 의미로 True를 리턴하겠습니다.
    
    # 노드 삭제 함수
    def deleteNode(self) -> bool:
        del self

        return True

	# 노드의 정보를 출력하는 함수
    def printNode(self):
        print(f"{self.name} : {self.data}")

 사실 노드 클래스 자체에는 저런 기능들을 포함시키지 않으셔도 상관이 전혀 없습니다.

배열, 링크드 리스트 같은 것들을 구현할 때마다 노드에 필요한 것이 조금씩 달라질테니까요

그래도 앞으로 이런 노드들을 이용해, 데이터를 넣고 삭제하고 변경하는 등의 기능들을 파이썬으로 구현하도록 하겠습니다.

위의 코드가 실행되는 것을 보려면 아래 코드를 실행해보세요

main.py

from Node import Node

list1 = []

for i in range(0, 10):
    newNode = Node()
    newNode.createNode(i)

    list1.append(newNode)

print(list1)

for i in list1:
    i.printNode()

print(list1[9].count)

이걸로 이번 글을 마무리하도록 하겠습니다!

반응형

BELATED ARTICLES

more