큐는 선형 자료구조로, 먼저 들어온 데이터가 먼저 나가는(FIFO, First-In-First-Out) 구조를 가지고 있습니다. 큐는 일상생활에서 줄을 서서 기다리는 것과 비슷한 개념입니다. 큐는 데이터를 삽입하는 enqueue와 데이터를 삭제하는 dequeue 연산이 있습니다. 큐는 대기열, 버퍼 등 다양한 용도로 사용됩니다.
큐(Queue)는 대기열, 버퍼 등 다양한 용도로 사용됩니다.
class Queue:
def __init__(self):
self.items = []
def is_empty(self):
return not bool(self.items)
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.is_empty():
return self.items.pop(0)
def peek(self):
if not self.is_empty():
return self.items[0]
def __len__(self):
return len(self.items)
위의 코드는 파이썬으로 구현한 큐(Queue) 자료구조입니다. enqueue
메소드는 큐에 새로운 데이터를 추가하며, dequeue
메소드는 큐에서 가장 먼저 들어온 데이터를 삭제합니다. 또한, peek
메소드는 큐에서 가장 먼저 들어온 데이터를 반환하지만 삭제하지 않습니다. is_empty
메소드는 큐가 비어있는지 확인하며, __len__
메소드는 큐의 길이를 반환합니다.
트리는 비선형 자료구조로 계층적인 구조를 가지고 있습니다. 트리는 하나의 루트 노드에서 시작하여 여러 개의 자식 노드를 가지는 구조이며, 각 자식 노드는 다시 자신의 자식 노드를 가질 수 있습니다. 이러한 구조로 인해 트리는 계층적인 데이터를 표현하기에 용이합니다.
트리는 이진 트리, 이진 탐색 트리, AVL 트리, B-트리 등 다양한 종류가 있으며, 데이터 검색, 삽입, 삭제 등 다양한 용도로 사용됩니다.
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
class BinaryTree:
def __init__(self):
self.root = None
def add_node(self, data):
if self.root is None:
self.root = Node(data)
else:
self._add_node(data, self.root)
def _add_node(self, data, node):
if data < node.data:
if node.left is not None:
self._add_node(data, node.left)
else:
node.left = Node(data)
else:
if node.right is not None:
self._add_node(data, node.right)
else:
node.right = Node(data)
def find_node(self, data):
if self.root is not None:
return self._find_node(data, self.root)
else:
return None
def _find_node(self, data, node):
if data == node.data:
return node
elif data < node.data and node.left is not None:
return self._find_node(data, node.left)
elif data > node.data and node.right is not None:
return self._find_node(data, node.right)
def delete_tree(self):
self.root = None
def print_tree(self):
if self.root is not None:
self._print_tree(self.root)
def _print_tree(self, node):
if node is not None:
self._print_tree(node.left)
print(str(node.data))
self._print_tree(node.right)
위의 코드는 이진 트리(Binary Tree) 자료구조를 파이썬으로 구현한 것입니다. add_node
메소드는 이진 트리에 새로운 데이터를 추가하며, find_node
메소드는 이진 트리에서 데이터를 검색합니다. print_tree
메소드는 이진 트리에 저장된 모든 데이터를 출력합니다. delete_tree
메소드는 이진 트리를 삭제하며, root
속성을 None
으로 설정하여 이진 트리를 초기화합니다.