일단 나무위키 정보부터 습득해보자.
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0
흐름 : 자료구조
자료구조(資料構造, 영어: data structure)는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.
자료구조의 선택문제는 대개 추상 자료형의 선택으로부터 시작하는 경우가 많다.
흐름 : 자료구조 > 추상 자료형, 추상적 자료 구조
추상 자료형(Abstract data tpe, ADT)이란? : 자료들과 그 자료들에 대한 연산들을 명기한 것이다. 만약 여기에 시간 복잡도 정보를 부여한다면 이것은 '추상적 자료 구조'가 된다.
ex) 복소수, 리스트, 스택, 큐, 맵, 우선순위 큐, 집합 등이 있다.
-> 추상 자료형은 '인터페이스(서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면)'와 '구현'을 분리하여 추상화 계층을 둔 것.
-> 자료에 대한 연산은 아래 2가지로 나뉜다.
1. 자료에 대하여 질의를 던지는 것
2. 자료를 변경하기 위한 연산
흐름 : 자료구조 > 추상 자료형, 추상적 자료 구조
자료구조는 각 연산 및 목적에 따라 취사선택할 수 있다.
ex) B-트리 : DB에 효율적 / 라우팅 테이블 : 네트워크(인터넷, 인트라넷)에 일반적.
자료구조가 선택되면 적용할 알고리즘은 상대적으로 명확해지기 마련이다. 때로는 특정 알고리즘의 연산이 반드시 필요하여 먼저 정해지는 경우도 있다.
자료구조에서 가장 기초적인 단위는 행렬, 레코드, 유니온, 참조와 같은 것이다. 예를 들어, Nullable 참조는 참조와 유니온의 조합으로 나타낼 수 있으며, 가장 단순한 자료구조 가운데 하나인 연결 리스트는 레코드와 Nullable 참조로 나타낼 수 있다.
흐름 : 자료구조 > 추상 자료형, 추상적 자료 구조 > 행렬, 레코드, 유니온, 참조
1. Matrix : 2차원 배열로 구성된 자료구조. 숫자, 문자 등 동일한 형식의 데이터를 행과 열의 형태로 저장한다.
[1, 2, 3],
[4, 5, 6]
]
사용 ex) 이미지 처리, 그래프 표현(adjacent matrix), 수치 연산 등.
"name": "Alice",
"age": 20,
"grade": "A"
}
struct Student {
char name[20];
int age;
char grade;
};
사용 ex) 데이터베이스의 테이블 한 행(row), 객체지향 프로그래밍의 인스턴스 등.
union Data {
int i;
float f;
char str[20];
};
하나의 Data 인스턴스는 i, f, str중 하나만 유효하다.
사용 ex) 메모리 절약이 중요한 임베디드 시스템 등.
b = a # b는 a를 참조
b[0] = 100
print(a) # [100, 2, 3] -> b가 바꾸면 a도 바뀜
사용 ex) 객체 공유, 포인터 연산(C/C++), Deep/Shallow Copy concept