대학/자료구조
-
c++ template, iterator대학/자료구조 2022. 10. 18. 17:46
- template int maximum(int a, int b) { if (a > b) return a; else return b; } ... maximum(1, 2); // 2 위 함수는 두 인자를 비교하여 큰 값을 리턴하는 함수이다. 하지만, int 자료형 밖에 비교할 수 없다. 만약 double형에 대해서 비교하고 싶다면, 같은 이름의 함수를 double형으로 또 만들어야 한다. 만약 문자열을 비교하고 싶다면? 클래스의 비교는? 같은 기능을 구현하기 위해서 정말 많은 같은 이름의 함수를 만들어야 할 것이다. 하지만, 아래의 template 기능을 사용하면 이런 걱정을 할 필요가 없다. template Item maximum(Item a, Item b) { if (a > b) return a; el..
-
Linked list대학/자료구조 2022. 10. 17. 21:29
연결 리스트는 배열과 물리적인 구조부터 다르다. 일반 배열은 물리적인 메모리 공간이 붙어있기 때문에, 배열의 첫 번째 주소만 알면, 특정 인덱스의 메모리에 빠르게 접근할 수 있다. 즉, Random access가 가능하다. (n번째 인덱스 = 배열 첫번째 주소 + n) 하지만 배열의 공간이 한정되어 있기 때문에, 공간이 꽉 찰 경우 에러를 발생시키거나 배열의 공간을 동적으로 늘려줘야 한다. 그 이후 데이터를 복사를 해야하기 때문에, 데이터 추가의 측면에서 성능이 좋지 못하고, 메모리 공간을 효율적으로 쓸 수 없다. 연결 리스트의 경우에는 이런 배열의 특성과 반대되는 특성을 갖는다. 연결 리스트는 물리적인 메모리 공간이 떨어져 있고, 각 메모리 공간이 다음 메모리 공간을 가르킨다. 따라서 배열에서는 가능한..
-
Dynamic array대학/자료구조 2022. 10. 17. 13:09
정적 배열의 진화 버전, 동적 배열에 대해 공부해보자. 그 전에 정적 배열과 다르게 동적 배열에서는 반드시 구현해줘야 하는 기능이 있다. 바로, destructor, copy constructor, 그리고 overloaded assignment operator 이다. 왜냐하면(destructor 구현의 이유), 정적 할당을 하는 경우에는 런타임 중 함수 실행 순간에 stack 공간에 메모리 공간이 할당되고, 함수 종료시 자동으로 메모리 공간이 해제가 되는데, 동적 할당의 경우에는 런타임 중 new(c++) 또는 malloc(c) 와 같은 키워드로 인해 중간에 메모리 공간이 할당이 되는데, 개발자가 delete 또는 free와 같은 명령어로 해제해 주지 않으면, 프로세스 종료시까지 메모리공간이 살아있기 때..
-
Static array대학/자료구조 2022. 10. 16. 22:47
가장 기본적인 자료구조, 배열에 대해 공부해보자. 공부는 가상의 가방을 구현한다고 가정하고 진행 할 것이다. 단, 정적 배열은 너무 익숙한 방법이라 설명이 많지 않을 예정입니다... class bag { public: static const size_t CAPACITY = 20; ... private: int data[CAPACITY]; // member variable: data container size_t used; // member variable: counting data qty }; 기본적으로 정보를 저장할 data 배열이 있을 것이고, 배열의 기본 사이즈는 CAPACITY = 20으로 할당해준다. 가방의 사용량은 used로 측정할 것이다. 이제 가방에 필요한 기능을 구현 해볼건데, 먼저 가방..
-
c++ operator overloading대학/자료구조 2022. 10. 16. 22:19
기초 타입 변수의 경우 a + b 같은 연산자가 동작하는데 아무런 의심도 없이 사용했다. 하지만, 직접 정의한 클래스의 연산을 할 때, c1 + c2 같은 연산을 하면 에러가 발생한다. 이런 경우에 클래스에서 연산자 오버로딩 기법을 사용하면 된다. 설명을 위해서 이 포스팅에선 아래의 MyDoubleVector 클래스를 간단하게 정의하고 시작하겠다. class MyDoubleVector { public: ... private: double *data; // member variable: data container size_t max_capacity; // member variable: max qty of data size_t used; // member variable: counting data qty }..
-
c++ class, parameter types대학/자료구조 2022. 10. 16. 14:48
이번 포스트는 앞으로 자료구조 포스팅에서 사용할 c++ 기초 문법을 정리하고자 한다. (100% 커버는 못하고, 간단한 문법만 정리하고 나머지는 그 때 가서 정리하자) // rgb.h class RGB { public: // 생성자 RGB(char _red[] = (char *)"red", char _green[] = (char *)"green", char _blue[] = (char *)"blue"); // 파괴자 ~RGB(); void set_rgb(char _red[], char _green[], char _blue[]); char *&get_red(); char *&get_green(); char *&get_blue(); private: char *red; char *green; char *blu..
-
Pre, Postcondition대학/자료구조 2022. 10. 15. 12:11
자료구조와 크게 상관없는 이야기 같지만... 오늘 할 얘기는 함수 작성 시 가져야할 코딩 습관에 대한 이야기이다. 소프트웨어 개발의 단계를 세 단계로 요약하면 다음과 같이 흘러간다. Step 1 1. 요구 스펙 파악 2. 설계 3. 코드로 구현 Step 2 4. 만든 프로그램 분석 5. 테스팅 및 디버깅 6. 유지보수 Step 3 7. 필요가 없어질 시 삭제 개발 단계에서 기능의 구현은 외부 라이브러리를 가져다 쓰거나, 함수의 형태로 분할하여 만들게 되는데, 기능의 구현체는 하나의 공통점을 갖는다. 바로, 어떻게 구현되었는지는 몰라도 사용할 수는 있다는 점이다. 여기서 다음의 개념이 등장한다. Precondition Postcondition Pre, Postcondition을 하나의 주석문 쌍으로 작성하..