반응형

소스 구현 59

[C언어 알고리즘] 3.2.2 하노이 타워 알고리즘 구현

[C언어 알고리즘] 3.2.2 하노이 타워 알고리즘 구현 하노이 타워 알고리즘을 구현합시다. 알고리즘은 입력 인자로 세 개의 기둥과 돌의 개수를 받아야 합니다. void Hanoi(const char *src, const char *use, const char *dest, int n) { 만약 돌이 없으면 아무 것도 수행하지 않고 함수를 종료합니다. 즉 탈출 조건입니다. if(n

[C언어 알고리즘] 2.6.2 쉘 정렬 알고리즘 구현

[C언어 알고리즘] 2.6.2 쉘 정렬 알고리즘 구현쉘 정렬 알고리즘을 구현합시다. 쉘 정렬(base:컬렉션, n:원소 개수, compare:비교 논리) 반복(step:=size/2; step>0 ; step:=step/2) 반복(i:=0; i0; step /= 2)//step의 폭을 1/2로 줄여간다. { 여기에서는 step에 따라 어떻게 배열 상태가 바뀌는지 출력하는 부분을 작성합시다. 만약 정렬 과정이 필요없다면 주석 처리하세요. printf("step:%d\n", step); 0, step, 2*step, ... 원소를 정렬한 후에 1, step+1, 2*step+1, ... 원소 정렬합니다. 이와 같은 작업을 step-1, 2*step – (step-1), 3*step – (step-1), ....

[C언어 알고리즘] 2.4.2 선택 정렬 알고리즘 구현

[C언어 알고리즘] 2.4.2 선택 정렬 알고리즘 구현이번에는 선택 정렬 알고리즘을 구현해 보아요. 선택 정렬(base:컬렉션,n:원소 개수,compare:비교 논리) 반복(i:=n; i>1 ; i:= i-1) 반복(max=0,j:=1; j1; i--)//정렬할 범위를 축소해 나갑니다. { 선택 정렬의 내부 반복문은 인덱스 0에서 마지막 원소 중에 제일 큰 값을 찾아 맨 마지막 원소와 교환하는 작업을 수행합니다. maxi = 0; for (j = 1; j

[C언어 알고리즘] 2.3.2 버블 정렬 알고리즘 구현

[C언어 알고리즘] 2.3.2 버블 정렬 알고리즘 구현이번에는 버블 정렬 알고리즘을 구현해 보아요. 버블 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 반복(i:=n; i>1 ; i:= i-1) 반복(j:=1; j 0) 교환(base[j-1],base[j]) //버블 정렬(Bubble Sort) #include 먼저 두 개의 값을 교환하는 매크로 함수를 작성합니다. #define SWAP(a,b) {int t; t = a; a=b; b=t;}//a와 b를 교환 이 책에서는 정수 형식 배열을 정렬하는 함수를 만들기로 할게요. 원소 형식에 관계없이 정렬하는 방법은 디딤돌 정렬 알고리즘 (C언어)를 참고하세요. void BubbleSort(int *base, int n); in..

[C언어 알고리즘] 2.2.2 순차 정렬 알고리즘 구현

[C언어 알고리즘] 2.2.2 순차 정렬 알고리즘 구현이번에는 순차 정렬 알고리즘을 구현해 보기로 해요. 순차 정렬(base:배열의 시작 주소, n: 원소 개수, compare:비교 논리) 반복(i:=0->n) 반복(j:=i+1->n) 조건(compare(base[i], base[j]) > 0) 교환(base[i],base[j]) 이번에는 순차 정렬 알고리즘을 구현하는 예를 보여드릴게요. //순차 정렬(Sequential Sort) #include 먼저 두 개의 정수 값을 교환하는 SWAP 매트로 함수를 작성합니다. #define SWAP(a,b) {int t; t = a; a=b; b=t;}//a와 b를 교환 이 책에서는 정수 형식 배열을 정렬하는 함수를 만들기로 할게요. 원소 형식에 관계없이 정렬하는..

[C언어 자료구조] 8.4 그래프 소스 코드

8.4 그래프 소스 코드//common.h #pragma once //헤더 파일을 한 번만 포함해서 컴파일 #include #include #include #include #include #include #include #pragma warning(disable:4996) //4996컴파일 경고 메시지 출력 해제 //Array.h #pragma once typedef void * Element; typedef struct _Array Array; struct _Array { Element *base; int capacity; int usage; }; typedef Element *Iterator; Array *New_Array(); void Delete_Array(Array *arr); void Arra..

[C언어 자료구조] 8.3 그래프 테스트

8.3 그래프 테스트 이제 작성한 그래프가 잘 동작하는지 테스트 코드를 작성합시다.[그림 8.1] 그래프 논리적 도식 int main() { 먼저 그래프를 동적으로 생성합니다. Graph *graph = New_Graph(); 정점을 그래프에 추가합시다. Graph_AddVertex(graph,"A"); Graph_AddVertex(graph,"B"); Graph_AddVertex(graph,"C"); Graph_AddVertex(graph,"D"); Graph_AddVertex(graph,"E"); Graph_AddVertex(graph,"F"); Graph_AddVertex(graph,"G"); Graph_AddVertex(graph,"H"); 간선을 그래프에 추가합시다. Graph_AddEdge(g..

[C언어 자료구조] 8.2 그래프 구현

8.2 그래프 구현 동적으로 그래프를 생성하는 함수를 구현합시다. Graph *New_Graph() { Graph *graph = 0; 그래프 형식 크기의 메모리를 할당합니다. graph = (Graph *)malloc(sizeof(Graph)); 정점을 보관할 동적 배열과 간선을 보관할 동적 배열을 생성한 후에 그래프를 반환합니다. graph->vertexs = New_Array(); graph->edges = New_Array(); return graph; } 동적으로 생성한 그래프를 소멸하는 함수를 구현합시다. void Delete_Graph(Graph *graph) { 그래프 내부에서는 간선을 동적으로 생성하므로 그래프를 소멸하는 과정에서 간선들도 소멸해야 합니다. 따라서 간선을 순차적으로 접근하..

[C언어 자료구조] 8.1 그래프 설계

8.1 그래프 설계 정점은 문자열 리터럴 상수로 표현하기로 할게요. 사용하기 쉽게 const char * 형식을 Vertex이름으로 타입 재지정할게요. typedef const char * Vertex; 그리고 간선은 간선의 끝에 있는 두 개의 정점과 무게(거리)를 멤버로 정의할게요. typedef struct _Edge Edge; struct _Edge { Vertex ep1; Vertex ep2; int weight; }; 그래프는 정점을 보관하는 컬렉션과 간선을 보관하는 컬렉션으로 구성할게요. 여기에서는 동적 배열을 사용합시다. typedef struct _Graph Graph; struct _Graph { Array *vertexs; Array *edges; }; 동적으로 그래프를 생성하는 함수와..

반응형