Programming/C DataStructure
10개의 글
트리 구조란?여태 배운 Stack, Queue, Linked List는 전부 선형 구조였다. 1 : 1로 노드가 연결되어 있는 구조라는 뜻이다. 트리 구조는 처음으로 비선형 구조, 1 : 多 데이터구조 이다. 트리라는 이름에서 알 수 있듯이 나무를 생각하면 이해하기가 편하다.뿌리는 하나에, 수많은 가지가 나 있는 것을 상상해보자. 트리 구조는 우리가 일상 생활에서 매우 많이 접하고 있다. 계층 이 있는 부분이 바로 트리 구조라고 할 수 있다. 우리가 내컴퓨터 에 들어가면 볼 수 있는 디렉토리의 구조들도 트리 구조이다. 혹은 회사에서 직속 상관과 부하 직원의 관계 또한 트리이다. 트리가 트리이기 위해선 한가지 제한 조건이 있다. 부모 노드는 단 하나여야 한다는 것. 1 : 多 구조 이지 , 多 : 多 구조..
Queue 코드 구현문제 .4명의 사람이 각자 물건들을 사들고 마트 계산 줄에 서있습니다.차례대로 4명이 카트에 물건을 올려두면, 점원이 계산을 해주게 됩니다.이 때 어떤 자료구조를 써야하며, 어떻게 구현해야 하나요? 목표 결과물: 소스 파일 다운로드: 구현시 주의사항 1. makeNode에서, 현재 node는 item이 포인터로 지정이 되어 있기 때문에 동적 할당을 통해 만들어주어야 합니다.2. enqueue할때에는, Q의 count가 0일 경우엔 집어넣는 노드를 front이면서 rear인 상태로 만들어주어야 합니다.3. dequeue가 특히 주의하여야 할 점이 많은데, 들어가 있는 node의 개수가 몇개인지에 따라서 조건문을 분기시켜야 합니다. 또한 rear에서 node를 빼내야 하므로, rear의 ..
Queue?저번에 Stack에 배울 때 가장 중요했던 특징은 바로 LIFO(Last In First Out)였다.반면에 Queue에서 가장 큰 특징은 FIFO(First In First Out)이다. 약자가 뜻하는 대로, 먼저 들어간 것이 먼저 나온다는 뜻이다.일반적인 줄 서기 개념을 생각하면 바로 Queue의 개념이랑 동일하다는 것을 알 수 있다. 혹시 모르니 실생활 예를 들어보자. 마트에서 계산을 위하여 줄을 서 있다.먼저 온 사람은 먼저 계산을 하고, 나중에 온 사람은 나중에 계산을 한다.이것이 Queue이다. 그림으로 표현하면 다음과 같다.위의 Data 숫자는 도착한 순서를 의미한다.Data 1은 첫번째로 도착했기 때문에, Queue에서 빠져나갈 때에 가장 먼저 나간다. 반대로 7은 마지막으로 도..
Stack : 스택 문제. 당신은 자동차를 아주 좋아하는 재벌 2세입니다. 5대의 개인 차량을 갖고 있지만, 자동차에 비해 차고가 너무 초라합니다.슬프게도 차고가 너무 좁아서 문에 가장 가까운 차만 꺼내서 탈 수 있습니다. 이 문제를 해결하기 위해 당신은 하루에 차량을 한대씩 꺼내서새로운 차고에 집어 넣기로 결정했습니다. 이 오래된 차고를 C 언어로 구현하시오 ! 목표 결과물 : 문제 파일 : 문제 코드 : 파일로 받는게 번거로우면 아래 파일명 클릭하여 소스 그대로 복사123456789101112131415161718192021222324252627#include #include #include "stack.h" void main() { pStack stack = makeStack(); printf("B..
Stack : 스택 이번에 배울 자료구조는 스택이다.스택을 이해하기 위해서 기억해야 할 가장 큰 특징은 바로LIFO (Last In First Out) 이다. (first in last out이라고도 하지만 글쎄.. 하나만 기억해두는게 더 깔끔하다.) 무슨말이냐 하면, 마지막으로 들어온 것이 먼저 나간다는 것이다.다음 그림을 봐보자. 출처 [네이버 지식백과] 스택 [stack] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사)그림을 보면 아래쪽에 네모난 통이 있다.이것이 Stack이다.데이터를 저장하는 바구니라고 생각하면 된다. 보통 바구니에 무엇을 넣게 되면, 먼저 넣은것은 아래로, 나중에 넣은것은 위에 있게 된다.그럼 바구니에서 어떤 것을 꺼내게 될 때에, 마지막에 넣은것이 위에 있기 때..
Linked List : 연결 리스트 저번 시간에는 연결 리스트의 개념에 대해 배워 보았다.이번 포스팅은 연결 리스트를 어떻게 구현하는지에 관한 내용이다. 어떤 개념을 이해하는 데에 효과적인 방법으로는 ,자신이 직접 코드를 작성하는 것 / 남이 짠 코드를 분석하는 것 이라고 생각한다.따라서 이 두 가지 방법을 모두 다 사용하기 위해 절반의 코드를 작성하여 업로드 할 것이다.비어 있는 부분의 코드를 직접 작성하기 위해서는, 기존에 작성되어 있는 코드를 잘 이해하여야 한다. 그럼 시작해보자. 우선 굉장히 단순하게 연결 리스트를 구현하기 위한 것이다. 1. 구조체 정의 12345678910typedef struct _node { int data; struct _node *next;}Node, *pNode; t..
Linked List : 연결 리스트 처음으로 나오는 연속하지 않는 자료구조이다.배열을 설명할 때 나왔던 것처럼, 연속된 메모리를 사용하려면 메모리에 커다란 가용 공간이 있어야 한다.그렇지만 연결 리스트를 사용하면 그런 제한 조건에서 벗어나게 된다. 그렇다면 연결 리스트는 어떤 방식으로 동작하는 것일까 ? 먼저, 배열과 비교해보자. 배열은 연속된 메모리에 할당되어 있으므로, 각각의 변수에 접근하기가 매우 편했다.예를 들어 int 변수의 배열이라면, 1번째 변수의 주소에 4를 더하면 2번째 변수의 주소가 되고, 3번째 변수의 주소는 그 주소에 4를 더하면 된다.무척이나 간단하게 변수들에 접근 할 수 있다는 것이다. 그림1. 불연속 메모리 공간 그림1을 보자면, 우리가 연결 리스트를 사용하는 가장 큰 장점은..
Struct : 구조체(코드 상 struct이지만, 구조체는 structure일까 struct일까..?) 구조체의 특징1. 다양한 타입의 변수 !2. 연속된 메모리 공간 ! 1번 특징은 배열과 정 반대이다. 하나의 구조체는 같거나, 서로 다른 타입의 변수들로 구성이 가능하다. 12345678910111213struct Person { char name[20]; int age; char sex;}; void main() { struct Person yangd = { "Yangd", 25, 'M' }; printf("이름 : %s \n나이 : %d \n성별 : %c\n", yangd.name, yangd.age, yangd.sex); }Colored by Color Scriptercs 위의 코드는 구조체를 ..
Array : 배열배열은 가장 기초적인 데이터 구조라고 할 수 있다.기본 변수들을 여러개 동시에 선언하고, 사용한다. 일반적인 변수 10개를 선언한 것과, 10개짜리 배열 1개 선언한 것은 같은 메모리를 차지한다.그렇지만 그 사용에 있어서 편리함은 천지 차이이고, 이것이 우리가 데이터구조들에 대해 배워야하는 이유가 될 것이다. 배열의 특징 1. 메모리 상에 연속된 여러 변수들이 모여서 하나의 배열을 이룬다.2. 대괄호[] 내부에 변수의 index를 지정하여 각각의 변수에 접근할 수 있다.3. 배열의 이름은 배열의 첫번째 변수, 즉 배열[0]의 포인터이다.4. 선언 할 때에 배열의 크기를 결정하며, 변경할 수 없다.5. 같은 종류의 변수만 선언 가능하다. 배열은 위의 특징들을 깊이 이해하는 것이 중요하다...
Why Data Structure?프로그래밍을 할 때에 우리는 수많은 변수를 선언하고, 초기화하며, 수정하며 사용한다.그렇다면 이런 변수들은 어디에 저장되는 것일까? 바로 Memory 공간에 저장된다. 특히나 RAM 공간에 저장된다고 할 수 있다.다음은 RAM의 사전적 정의이다.RAM(Random Access Memory)은 기억된 정보를 읽어내기도 하고 다른 정보를 기억시킬 수도 있는 메모리로서, 컴퓨터의 주기억장치, 응용 프로그램의 일시적 로딩(loading), 데이터의 일시적 저장 등에 사용된다.[네이버 지식백과] RAM [random access memory] (두산백과)위의 설명을 보면 데이터의 일시적 저장 에 사용된다고 나와 있다.이러한 변수들은 영구적으로 하드디스크에 저장되는 것이 아니라 일..