cs78 6: 자료구조-7(트라이:Retrieval) 트라이 : ‘트리’ 형태의 자료 구조 각각의 노드가 배열로 이루어져 있음 - 트라이에는 많은 메모리가 들지만 자료 구조 안에 있는 이름이나 단어를 찾는 데 일정한 시간을 가짐 - 맨 위에 있는 배열은 트라이의 루트 - 예를 들어 영어 알파벳으로 이루어진 문자열 값을 저장한다고 한다면 이 노드는 a부터 z까지의 값을 가지는 배열이 됨 그리고 배열의 각 요소, 즉 알파벳은 다음 층의 노드(a-z 배열)를 가리킴 - 그림과 같이 Hermione, Harry, Hagrid 세 문자열을 트라이에 저장해 보면 루트 노드를 시작으로 각 화살표가 가리키는 알파벳을 따라가면서 노드를 이어주면 됨 - 단순히 문자열의 각 문자를 보며 트리를 탐색해 나가기만 하면 되어서 위와 같은 트라이에서 값을 검색하는데 걸리는 시간은 ‘.. 2021. 12. 11. 6: 자료구조-6(해시 테이블) 해시 테이블: “연결 리스트의 배열” 해시 테이블에서는 단어나 이름 같은 입력값이 들어온다면 그 단어에 포함된 문자를 보고 어디에 그 이름을 넣을지 결정하는 방식이 흔하게 사용됨 - 이름이 해시 테이블에 저장되며, 알파벳 개수에 해당하는 총 26개의 포인터들이 있을 수 있으며, 해시 함수는 ‘이름의 가장 첫 글자’인 경우, 각 포인터는 그 알파벳을 시작으로 하는 이름들을 저장하는 연결 리스트를 가리키게 됨 - 해시 테이블 -> 세로: 배열 / 가로: 연결 리스트 - 충돌: 어떤 값을 넣으려고 하는데 이미 무언가 들어가 있는 경우. / 최대한 충돌을 피해야 함! 인덱싱을 하는데 사용하는 배열 -> 해시 함수 Albus를 해시함수에 넣으면 0이 반환되어서 0번째 배열 즉 A에 해당하게 됨 Harry를 해시함.. 2021. 12. 11. 6: 자료구조-5(연결 리스트: 트리) 트리 : 연결 리스트를 기반으로 한 새로운 데이터 구조 - 연결 리스트에서의 요소들의 연결은 1차원적으로 구성되어 있고, 트리에서의 노드들의 연결은 2차원적으로 구성되어 있음 - 각 노드는 일정한 층에 속하고, 다음 층의 노드들을 가리키는 포인터를 가지게 됨 - 가장 높은 층에서 트리가 시작되는 노드 ‘루트’ - 루트 노드는 다음 층의 노드들을 가리키고 있고, 이를 ‘자식 노드’라고 함 - 트리의 노드들은 최대 두 개의 자식 노드를 가짐. 이진법의 이진을 따와서 최대 2라는 것을 표현 - 왼쪽 자식 노드는 자신의 값보다 작고, 오른쪽 자식 노드는 자신의 값보다 큼 이런 트리 구조는 이진 검색을 수행하는 데 유리함 - 트리를 탐색하려면 트리의 가장 위에 있는 루트라는 노드만 알려주면 트리의 모든 곳으로 갈.. 2021. 12. 11. 6: 자료구조-4(연결 리스트: 코딩과 시연) 연결리스트의 코드를 나눠서 보기 1. 연결 리스트의 기본 단위가 되는 node 구조체를 정의 typedef struct node { //node 안에서 정수형 값이 저장되는 변수를 number로 지정 int number; //다음 node의 주소를 가리키는 포인터를 *next로 지정 struct node *next; } node; 2. list라는 변수 생성하고 그곳에 node의 주소(포인터)가 들어감 int main(void) { // List of size 0 -> 연결리스트를 아무것도 없는 상태로 초기화(NULL) // 연결 리스트의 첫 번째 node 가리킴 // list라는 빈박스를 NULL로 표현(아무것도 들어가 있지 않아서) node *list = NULL; } 3. 새로운 node를 위한 메.. 2021. 12. 11. 6: 자료구조-3(연결 리스트: 도입) 자료 구조: C, C++, 자바, 파이썬에 있는 프로그래밍 구조 자료 구조는 컴퓨터 메모리에 정보를 각기 다른 방법으로 저장할 수 있도록 해 줌 데이터 구조는 우리가 컴퓨터 메모리를 더 효율적으로 관리하기 위해 서로 정의하는 구조체 일종의 메모리 레이아웃, 또는 지도라고 생각할 수 있음 1) 구조체(struct) - C에서 자신만의 구조를 만들 수 있는 키워드(예, person 구조체에 이름과 번호) 2) . 구조체의 속성 값에 접근할 때 사용(속성 값을 가져올 때 사용) 3) * 메모리 덩어리로 접근할 수 있는 역참조 연산자 배열 장점: 쉽게 인덱싱할 수 있음 단점: 고정된 값 배열에서는 각 인덱스의 값이 메모리상에서 연이어 저장되어 있음 연결 리스트 : 각 값이 메모리 상의 여러 군데에 나뉘어 있어도.. 2021. 12. 11. 6: 자료구조-2(배열의 크기 조정하기) 리스트에 1, 2, 3을 할당하는 코드 작성 include int main(void) { int list[3]; list[0] = 1; list[1] = 2; list[2] = 3; for (int i = 0; i 2021. 12. 11. 이전 1 ··· 5 6 7 8 9 10 11 ··· 13 다음