1. SetSortRule 함수와 멤버 comp1. SetSortRule 함수의 호출을 통해서void SetSortRule(List* plist, int (*comp)(LData d1, LData d2)){ plist -> comp = comp;} 2. 멤버 comp가 초기화되면typedef struct _linkedList{ Node* head; Node* cur; Node* before; int numOfData; int (*comp)(LData d1, LData d2);} LinkedList; 3. 정렬 관련 SInsert 함수가 호출된다.void LInsert(List* plist, LData data){ if(plist->comp == NULL) ..
개발/자료구조
1. 단순 연결 리스트의 ADT와 구현/* 추가된 함수 */void SetSortRule(List* plist, int (*comp)(LData d1, LData d2));- 리스트에 정렬의 기준이 되는 함수를 등록한다.인자로 전달이 가능한 함수의 예는 아래와 같다.int WhoIsPrecede(LData d1, LData d2){ if(d1 새 노드를 연결 리스트의 머리에 추가하는 경우장점 : 포인터 변수 tail이 불필요하다.단점 : 저장된 순서를 유지하지 않는다. 새 노드를 연결 리스트의 꼬리에 추가하는 경우장점 : 포인터 변수 tail이 불필요하다.단점 : 저장된 순서를 유지하지 않는다. SetSortRule 함수 선언에 대한 이해 (정렬)void SetSortRule(List* plist..
1. 연결 리스트의 개념적인 이해동적할당(malloc( ), free( ) 함수)을 진행한다.(프로그램 실행 중간에 할당한다.)동적할당이란?프로그램 실행중인 런타임에 메모리 공간을 확보한다.Ex). 1024byte 메모리를 할당하고 1byte를 사용한다면, 비효율적이다. 필요한 만큼 메모리 공간을 확보하고 메모리 공간을 해제하는 것이 동적할당의 장점이다. 1.1 LinkedRead.c#include #include typedef struct _node{ int data; struct _node * next;} Node;int main(void){ Node * head = NULL; // NULL 포인터 초기화 Node * tail = NULL; Node * cur = NULL; Node * newN..
1. 추상 자료형: Abstract Data Type추상 자료형 간단하게 ADT 를 의미한다.ADT의 주된 정의는 아래와 같다.구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지 나열한 것 전등의 추상 자료형을 정의해 본다면,ADT of Lamp- Data : Power, LeftButton, RightButton (전원, 왼쪽 버튼, 오른쪽 버튼)-operation : PowerOn() 전원을 키다. : PowerOff() 전원을 끄다. : LeftButtonClick() 왼쪽 버튼 클릭 ..
1. 함수의 재귀적 호출의 이해재귀함수란 함수 내에서 자기 자신을 다시 호출하는 함수를 의미한다.void Recursive(void){ printf("Recursive call"); Recursive();}위의 소스코드를 확인하면, 함수의 종료가 이루어지기 전, 다시한번 Recursive 함수를 호출하는 것을 볼 수 있다.즉, 계속해서 호출이 된다는 것이다.하지만, 재귀 함수의 문제는 계속해서 호출되는 문제가 있다. 이런 문제는 Recursive 함수에 '재귀의 탈출조건' 이 없다는데 원인이 있다.#include void Recursive(int num){ if(numRecursive call! 3Recursive call! 2Recursive call! 1여기서의 재귀의 탈출 조건은 if 문이 담당하고..
1. 자료구조(Data Structure) 에 대한 기본적인 이해자료구조는 '데이터의 저장'을 담당한다."정수 저장을 위해서 int 변수를 선언하는 것""책 대여 기록을 저장하기 위한 목적으로 구조체를 정의하는 것"모두 데이터를 표현 및 저장하는 하나의 방법이므로, 자료구조의 일종으로 볼 수 있다. 2. 알고리즘의 성능분석 방법자료구조와 알고리즘을 분석하고 평가할 수 있어야한다.그렇기 때문에, 알고리즘을 평가하는 두 가지 요소는 아래와 같다."어떤 알고리즘이 특정 상황에서 빠르거나 느린지""어떤 알고리즘이 특정 상황에서 메모리를 적게 or 많이 사용하는지"속도에 해당하는 알고리즘의 수행시간 분석결과를 가리켜 '시간복잡도(time complexity)'※ CPU에게 얼마나 부담을 주는가?메모리 사용량에 대..