반응형

언어 자료구조 알고리즘 1251

[C언어 자료구조] 2.3 동적 배열 테스트

[C언어 자료구조] 2.3 동적 배열 테스트 앞에서 만든 동적 배열이 잘 동작하는지 확인하는 시뮬레이션 코드를 작성합시다. 여기에서는 순차적으로 자료를 보관하는 예와 특정 키순으로 보관하는 예, 인덱스를 사용하는 예를 들게요. int main() { Simul_Seq(); Simul_Order(); Simul_Index(); return 0; } 먼저 순차적으로 동적 배열을 사용하는 시뮬레이션 코드를 작성합시다. void Simul_Seq() { 먼저 동적 배열을 생성합니다. Array *arr = New_Array(); 그리고 도서 개체를 생성하여 순차적으로 동적 배열에 보관합니다. Array_PushBack(arr,New_Book("C언어","홍길동",10)); Array_PushBack(arr,Ne..

[C언어 자료구조] 2.2 동적 배열 구현

[C언어 자료구조] 2.2 동적 배열 구현 먼저 동적 배열을 생성하는 함수를 작성합시다.Array *New_Array(){ 동적 배열 형식 크기의 메모리를 할당합니다. Array *arr = 0; arr = (Array *)malloc(sizeof(Array)); 자료를 보관할 저장소는 0으로 초기화합니다. 여기서 구현할 동적 배열은 저장소가 꽉 차면 내부적으로 저장소의 크기를 확장해 나갈 것입니다. arr->base = 0; 저장소에 용량과 보관한 자료 개수를 0으로 초기화한 후 동적 배열을 반환합니다. arr->capacity = arr->usage = 0; return arr;} 동적 배열을 소멸하는 함수를 작성합시다.void Delete_Array(Array *arr){ 만약 저장소가 유효하면 저..

[C언어 자료구조] 2.1 동적 배열 설계

[C언어 자료구조] 2.1 동적 배열 설계 여기에서 작성하는 배열은 동적 배열입니다. 동적 배열이란 자료를 저장하는 메모리를 프로그램 동작 중에 크기를 결정하여 동적으로 할당하는 배열을 말합니다. 즉 보관할 수 있는 원소의 개수를 개발 단계에서 결정하는 것이 아니라 실행 시간에 결정하는 것을 말합니다. 그리고 저장소에 자료를 보관한 상태가 꽉 찼을 때 다른 자료를 보관 요청하면 저장소의 크기를 확장하는 확장 가능한 동적 배열로 정의합시다. 이를 위해서 사용자 정의 배열 형식에서는 저장소의 위치 정보와 현재 저장소의 크기와 보관하고 있는 자료 개수를 멤버로 기억하고 있어야 합니다. 특히 이 책에서 작성한 배열은 동적으로 생성한 자료를 보관하기 위한 용도로 작성합시다. 어떠한 형태의 자료이든 동적으로 생성한..

[C언어 자료구조] 2. 배열(Array)

[C언어 자료구조] 2. 배열(Array) C언어에서 제공하는 형식 배열은 원소 개수를 개발 단계에 상수로 결정하여 컴파일 시점에 할당할 메모리 크기를 결정합니다. 하지만 자료구조에서 말하는 배열은 C언어에서 제공하는 배열뿐만 아니라 같은 종류의 자료를 보관하기 위해 동적으로 메모리를 할당하여 관리하는 구조도 포함합니다. 이 책에서는 자료를 보관하는 저장소를 동적으로 할당하는 사용자 정의 배열을 구현하고 배열을 사용하는 방법을 살펴봅시다.[C언어 자료구조] 2.1 동적 배열 설계[C언어 자료구조] 2.2 동적 배열 구현[C언어 자료구조] 2.3 동적 배열 테스트[C언어 자료구조] 2.4 동적 배열 소스 코드

[C언어 자료구조] 1.2 공통으로 사용할 코드

[C언어 자료구조] 1.2 공통으로 사용할 코드앞으로 이 책에서 공통으로 사용할 소스를 먼저 소개할게요. 같은 부분을 계속 지면을 할애하는 것보다 앞에서 언급하고 넘어갈게요. 이 책에서 공통으로 사용할 Book 형식을 정의합시다. Book 형식에는 제목, 저자, 번호를 멤버로 구성하세요. #pragma once #define MAX_TIT_LEN 200 #define MAX_AUT_LEN 20 typedef struct _Book Book; struct _Book { char title[MAX_TIT_LEN+1]; char author[MAX_AUT_LEN+1]; int num; }; 그리고 동적으로 Book을 생성하는 함수와 소멸하는 함수를 제공합시다. Book *New_Book(const char *..

[C언어 자료구조] 1.1 자료구조(Data Structure)

[C언어 자료구조] 1.1 자료구조(Data Structure)자료구조는 자료를 메모리에 표현하는 구조를 말합니다. 자료구조를 분류할 때는 자료를 보관하는 형태에 따라 분류하는데 일반적으로 선형 자료구조와 비 선형 자료구조로 나누죠. 선형 자료구조는 자료를 보관하는 논리적인 구조를 하나의 선으로 나타낼 수 있습니다. 대표적인 선형 자료구조에는 배열과 연결리스트, 스택과 큐가 있습니다. 배열은 같은 형태의 자료를 연속적인 메모리에 관리하는 자료구조입니다. 그리고 연결리스트는 노드의 선형 집합이며 노드는 하나의 자료와 다른 노드의 위치 정보인 링크로 구성합니다. 스택과 큐는 단순히 자료를 보관하고 꺼내는 동작을 제공하며 스택은 최근에 보관한 자료를 꺼내는 LIFO(Last In First Out), 큐는 먼..

[C언어 자료구조] 1. 다루는 내용

[C언어 자료구조] 1. 다루는 내용 이 책은 프로그래머의 기초 지식인 자료구조를 이론적인 접근과 구현을 다루고 있습니다. 자료구조는 프로그램에 관라할 데이터를 어떠한 구조로 보관하고 접근할 것인가를 다루는 것이죠. 선형 자료구조인 배열이나 연결리스트, 스택, 큐와 비선형 자료구조인, 트리, 그래프 등이 있습니다. 컴퓨터 프로그래밍을 업무로 하는 이들에게 자료구조는 실질적인 구현에서 필수적으로 필요합니다. 그리고 이들을 다루는 책은 매우 다양하죠. 이 책에서는 선형 자료구조인 배열, 연결리스트, 스택, 큐를 다루고 비선형 자료구조는 이진 탐색 트리와 그래프를 다룹니다. 이 책에서는 이러한 자료구조를 설명하고 직접 구현하는 과정이 있습니다. 보다 탄탄한 프로그래밍 실력을 다지기 위해 자료구조를 익히고자 하..

[C언어] 8가지 정렬 알고리즘

순차 정렬(Sequential Sort) 알고리즘 이번에는 반복적인 방법으로 해결하는 순차 정렬(Sequential Sort) 알고리즘을 살펴볼게요. 정렬 알고리즘은 배열의 자료를 원하는 순으로 배치하는 알고리즘을 말해요. 정렬 알고리즘은 입력 인자로 정렬할 자료들이 있는 배열의 시작 주소와 원소 개수, 비교 알고리즘이 필요합니다. 그리고 수행 후에는 배열 내의 자료들은 원하는 순서로 배치한 상태여야 합니다. 순차 정렬은 맨 앞에서부터 제일 작은 원소를 배치하게 만들어 나가는 알고리즘이예요. 이를 위해 배치할 자리에 있는 원소를 뒤쪽에 있는 원소들과 비교하면서 작은 것을 발견하면 배치할 위치의 원소와 교환해요.순차 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 반복(i:=..

6.3 병합 정렬 알고리즘 소스 코드

6.3 병합 정렬 알고리즘 소스 코드 //common.h #pragma once //헤더 파일을 한 번만 포함해서 컴파일 #include #include #include #include #include #include #include #pragma warning(disable:4996) //4996컴파일 경고 메시지 출력하지 말라. //Book.h #pragma once #include "common.h" #define MAX_TIT_LEN 200 #define MAX_AUT_LEN 20 typedef struct _Book Book; struct _Book { char title[MAX_TIT_LEN+1]; char author[MAX_AUT_LEN+1]; int num; }; Book *New_Boo..

6.2 병합 정렬 알고리즘 구현

6.2 병합 정렬 알고리즘 구현 이제 병합 정렬 알고리즘을 구체적으로 구현합시다. #include "common.h" #include "Book.h" typedef void *Element; typedef int (*Compare)(Element , Element); void merge_sort(Element *base, int n, Compare compare) { n의 절반의 크기를 ahalf에 기억합니다. 이는 배열을 분할할 때 앞쪽 배열의 원소 개수입니다. int ahalf = n/2; 배열을 분할할 때 뒤쪽 배열의 원소 개수를 bhalf에 기억합니다. int bhalf = n - ahalf; 분할할 배열을 하나의 배열로 정복하기 위한 인덱스를 선언합니다. ai는 앞쪽 배열의 인덱스로 사용할 것이..

반응형