본문 바로가기

분류 전체보기58

[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.
[C언어와 함께 자료구조를] 동적 기억장소 할당 C언어에서 배열은 길이를 미리 알 수 있을 때 고정된 크기의 정적배열을 사용합니다. 만약에 길이의 상한을 알 수 없을 때는 동적 배열을 사용할 수 있습니다. 동적 배열을 사용하기 위해서는 배열의 공간 확보를 위해 메모리 할당 (memory allocation)을 해야합니다. 동적 문자열 할당 C언어에서는 메모리 할당을 위해 아래와 같은 함수를 사용합니다. #include void *malloc (size_t size); void free(void *ptr); malloc()은 size bytes만큼의 메모리를 할당하고, 할당된 메모리의 포인터를 반환합니다. 만약, 메모리 할당에 실패하면 NULL을 반환합니다. 할당된 메모리는 초기화되어 있지 않으므로 사용전에 반드시 초기화를 하여야 합니다. 그리고 더이상.. 2015. 3. 12.
[C언어와 함께 자료구조를] 구조체 알아보기 정수형, 문자형, 부동소수점 타입 등은 C언어에서 사용되는 전형적인 기본 자료형입니다. 그러나, 이러한 기본 자료형만으로 프로그래밍을 할 수는 없습니다. 프로그래머는 스스로 타입을 정의하고 이 타입에 대한 변수를 만들 수 있습니다. 타입정의 (typedef) typedef는 어떤 변수의 역할을 명확히 하기 위해서 사용됩니다. 예를 들어, 다음과 같은 문장을 살펴봅시다. typedef int boolean; #define FALSE 0 #define TRUE !FALSE 첫번째 문장은 boolean을 int와 똑같이 변수의 타입을 정의하는데 사용하고, 아래 두 문장은 boolean 변수의 값을 나타내는 상수를 정의합니다. 이렇게 선언하는 것은 정수 변수가 TRUE와 FALSE를 가진다는 것을 명확하게 알려.. 2015. 3. 11.