본문 바로가기

분류 전체보기90

[C언어와 함께 자료구조를] 트리 (Tree) - 용어 정리와 이진트리 지금까지 다뤄본 자료구조들을 모두 선형적인 일차원 구조였습니다. 즉, 처음부터 끝까지 차례로 이동하면 모든 노드를 거칠 수 있었죠. 하지만 트리(Tree)는 대표적인 비선형구조(Non-linear structure)로 2차원구조 입니다. 트리(Tree) 구조는 일상에서도 많이 볼 수 있는데요, 대표적으로 탐색기 폴더구조를 들 수 있습니다. 로컬디스크(C:)에 여러 폴더들이 존재하고 그 하위 폴더 그 아래 하위 폴더 등으로 구성되는 구조입니다. 트리(Tree) 구조는 나무를 거꾸로 뒤집어 놓은 것 같은 모양입니다. 가장 위에 있는 노드를 root라 하고 거기서 시작하여 가지 (link)가 밑으로 향하며 맨 아래에 잎(leaf)이 달려 있습니다. 위 그림을 가지고 트리(Tree)구조에서 일반적으로 사용하는 .. 2020. 7. 3.
[C언어와 함께 자료구조를] 환형연결리스트 (Circular Linked List) 환형연결리스트(또는 원형연결리스트 Circular Linked List)는 단순연결리스트(Simple Linked List)의 Tail노드가 Head노드를 가리키고 있는 구조로 머리가 꼬리를 문 뱀모양의 둥근 모양을 하고 있습니다. 환형연결리스트의 연산은 단순연결리스트의 것과 비슷합니다. 다른 것은 환형연결리스트는 Tail이라는 개념이 없다는 것 뿐입니다. 해결하려는 문제에 따라 자연스럽게 환형연결리스트를 사용해야 되는 경우가 있습니다. 예를들어, 어떤 다각형의 변은 그 자체로 하나의 루프를 형성하므로 다각형의 꼭지점을 환형리스트의 노드로 표현하는것이 적절한 방법입니다. 여기서는 환형연결리스트의 대표적인 "요셉의 문제"를 코드로 알아보도록 하겠습니다. "요셉의 문제"는 A부터 J까지의 10명의 사람이 시.. 2018. 11. 20.
[C언어와 함께 자료구조를] 연결리스트 (Linked List) - 개념과 구현 지난 시간에는 스택과 큐의 개념과 배열로 각각 구현을 해봤습니다. 이번에 살펴 볼 연결리스트(Linked List)는 정적인 배열과 달리 동적인 자료구조로 필요한 경우 할당하여 사용하고 필요가 없어지면 해제하는 식으로 메모리 관리가 가능하기 때문에 메모리를 절약할 수 있다는 장점이 있습니다. 연결리스트(링크드리스트 : Linked List)의 개념 연결리스트는 노드(Node)와 링크(Link)로 구성되며, 노드는 실제 정보를 담고 있는 하나의 단위이고, 링크는 노드간의 위치정보를 저장하고 있어 연결리스트의 순서를 유지할 수 있도록 하는 연결고리로 이해 하시면 됩니다. 연결리스트는 각 노드별 링크의 개수와 연결 상태에 따라 다양한 형태로 구성 될 수 있는데요. 단순 연결리스트, 환형 연결리스트, 이중 연결.. 2018. 11. 20.
제대로된 방식으로 배우자! 제대로 배우고 있습니까? 인간은 태어나면서 부터 죽을 때까지 배움을 멈추지 않는다. 학습에 유익하기 위해서는 우선 기억이 필요하다. 아기의 생존을 위한 배움 과정은 수없는 따라하기의 반복이고 거기에는 수많은 실패(망각)가 있고 성공(기억)이 있지만 효율성은 생각할 필요가 없다. 학교에 들어가면서 배움의 양이 폭발적으로 늘어나게 된다. 하지만 배우는 방식은 아이들의 수없는 반복에서 별로 바뀌지 않는다. 이유는 무엇일까? 이거 효과 있나요? 대표적인 학습법은 집중연습(massed practice)과 반복학습(rereading text)으로 매우 인기가 많고 효과가 좋다고 알려져 있다. 최근의 뇌과학과 학습의 관계 연구에 따르면 경험과 직관에서 나온 집중연습과 반복학습 등은 다음과 같은 단점이 있다. 첫째, .. 2017. 8. 17.
[C언어와 함께 자료구조를] 큐(Queue)의 개념, 배열로 큐 구현하기 큐의 개념 큐는 스택과 비슷한 모양을 하고 있지만, 조작방식은 다릅니다. 큐의 구조도 간단한데,스택과 달리 앞 뒤가 뚫린 통이라고 보시면 됩니다. 이 통은 뒤에서 뭔가를 집어넣고 앞에서 빼냅니다. 즉, 먼저 들어온 것은 먼저 나오는 구조로 FIFO(First In First Out)이라고 부릅니다. 큐의 연산은 put과 get이 있습니다. 큐에 자료를 집어 넣을 때는 뒤(rear)에서 처리하고, 이를 put 이라고 합니다. 반대로 큐에서 자료를 빼낼 때는 앞(front)에서 처리하고 이를 get이라고 합니다. 그림을 보시면 쉽게 이해하시겠죠? 배열로 큐 구현하기 배열을 이용한 큐의 구현은 스택의 구현과 비슷한 난이도일 것 같지만, 조금 더 생각해보면 문제가 아주 많습니다. 먼저 저장할 자료의 앞과 뒤를 .. 2015. 3. 21.
[C언어와 함께 자료구조를] 스택의 개념, 배열로 스택구현 스택(stack)과 다음에 공부할 큐(queue)와 같은 자료구조는 특정한 접근방식이 있고, 이를 응용한 알고리즘이 매우 다양합니다. 특히 스택은 아주 중요한 자료구조로 시스템 내부의 기본동작에서 고급 알고리즘까지 다양하게 활용되고 있습니다. 스택의 개념 스택의 구조는 매우 간단합니다. 스택은 밑이 막혀있는 긴 통이라고 보면 됩니다. 즉, 입구와 출구가 같은 긴 통이므로 먼저 들어간 것은 밑에 있게 되고, 나중에 들어간 것은 제일 먼저 나오게 됩니다. 그래서 스택을 LIFO(Last In First Out)구조라 고 합니다. 스택을 조작하는 방법(연산이라고 합니다.) 은 두가지가 있습니다. 하나는 스택에 값을 집어 넣는 연산인 push이고 다른 하나는 스택에서 값을 빼내는 pop 동작입니다. 위 그림을 .. 2015. 3. 15.