CS/자료구조(DS) 11

해싱 오버플로우 해결법; 개방주소법과 재해싱, 체이닝

해싱이란 ? 키값으로 직접 배열에 접근하는 것이 아니라, 키값을 해시 함수에 넣어서 나온 해시값을 가지고 해시테이블에 접근하여 원소를 탐색, 삽입, 제거하는 기법 예를 들어 array, binary, bubble, file, digit, direct, zero, bucket을 저장하려고 할 때, 첫 번째 글자를 키값으로 사용하여 a는 0, b는 1, c는 2와 같은 해시값을 할당한다. 해시값은 해시 테이블의 인덱스, 버킷 번호에 해당하기 때문에 각각의 값을 순서대로 삽입하면 해시 테이블은 다음의 그림과 같이 구성된다. 'bucket'은 주어진 슬롯이 다 찼기 때문에 해시 테이블에 삽입할 수 없고, 이와 같은 현상을 오버플로우라고 한다. 이러한 오버플로우를 해결하는 방법에는 크게 1. 개방주소법 , 2. ..

CS/자료구조(DS) 2021.04.20

AVL 트리(높이 균형 이진 탐색 트리) 개념과 삽입 연산

이진 트리, 이진 탐색 트리 개념 참고 : hyunah-home.tistory.com/entry/%EC%9D%B4%EC%A7%84%ED%8A%B8%EB%A6%AC%EC%9D%98-%EC%84%B1%EC%A7%88-%EC%9A%B4%ED%96%89%EA%B3%BC-%EC%9D%91%EC%9A%A9-%EC%88%98%EC%8B%9D%ED%91%9C%ED%98%84-%ED%8A%B8%EB%A6%AC-%EC%9D%B4%EC%A7%84%ED%8A%B8%EB%A6%AC%EB%A1%9C%EC%9D%98-%EB%B3%80%ED%99%98%EB%B2%95-%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89%ED%8A%B8%EB%A6%AC 이진트리의 성질, 운행과 응용; 수식표현 트리, 이진트리로의 변환법,..

CS/자료구조(DS) 2021.04.17

그래프의 개념과 종류, 구현

그래프 -> 연결되어 있는 객체 간의 관계를 표현하는 자료구조. 가장 일반적인 자료구조의 형태로 트리, 이진트리도 그래프의 특수한 경우. 선수과목 관계, 도로망, 영역간 인접 관계 등을 표현할 수 있음. ▷ 개념 · 그래프 G는 ( V,E )로 표시. 특별한 언급이 없으면 그래프는 자가 루프와 중복 에지가 없는 단순 그래프를 의미. · 정점(vertex) V(G) : 그래프 G의 정점들의 집합. 여러 가지 특성을 가질 수 있는 객체를 의미하며 노드라고도 불림. · 에지(edge) E(G) : 그래프 G의 에지들의 집합. 정점들 간의 관계를 의미하며 간선 또는 링크라고도 불림. · 인접 정점(adjacent vertex) 어떤 정점에서 에지에 의해 직접 연결된 정점 · 경로(path) 정점 s로부터 정점 ..

CS/자료구조(DS) 2021.03.30

우선순위 큐의 개념과 구현, 힙의 구현과 응용; 힙정렬

우선순위 큐(priority queue) -> 우선순위를 가진 원소들을 저장하는 큐. 들어온 순서에 상관없이 가장 우선순위가 높은 항목이 삭제됨. 스택이나 FIFO 큐도 우선순위 큐의 특별한 형태라고 볼 수 있음. 최소(min) 우선순위 큐와 최대(max) 우선순위 큐 존재. ▷ ADT create() :: = 우선순위 큐를 생성 init(pq) :: = 우선순위 큐 pq를 초기화 is_empty(pq) :: = 우선순위 큐 pq가 비어있는지 검사 is_full(pq) :: = 우선순위 큐 pq가 가득 찼는지 검사 insert(pq, x) :: = 우선순위 큐 pq에 원소 x를 추가 (x값을 우선순위라고 가정) deleteMin(pq) :: = 우선순위 큐 pq로부터 가장 우선순위가 높은 원소를 삭제하고..

CS/자료구조(DS) 2021.03.29

이진트리의 성질, 운행과 응용; 수식표현 트리, 이진트리로의 변환법, 이진탐색트리

트리 -> 부모-자식 관계의 노드들로 이루어진, 계층적인 관계를 나타내는 특별한 자료구조(비선형 리스트). ▷ 용어 · 노드 : 데이터, 정보가 저장된 트리의 구성 원소 · 에지(간선) : 노드와 노드 사이를 나타내는 구성 원소 · 루트 : 부모가 없는 노드, 최상단 노드 · 리프 : 자식이 없는 노드, 단말 노드 · 레벨 : 트리의 각 층의 번호(루트의 레벨은 0 또는 1) · 높이(깊이) : 트리의 최대 레벨 · 차수 : 노드가 가지고 있는 자식 노드 개수 이진트리 -> 공집합이거나, 공집합이 아닌 경우 특별히 지정된 노드인 루트가 있고, 각 노드는 최대 2개의 자식 노드가 존재하며, 각 노드가 왼쪽 부분트리 및 오른쪽 부분트리를 가짐. ▷ 분류 · 포화 이진트리(full binary tree) : ..

