본문 바로가기

Information Technology/C

(18)
[C언어] MP3 관리프로그램(5) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 1) main.cpp #pragma warning (disable:4996) #include "string_tools.h" #include "library.h" #include #include #include #define BUFFER_LENGTH 200 void handle_add(); void process_command(); void handle_load(); void handle_search(); void handle_play(); void handle_save(); void handle_remove(); int main() { initialize();// Artist 배열을 초기화 handle_load(); proce..
[C언어] MP3 관리 프로그램(4) 1. add_artist Artist* create_artist_instance(char* name) // Artist 객체를 생성하는 함수 { Artist* ptr_artist = (Artist*)malloc(sizeof(Artist)); ptr_artist->name = name; ptr_artist->head = NULL; ptr_artist->tail = NULL; ptr_artist->next = NULL; return ptr_artist; } Artist* add_artist(char* name) { // Artist 객체를 만드는 일을 함수에게 맡김 Artist* ptr_artist = create_artist_instance(name); Artist* p = artist_directory[..
[C언어] MP3 관리 프로그램(3) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) library.h #include #include #ifndef LIBRARY_H #define LIBRARY_H typedef struct song Song; typedef struct snode SNode; typedef struct artist Artist; struct song { Artist* artist;// 곡을 부른 가수를 연결하는 Artist 포인터 char* title;// 곡의 제목을 저장하는 char 포인터 char* path;// 곡의 저장 경로를 저장하는 char 포인터 int index;// 곡의 인덱스를 저장하는 int 자료형 }; struct snode// 양방향 연결리스트 { struct sno..
[C언어] MP3 관리 프로그램(2) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) main.c #pragma warning (disable:4996) // VS에서 C언어 (구)문법 사용 #include "string_tools.h" #include "library.h" // 헤더 파일들을 include #include #include #include #define BUFFER_LENGTH 200 void handle_add(); void process_command(); // main에서 사용할 함수들의 prototype을 미리 선언 int main() { process_command(); // main함수에서는 process_command()를 호출 } void process_command() { cha..
[C언어] MP3 관리 프로그램(1) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 각각의 Artist 객체에 SNode를 연결 노드와 데이터를 분리하는 이유: 하나의 노래 당 song 객체는 하나만 존재하고, 여러 플레이리스트에서는 SNode를 통해 Song 객체에 접근하기만 하면 됨 각 노래의 인덱스를 SIZE로 나눠서, 나머지가 동일한 것들끼리 분류하여 각 그룹을 하나의 단방향 연결 리스트로 저장 헤더 파일 -> 어떤 프로그램에 있는 기능을 다른 프로그램에서도 사용할 수 있게 해줌 Linker가 헤더 파일에 정의된 기능들을 main.c에서 실행할 수 있게 연결해줌 헤더 파일에는 prototype을 넣고, 실제 구현은 소스파일(. c)에 넣은 후 main.c에서 헤더 파일을 포함해서 사용 변수의 선언: 컴..
[C언어] 이중 연결 리스트 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 단방향 연결 리스트는 자신의 이전 노드의 주소는 알지 못하고 오직 다음 노드의 주소만 알 수 있다는 특징을 가지고 있습니다. 때문에 특정 노드를 삭제하기 위해서는 항상 삭제하려는 노드 바로 앞 노드의 주소를 알고 있어야 한다는 불편함을 가지고 있습니다. 이러한 불편함을 해결하기 위한 자료구조가 바로 이중 연결 리스트입니다. next: 자신의 다음 노드의 주소 prev: 자신의 이전 노드의 주소 첫 번째 노드의 prev와 마지막 노드의 next는 NULL. 단방향에 노드에서 head 노드가 중요했듯이, 이중 연결 리스트에서는 head 노드와 tail 노드 모두 중요합니다. tail 노드를 통해서도 순회가 가능하기 때문입니다. p..
[C언어] 연결리스트 - 다항식(3) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 1. 새로운 다항식 생성 Term* parse_and_add_term(char* expr, int begin, int end, Polynomial* p_poly) { int i = begin; int sign_coef = 1, coef = 0, expo = 1;// 계수의 부호 관리 if (expr[i] == '+')// 계수의 부호를 보고 기억 i++; else if(expr[i] == '-') { sign_coef = -1; i++; } while (i = '0' && expr[i] = end)// 차수가 0인 상수항일 경우 { add_term(coef, 0, p_poly); return 1..
[C언어] 연결리스트 - 다항식(2) 이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;) 이번 포스팅은 저번 다항식 포스팅에 이어 다항식을 다루는 여러 방법에 대해 알아보겠습니다. 0. 전체 프로세스 커맨드 void process_command() { char command_line[BUFFER_LENGTH]; char copied[BUFFER_LENGTH]; // 배열 형태의 문자열 char* command, * arg1, * arg2; while (1) { printf("$ "); if (read_line(stdin, command_line, BUFFER_LENGTH) first; while (t != NULL) { result += eval(t, x); t = t->next;// 각 Term에서 eval을 실..