일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 정의란무엇인가
- 취준생일상
- 컴퓨터과학
- 치앙마이
- cpu작동원리
- 개발독학
- 태국
- 일기
- 입문
- 개발자
- vue.js
- 프로그래머스
- 실력향상
- 취업준비생
- 레지스터
- 깃허브
- 치앙마이살기
- 태국살이
- 초보개발자
- 32비트컴퓨터
- 커리어전환
- 얄팍한코딩사전
- 64비트컴퓨터
- 스터디데이
- 일상
- 치앙마이살이
- 얄코
- 엑사바이트
- 강의노트
- vue.js.
- Today
- Total
마농의 개발 일지
CS50강 6강 자료구조 본문
배열의 크기 조정하기
현재 배열 저장된 메모리 바로 옆에 이미 다른 데이터가 저장되어 있을 가능성 높음.
때문에 새로운 공간에 더 큰 크기 메모리 다시 할당한 후, 배열의 값을 하나씩 옮겨줘야 함.
+이전 메모리 해제
realloc 함수
ex) int *tmp = realloc(list, 4 * sizeof(int));
연결 리스트
데이터 구조, 자료구조 : 컴퓨터 메모리를 더욱 효율적으로 관리하기 위해 새로 정의하는 구조체(struct)
일종의 메모리 레이아웃.
연결 리스도 자료구조 중에 하나.
값과 함께 다음 값의 주소(포인터)를 저장함.
연결 리스트 정의 방법.
typedef struct node
{
int number;
struct node* next;
}
node
연결 리스트의 장단점
장점: 값을 옮기거나 복사하지 않고 배열의 크기 조절 가능.
단점: 임의 접근법을 할 수 없음.
search, input : O(n)
트리
트리 : 연결리스트를 기반으로 한 새로운 데이터 구조
연결리스트는 1차원적 노트 연결
트리는 2차원적 노드 연결. 각 노드에 포인터 2개 씩
typedef struct node
{
int number;
struct node *left;
struct node *right;
}
node;
이진 탐색 트리 가능. (재귀)
다시 말해 메모리를 조금 더 사용(포인터 2개)함으로써 search, input을 다시 O(log n) 수준으로 내릴 수 있는 것.
해시 테이블
해시 테이블 : 연결리스트들의 배열.
해시 함수 : 어떤 값들이 배열에 어떻게 담길지 결정하는 맞춤형 함수
이상적인 해시 함수의 경우, 각 칸에 하나의 값만 담김.
search time = O(1)
하지만 최악의 경우 단 하나의 칸에 모든 값들이 담겨 O(n)이 될 수 있음.
일반적으로 해시 함수를 고안하는 데 많은 노력을 들여 거의 O(1)에 가깝게 구현함.
트라이 (검색 'retrieval'의 줄임말)
트라이 : 각각의 노드가 배열로 이루어진 트리
search, insert : 상수 시간 O(1)
대신 기본적으로 메모리가 많이 듦. 저장하는 값 많아질 수록 (마치 경제학의 규모의 경제처럼) 효율적이게 되는 지도.
큐, 스택, 딕셔너리
큐(queue) : FIFO (First In First Out, 선입선출)의 자료구조.
- enqueue
- dequeue
스택(stack) : 식당 쟁반. FIFO 가 아니라, LIFO(Last In First Out, 후입선출)의 자료구조.
ex) Gmail 메일박스 (항상 최신 메일을 먼저 볼 수 있게)
- push
- pop
딕셔너리 : 해시테이블.키-값, 단어-값, 단어-페이지 넘버 등 다양한 쌍으로 이루어진 자료 구조.
'CS' 카테고리의 다른 글
컴퓨터 구조 입문 - CPU (0) | 2022.07.08 |
---|---|
32bit 컴퓨터의 메모리가 4GB가 되는 이유 (2) | 2022.07.06 |
CS50 5강 메모리 (0) | 2022.07.05 |