정의 자료의 집합 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것 CRUD 자료구조를 구현하는데 있어 기본적으로 수행해야할 연산들 Create : push(), insert() Read : peek(), get(), find() Update : at() Delete : pop(), remove() 배열 메모리 상에 같은 타입의 자료가 연속적으로 저장된다. 단위 : 자료값을 나타내는 가장 작은 단위. 연결 리스트 단위 [Node] 노드는 자료와 다음 노드를 가리키는 참조값으로 구성되어 있다. 노드가 다음 노드로 아무것도 가리키지 않으면 리스트의 끝이다. 원형 연결리스트 각 노드는 다음 노드를 가리키고, 마지막 노드가 처음 노드를 가..
참조형 변수 (Reference variable) 참조형 변수는 reference와 value가 같은 취급이다. 참조형변수는 선언과 동시에 초기화해야한다. 초기화 된 후에는 다른 변수를 참조하도록 변경할 수 없다. 참조형 변수는 l-value(수정할 수 있는 값)를 가리켜야한다. 참조형 변수는 NULL로 초기화 할 수 없다. int &ref = value1; // (O) ref = value2; // (X) 참조형 vs 포인터 위에서 ref == value라고 말했다시피 참조형은 접근할 때 암시적으로 역참조되는 포인터와 같은 역할을 한다. 포인터와 비교해보았을 때 아래 코드에서 *ptr과 ref는 동일하게 평가된다. (ptr은 &ref와 동일하게 평가) 참조형은 선언과 동시에 유효한 객체로 초기화해야하고..
오늘은 자바가 대체적으로 어떤 문법을 가지고있으며 클래스들을 중심으로 구동된다는 것을 처음으로 접해보았다. 이번달 1월은 자바로 간단한 계산기 앱을 만든다는 목표를 가지고 이를 수행하고자 한다. 아주 기본적인 변수, 타입 등은 대부분C나 C++에서 봤던 것과 유사했지만 외부 라이브러리를 애용(?)하다싶이 많이 사용하는 것을 보아 많은 문서 참조가 필요할 것 같다. 13.0.1version에 맞는 문서를 확인해가면서 라이브러리 참조를 해야겠다. --? https://docs.oracle.com/en/java/javase/13/docs/api/index.html
컴파일러가 컴파일 하기전 처리하는 부분이다. 표준 라이브러리는 로 감싼다. #include → 검색 대상 비표준 라이브러리는 “”로 감싼다. #include “~.h” → 현재 폴더 큰따옴표 내부에 절대경로 혹은 상대경로로 표시해 줄 수 있다. 상대경로의 경우 시스템에 등록된 경로에서 찾는다. 전처리문 종류 #include 파일 처리를 위한 전처리문 미리 정의되어있는 파일을 Load한다. (매크로같이 치환 개념이 아님) #define 상수값을 지정하기 위한 예약어 (매크로 → 치환의 개념) 함수처럼 선언할 수 있지만 함수가 아니기때문에 함수처럼 오버헤드가 일어나지 않는다. #undef #define으로 정의된 매크로를 무효화한다. #if / #endif 조건문과 동작 원리는 같다. #define somt..
바이트 순서(Byte Order) - Big Endian 데이터가 상위 바이트부터 적재하는 방식 최상위바이트가 가장 낮은 메모리 주소부터 저장되는 방식 사람이 읽는 데 익숙하여 디버깅에 있어 편리하다는 특징이 있다. - Little Endian 데이터가 하위 바이트부터 메모리에 적재(Host Ordering) 최상위 바이트가 가장 높은 메모리 주소부터 저장되는 방식 기계의 연산이 효율적이라는 특징이 있다. 기계 연산의 효율성은 아래와 같은 이유가 있다. 아래 그림에서 Big Endian의 경우 32비트 수인 0X2A를 읽기 위해 32비트 모두를 읽어야하지만 Little Endian의 경우 32비트의 수 중 1, 2바이트만 떼어내면 바로 8, 16비트를 얻어낼 수 있다. - ASLR(Address Spac..
정렬 정렬을 이용하는 과정에서 최댓값과 최솟값을 구할 수 있다. 최댓값과 최솟값을 구하는 방법을 알아두면 유용하다. 순차정렬 반복적인 방법으로 해결하는 알고리즘이다. 배열의 가장 앞에서부터 작은 원소를 배치하는 방법이다. #include void swap(int, int); int main() { int arr[10] = { 10, 3, 4, 2, 6, 5, 8, 1, 9, 8 }; int size = sizeof(arr) / sizeof(int); for (int i = 0; i < size; i++) { for (int j = i; j < size; j++) { if (arr[j] < arr[i]) swap(&arr[j], &arr[i]); } } for (int k = 0; k < size; k++..