CS/자료구조(DS) 2021.03.24

큐의 구현과 응용; 덱(deque)

큐 -> 먼저 들어온 항목이 먼저 나가는 특수한 선형 리스트, 선입선출(FIFO) 구조. ○ 큐 ADT enqueue(q, item) :: = 새로운 원소 item을 큐 q에 삽입 dequeue(q) :: = 큐가 비어있지 않으면 큐 q에서 원소 삭제 후 반환 peek(q) :: = 큐가 비어있지 않으면 큐 q에서 원소 삭제하지 않고 원소 값만 반환 is_empty(q) :: = 큐가 비어있으면 true, 아니면 false를 반환 is_full(q) :: = 큐가 가득 차 있으면 true, 아니면 false를 반환 size(q) :: = 큐에 있는 원소의 개수를 반환 (length(q)) visit(q) :: = 큐에 있는 모든 원소 출력 (display(q), print(q)) ○ 배열을 이용한 큐 ·..

CS/자료구조(DS) 2021.03.22

스택의 구현과 응용; 괄호 검사, 수식 계산

스택 -> 삽입과 제거가 한쪽 끝에서만 이루어지는 특수한 선형 리스트. 후입선출(LIFO) 구조. ○ 스택 ADT create(s) :: = 스택 s를 생성한다. is_empty(s) :: = 스택 s가 비어있는지를 검사한다. is_full(s) :: = 스택 s가 가득 찼는가를 검사한다. push(s,e) :: = 스택 s에 원소 e를 삽입한다. pop(s) :: = 스택 s에서 가장 최근에 삽입된 원소(top 위치에 있는 원소)를 삭제하면서 그 값을 반환한다. peek(s) :: = 스택 s에서 가장 최근에 삽입된 원소(top 위치에 있는 원소)의 값을 반환한다. ○ 스택의 구현 · 배열을 이용한 스택의 구현 : 1차원 배열 stack[], 가장 최근에 입력되었던 자료를 가리키는 변수 top. 공백상..

CS/자료구조(DS) 2021.02.16

기본 자료 구조; 리스트의 구현

○ 리스트 ADT add_last(list,item) :: = 리스트의 맨끝에 원소를 삽입한다. (insert()) add_first(list,item) :: = 리스트의 처음에 원소를 삽입한다. add(list,pos,item) :: = pos 위치에 원소를 삽입한다. delete(list, pos) :: = pos 위치의 원소를 제거한다. delete(list,item) :: = 리스트에서 원소 item을 제거한다. clear(list) :: = 리스트의 모든 원소를 제거한다. (erase()) is_in_list(list,item) :: = item이 리스트 안에 있는지 검사한다. (member()) get_entry(list,pos) :: = pos 위치의 원소를 반환한다. (return()) g..

CS/자료구조(DS) 2021.02.15

기본 자료구조; 연결 리스트

연결 리스트 : 여러 노드들의 연결로 이루어진 리스트. 각 노드는 데이터 값을 저장하는 데이터 필드와 다른 노드의 주소값을 저장하는 링크 필드로 이루어져 있다. 노드의 삽입과 삭제가 용이하며 연속된 메모리 공간이 필요하지 않고 배열에 비해 크기 제한이 없다는 장점과 다소 구현이 어렵다는 단점이 있다. ▷ 연결 리스트의 종류 - 단순 연결리스트 : 하나의 링크 필드를 이용해 연결. 마지막 노드의 링크 값은 NULL. · 단순 연결 리스트 생성 : ListNode 구조체 생성, 동적 메모리를 할당 받아 연결 리스트 생성 //단순 연결 리스트 구현 typedef int element; typedef struct ListNode{ element data; struct ListNode *link; } ListNo..

CS/자료구조(DS) 2021.02.15

기본 자료구조; 배열의 개념과 응용(다항식 구현)

배열이란? -> 일반적으로 같은 형의 변수를 여러 개 만드는 경우에 사용. ˙ 개념 int A[6]; //1차원 배열 char s[12] = "game over" //문자열, terminating null character인 '\0'을 포함. int A[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}} //2차원 배열, 행 우선. int A[3][3][3]; //3차원 배열 * 2차원 배열에서의 실제 주소 구하기 : 2차원 정수 배열 A[m][n]에서 A[j][k]의 실제 주소 = base + ( j x n + k ) x sizeof(int) * 3차원 배열에서의 실제 주소 구하기 : 3차원 실수 배열 A[l][m][n]에서 A[i][j][k]의 실제 주소 = base + ..

CS/자료구조(DS) 2021.02.05