[C언어 알고리즘] 4.2.1 이진 탐색 알고리즘 소스 코드
//common.h
#pragma once //헤더 파일을 한 번만 포함해서 컴파일
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#include <memory.h>
#include <time.h>
#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_Book(const char *title,const char *author,int num);
void Delete_Book(Book *book);
void Book_View(Book *book);
int Book_CompareTitle(Book *book,const char *title);
int Book_CompareAuthor(Book *book,const char *author);
int Book_CompareNum(Book *book,int num);
//Book.c
#include "Book.h"
void Book_Book(Book *book,const char *title,const char *author,int num);
Book *New_Book(const char *title,const char *author,int num)
{
Book *book = 0;
book = (Book *)malloc(sizeof(Book));
Book_Book(book,title,author,num);
return book;
}
void Book_Book(Book *book,const char *title,const char *author,int num)
{
memset(book,0,sizeof(Book));
strncpy(book->title,title,MAX_TIT_LEN);
strncpy(book->author,author,MAX_AUT_LEN);
book->num = num;
}
void Delete_Book(Book *book)
{
free(book);
}
void Book_View(Book *book)
{
printf("<%010d>:<%s>\n",book->num,book->title);
printf("\t 저자:%s\n",book->author);
}
int Book_CompareTitle(Book *book,const char *title)
{
return strcmp(book->title,title);
}
int Book_CompareAuthor(Book *book,const char *author)
{
return strcmp(book->author,author);
}
int Book_CompareNum(Book *book,int num)
{
return book->num-num;
}
//Program.c
#include "common.h"
#include "Book.h"
typedef void *Key;
typedef void *Element;
typedef int (*Compare)(Element , Key);
Element *BinarySearch(Element *base,int asize,Key key, Compare compare)
{
int gap = 0;
if(asize<=0){ return 0;}
gap = compare(base[asize/2],key);
if(gap == 0){ return base+(asize/2); }
if(gap>0)
{
return BinarySearch(base,asize/2,key,compare);
}
return BinarySearch(base+(asize/2+1),asize - (asize/2+1),key,compare);
}
#define MAX_BOOK 10
Book *books[MAX_BOOK]={0};
void SimulationInit();
void Simulation();
void SimulationClear();
int main()
{
SimulationInit();
Simulation();
SimulationClear();
return 0;
}
void SimulationInit()
{
int bnum[MAX_BOOK] = {1,4,10,15,20,33,39,40,45,69};
char title[MAX_TIT_LEN+1]="";
char author[MAX_AUT_LEN+1]="";
int i = 0;
for(i=0; i<MAX_BOOK; ++i)
{
sprintf(title,"%010d",rand());
sprintf(author,"%010d",rand());
books[i] = New_Book(title,author,bnum[i]);
}
}
void Simulation()
{
Book **seat = 0;
int key = 0;
printf("검색할 도서 번호:");
scanf_s("%d",&key);
seat = (Book **)BinarySearch(books,MAX_BOOK,(Key)key,(Compare)Book_CompareNum);
if(seat == 0)
{
printf("%d 번 도서 없음\n",key);
}
else
{
printf("검색 결과:");
Book_View(*seat);
}
}
void SimulationClear()
{
int i = 0;
for(i=0; i<MAX_BOOK; ++i)
{
Delete_Book(books[i]);
}
}
'언어 자료구조 알고리즘 > 디딤돌 알고리즘 (C언어)' 카테고리의 다른 글
[C언어 알고리즘] 5.그래프(Graph) (0) | 2016.12.01 |
---|---|
[C언어 알고리즘] 4.3.3 병합 정렬 알고리즘 소스 코드 (0) | 2016.12.01 |
[C언어 알고리즘] 4.3.2 병합 정렬 알고리즘 구현 (0) | 2016.12.01 |
[C언어 알고리즘] 4.3.1 병합 정렬 알고리즘 성능 분석 (0) | 2016.12.01 |
[C언어 알고리즘] 4.3 병합 정렬(Merge Sort) 알고리즘 (0) | 2016.12.01 |
[C언어 알고리즘] 4.2 이진 탐색 알고리즘 (0) | 2016.12.01 |
[C언어 알고리즘] 4.1.1 최소값(최대값) 찾기 알고리즘 소스 코드 (0) | 2016.12.01 |
[C언어 알고리즘] 4.1 최소값(최대값) 찾기 알고리즘 (0) | 2016.12.01 |
[C언어 알고리즘] 4. 분할정복 알고리즘 (0) | 2016.12.01 |
[C언어 알고리즘] 3.5.4 힙 정렬 알고리즘 소스 코드 (0) | 2016.11.30 |