일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- set
- Stack
- 아두이노 소스
- LineTracer
- WinAPI
- Array
- Arduino
- 아두이노 컴파일러
- 운영체제
- 수광 소자
- stl
- 자료구조
- Deque
- 시스템프로그래밍
- C언어
- Visual Micro
- html
- 통계학
- directx
- 컴퓨터 그래픽스
- map
- list
- c++
- arduino compiler
- vector
- queue
- 라인트레이서
- Algorithm
- 아두이노
- priority_queue
- Today
- Total
목록Programming (135)
Kim's Programming
단순연결 리스트를 만들기 전에 기본적인 사항들 몇개 짚고 가겠습니다. 노드 앞에서 보았듯이 단순연결 리스트는 앞에서 뒤로 한방향으로만 연결이 되어 있으며 제일 뒤의 노드의 Link값은 NULL이 들어갑니다. 우선 단순 연결 리스트의 노드 구조체부터 살펴보겠습니다.12345typedef struct ListNode{ int VALUE;//값 struct ListNode *Link;//다음 노드의 주소를 저장}ListNode;cs노드는 값을 저장하는 VALUE변수와 다음 노드를 가리키기 위한 포인터 변수로 이루어져 있습니다. 노드가 구조체이기 때문에 다음 노드를 가리키는 포인터 또한 구조체를 가리키는 포인터를 선언해 주어야합니다. 다음은 노드를 생성하는 방법입니다. 동적으로 리스트를 만드는 것이므로 노드 객..
연결 리스트 지난 포스팅에서는 배열을 이용한 리스트를 구현해 보았습니다. 하지만 배열은 크기가 지정이 되어있어서 넣는 양의 한계가 있으며 그렇다고 무한정 늘려서 만들게 되면 또 쓸데없는 메모리 낭비를 할 가능성이 매우 높아집니다. 그래서 만드는 것이 연결 리스트 입니다. 연결 리스트는 여러 개의 작은 공간을 연결하여 하나의 자료구조를 표현하며 또 크기 변경이 유연하며 낭비를 하지 않아 더 효율적으로 메모리를 사용할 수 있습니다. 동적으로 구현된 연결 리스트는 메모리 안에서 노드의 물리적 순서가 리스트의 논리적 순서와 일치할 필요가 없습니다. 다음으론 연결리스트의 장단점을 알아 보겠습니다. 장점 삽입 및 삭제가 용이연속된 메모리 공간이 필요없음크기 제한이 없음(시스템이 허용하는 메모리한해서) 단점 구현이 ..
리스트(List) 리스트란 순서를 가진 항목들의 모임입니다. ADT를 정의하면 저장 형태는 데이터를 나란히 저장을 하며 저장 특성으로는 중복된 데이터의 저장을 허용한다는 것입니다. 리스트 자료구조의 ADT의 예시는 다음과 같습니다. (지정 하기 나름입니다) 리스트의 초기화데이터 저장 (데이터 추가)저장된 데이터의 탐색 및 탐색 초기화다음 데이터 참조(반환)바로 이전에 참조(반환)이 이루어진 데이터의 삭제현재 저장되어 있는 데이터의 수 반환 그럼 이걸 C언어 함수 같이 만들어 볼까요? ListInit(&list) :: 리스트 초기화Linsert(&list, item) :: 데이터 저장LFirst(&list, item) :: 저장된 데이터의 탐색 및 탐색 초기화LNext(&list, item) :: 다음 데..
자료구조 & 알고리즘 프로그램에서 데이터를 표현하는 것을 자료 구조라고 합니다. 일반적으로 프로그램을 자료구조 + 알고리즘 이라고 표현을 할 수 있죠. 일반적인 자료구조와 알고리즘을 모두 가지고 있는 프로그램을 예시를 들어보겠습니다. 위의 소스와 같이 한 프로그램은 자료구조와 알고리즘이 있다는 것을 확인 할 수 있고 데이터 표현을 자료구조(배열)을 통해서 하고 있으며 더하는 방식의 데이터처리(알고리즘)를 하고 있다는 것을 확인 할 수 있습니다. 그럼 자료구조에 대해서 알아보겠습니다. 자료구조 그렇다면 자료 구조의 정확한 의미는 무엇일까요? 그리고 왜 사용할까요? 자료구조는 데이터의 특성에 따라 분류, 구성, 저장하는 모든 작업을 의미합니다. 또 이렇게 분류, 구성을 함으로써 데이터를 효율적으로 사용할 수..
상속의 특성 C++상속의 특성 객체 지향이라는 똑같은 이론에 기반하더라도 각 언어별로 상속을 구현하는 방법과 수준에는 다소 차이가 있습니다. C++언어의 상속은 대체로 세 가지 정도로 특징을 요약할 수 있습니다. 하나의 기반 클래스로부터 여러 개의 클래스를 파생시킬 수 있습니다. 세포라는 기본적인 속 성과 호흡한다, 번식한다, 등의 동작을 가지는 생물로부터 동물을 파생시켜 움직인다는 동작을 추가할 수 있습니다. 동물은 생물의 모든 특성을 가지기 때문에 이런 파생이 가능합니다. 마찬가지로 생물로부터 식물이나 미생물도 파생 가능한데 둘 다 생물의 일종이기 떄문입니다.이렇게 되면 동물, 식물, 미생물은 공동의 조상인 생물로부터 물려받은 속성과 동작을 공유하게 됩니다. 물론 각 파생 클래스는 기반 클래스로부터 ..
상속 클래스 확장 상속은 캡슐화, 추상화와 함께 객체 지향 프로그래밍의 중요한 특징중 하나입니다. 캡슐화와 추 상화는 객체가 온전한 부품이 될 수 있는 방법을 제공하는데 비해 상속은 클래스를 좀 더 쉽게 만들 수 있는 고수준의 재사용성을 확보하고 클래스간의 계층적인 관계를 구성함으로써 객체 지향의 또 다른 큰 특징인 다형성의 문법적 토대가 됩니다. 상속(Ingeritance의 사전적 의미는 자식이 부모가 가진 모든 것을 물려받는 것을 의미하는데 OOP의 상속도 기본적인 의미는 동일합니다. 이미 정의되어 있는 클래스의 모든 특성을 물려받아 새로운 클래스를 작성하는 기법을 상속이라고 합니다. 흔히 상속은 이미 만들어진 클래스를 재활용하기 위한 기법으로 소개되며 재활용이 상속의 가장 큰 장점이기는 하지만 상속..
오버로딩의 예 여기까지 주로 + 연산자만을 대상으로 연산자를 오버로딩하는 기본적인 방법에 대해 알아보았습니다. 덧셈 연산자가 가장 기본적이고 연산자의 일반적인 특징을 대변하는 대표적 연산자이기 떄문입니다. 이번엔 개별 연산자에 대해서 알아보며 기본 규칙외에도 연산자별로 고유한 규칙과 주의 사항들이 존재합니다. 모든 연산자에 일관되게 적용되는 규칙은 없고 연산자의 동작과 의미에 따라 오버로딩하는 방법이 다릅니다. 대개의 경우 상식과 일치하므로 어렵지는 않지만 연산자의 수가 많기 때문에 한꺼번에 다 공부할 수는 없습니다. 외우려기 보다는 연산자를 써야할때 상세하게 공부하는 것이 좋습니다. 연산자 몇개만 알아보겠습니다. 관계 연산자 관계 연산자는 동일한 타입의 두 객체에 대해 상등 및 대소를 비교합니다. 클래..
::리턴 타입 연산의 결과로 어떤 타입을 리턴할 것인가는 연산자별로 다릅니다. 정수끼리 더하면 정수가 되고 실수끼리 곱하면 실수가 되는 것처럼 객체에 대한 연산 결과는 보통 객체와 같은 타입이 되지만 반드시 그런 것은 아닙니다. 논리 연산자의 경우는 BOOL(또는 bool)형이나 int형이 리턴될 수도 있고 첨자 연산자 [ ]의 경우처럼 특수한 연산자는 멤버 중의 하나를 리턴하는 경우도 있습니다. 앞에 있던 Time클래스의 + Complex 클래스의 +는 둘 다 크래스형의 객체를 리턴했는데 그래야 연산결과를 제 3의 객체에 대입할 수 있습니다. 만약 +연산자가 덧셈만하고 결과를 리턴하지 않는다면 A=B+C같은 대입은 불가능할 것이며 A=B+C+D같은 계산도 할 수 없을 것입니다. 임의의 타입 T에 대한 ..