목록자료구조 스터디 📂 (5)
섭스토리

🍇 트리 (Tree) 트리(Tree)는 그래프의 일종으로 정점과 간선을 이용하여 데이터의 배치 형태를 추상화한 자료구조입니다. 모양이 마치 나무를 엎어 놓은 것과 같다고 해서 Tree 라는 이름이 붙여졌습니다. 🌲 트리(Tree)의 특징 트리 자료구조는 일반적으로 대상 정보의 각 항목들을 계층적으로 구조화할 때 사용하는 비선형 자료구조입니다. 트리의 구조는 '데이터 저장'의 의미보다는 '저장된 데이터를 더 효과적으로 탐색'하기 위해서 사용됩니다. 리스트 처럼 데이터가 단순히 나열되는 구조가 아니라 부모(parent)와 자식(child)의 계층적인 관계로 표현됩니다. 서로 다른 두 노드의 연결이 오직 하나의 엣지 (edge) 뿐입니다.. 트리에서 루트노드를 제외한 모든 노드는 단 하나의 부모노드를 가집니다..

🥑 스택 (Stack) 스택(Stack)이란 "쌓다"라는 뜻을 갖고 있습니다. 말 그대로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조입니다. 스택의 가장 큰 특징은 LIFO (Last In First Out) , 후입선출 구조입니다. 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 구조를 갖고 있죠. 그릇을 쌓아 놓는 것을 스택의 예시로 보면 쉬울 것 같습니다. 또한 스택은 정해진 방향으로만 쌓을 수 있으면, top으로 정한 곳을 통해서만 접근 가능합니다. 새로 삽입되는 자료는 top을 통해 쌓이게 되며 (Push), 자료를 삭제할 때도 top을 통해 삭제가 가능합니다. (Pop) 스택의 사용 사례 ▶ 웹 브라우저 방문 기록 ( 뒤로 가기 ) ▶ 실행 취소 ( ctrl + z ) ▶ 후위 표기법 계산 ..

🥝 '구체적인 기능의 완성과정(내부 동작 원리)를 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것' ▶추상적 자료형(ADT)은 구현 방법을 명시하고 있지 않다는 점에서 자료구조와 다릅니다. 쉽게 설명을 드리기 위해 지갑을 예로 들어볼게요. 지갑의 기능에는 무엇이 있는지 부터 생각해봅시다. 👉 지갑의 기능?👈 1. 카드의 삽입 2. 카드의 추출 3. 동전의 삽입 4. 동전의 추출 5. 지폐의 삽입 6. 지폐의 추출 지갑의 가격과, 무슨 가죽으로 만들었으며, 지갑을 만드는 공정 과정을 설명하지 않고, 오로지 지갑의 기능을 나열함으로써 정의를 하는 방식이라고 생각하면 쉽습니다. 같은 방식으로 스택의 ADT에 대해서 설명을 해보겠습니다. - FILO : First In Last Out - 가장 최근에 들어..

📌 하노이 타워 : The Towe of Hanoi 하노이 타워는 재귀 함수의 강력함을 보여주는 대표적인 예로 꼽힙니다. 모르는 사람을 위해 간략하게 설명하자면, 세 개의 기둥(A, B, C)과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있습니다. 게임의 목적은 다음 세 가지 조건을 만족시키면서, 한 기둥(A)에 꽂힌 원판들을 그 순서 그대로 다른 기둥(C)으로 옮겨서 다시 쌓는 것입니다. 한 번에 한개의 원판만 옮길 수 있다. 가장 위에 있는 원판만 이동할 수 있다. 큰 원판이 작은 원판 위에 있어서는 안 된다. 위 그림 처럼 세 개의 원판만을 사용하여 옮기는 것은 크게 어렵지는 않습니다. 일단 3번 원판 (제..

재귀 함수는 알고리즘과 자료 구조 뿐 만 아니라 프로그래밍 전반에 있어 매우 중요한 기법입니다. '하노이 타워' 와 같이 복잡해 보이는 문제 들도 재귀 함수를 이용하여 쉽게 풀리는 경우가 많기 때문에 "강력하다" 라는 표현을 쓰게 됩니다. ▶ 재귀 함수란 다음과 같이 함수 내에서 자기 자신을 다시 호출하는 함수를 의미합니다. void Recursive(void) { printf("Recursive call!\n"); Recursive( ); } Recursive 함수를 실행하는 중간에 다시 Recursive 함수가 호출되면, Recursive 함수의 복사본을 하나 더 만들어서 복사본을 실행하게 됩니다. 그러나 위와 같이 계속 호출되는 함수는 무한히 반복되는 문제가 있습니다. ▶ 따라서 '재귀 함수의 탈출..