본문 바로가기

반응형

Algorithm

(55)
[알고리즘](C언어) 트리 탐색을 이용한 사전의 트리 구현 - 이진탐색트리(BST) 탐색 트리의 종류로 두 가지를 다룬다. 이진탐색트리와 AVL 트리이다. 1. 이진탐색트리(BST) 내부노드에 (키, 원소) 쌍을 저장하며 다음의 성질을 만족하는 이진트리 이진트리와는 다르다! 탐색이 가능해야하는 이진탐색트리다. u, v, w가 모두 트리노드일 때, u와 w가 각각 v의 왼쪽과 오른쪽 부트리에 존재할 때 다음이 성립해야 한다. key(u) < key(v) 중위순회 후계자 y는 T를 중위순회할 경우 노드 w 바로 다음에 방문하게 되는 내부노드이므로 w의 중위순회 후계자(inorder successor)라 불린다. 따라서 y는 w의 오른쪽 부트리 내 노드 중 가장 왼쪽으로 돌출된 내부노드 2. y의 내용을 w에 복사 3. reduceExternal(z) 작업을 사용하여 노드 y와 z를 삭제 r..
[알고리즘](C언어) 사전 ADT 개념, 선형 탐색과 이진 탐색을 이용한 사전의 리스트 구현 1. 사전 ADT 탐색 가능한 형태의 (키, 원소) 쌍 항목들의 모음을 모델링 주요 작업 탐색(searching) 삽입(inserting) 삭제(deleting) 사전의 종류 무순사전 순서사전 2. 사전 ADT 메쏘드 일반 메쏘드 integer size() 사전의 항목 수를 반환 boolean isEmpty() 사전이 비어 있는지 여부를 반환 접근 메쏘드 element findElement(k) 사전에 키 k를 가진 항목이 존재하면 해당 원소를 반환 그렇지 않으면 특별 원소 NoSuchKey를 반환 갱신 메쏘드 insertItem(k,e) 사전에 (k,e) 항목을 삽입 element removeElement(k) 사전에 키 k를 가진 항목이 존재하면 해당 항목을 삭제하고 원소를 반환 그렇지 않으면 특별 ..
[7주차] 구조체 #11.4 구조체 포인터 구조체 포인터 구조체 변수를 가리키는 포인터 즉, 구조체 변수의 시작 주소가 저장된다. 기본적인 사용법은 일반적인 포인터와 동일하지만 구조체 포인터에서만 사용하는 문법이 있다. ※ 구조체 멤버로 포인터를 사용하는 것과 구분해야 함. 그 경우는 아래의 코드. struct student { char *name; }; 구조체 포인터 변수 선언 및 연결 일반 포인터 선언과 동일: * 사용 주소 연산자(&): 구조체 변수의 시작 주소 struct student st1 = {10, "Tom", 3.2}; struct student *pst;// 구조체 포인터 변수 선언 pst = &st1;// 연결 간접 연산자(*)를 이용한 구조체 변수 접근 st2 = *pst; 간접 참조를 이용한 구조체..
[6주차] 구조체 #11.1 구조체 개요 구조체(structure) 의미상 관계가 있는 항목을 그룹으로 묶어 표현한 자료형 구조체는 변수의 모양(type)이다. 차이는 int, char은 기본적으로 정해져 있는 기본 자료형이고, 구조체는 사용자가 용도에 맞게 만들어서 사용하는 사용자 자료형이다. 구조체 구성하는 변수들을 멤버라고 부른다. ※ 구조체의 개념과 문법적 성질은 배열(동일한 정보의 단순 모임)과 매우 다르다. 구조체는 자료형 다른 것도 묶을 수 있다. 비교하면 더 헷갈리니 분리해서 공부하자. #11.2 구조체의 정의, 선언, 사용(1) 구조체 정의 자료형(변수의 모양)을 정의하는 것 - 변수 선언과는 다른 개념 struct 키워드 사용 struct 구조체자료형이름 { 멤버자료형 멤버변수; 멤버자료형 멤버변수; }..
[10주차] 동적 할당 #12.2 동적 메모리 사용 절차(2) 🏃‍♂️ 동적 메모리 할당 함수 사용법을 익힌다. 동적 메모리 해제: free() 함수 지정된 메모리 공간을 해제(free) 함수 원형 void free(void *ptr); 함수 인자 해제할 메모리 공간을 가리키는 포인터 변수 기능 ptr이 가리키는 메모리 해제 ※ ptr 변수 자체를 해제시키는 것이 아니다. ex. int *p = NULL; p = (int *)malloc(10*sizeof(int)); free(p); // p가 가리키는 영역 해제 ex. 1. 정수 한 개를 저장할 수 있는 메모리 공간 할당하고 해제하기 2. float형 실수 한 개를 저장할 수 있는 메모리 공간 할당하고 해제하기 3. double형 실수 15개를 저장할 수 있는 메모리 공간 할..
[9주차] 동적 할당 #12.1 동적할당 개요 정적 메모리 할당 프로그램 실행 전에 변수의 메모리 할당 크기가 정해지고 메모리 할당 크기가 실행하는 중에 변하지 않는 방식을 정적 할당이라고 한다. 지금까지는 "변수 선언"을 통해서 기억 장소를 확보했다. 변수는 코드 작성 단계에서 정해지고, 할당되는 메모리 크기는 프로그램을 실행할 때마다 일정하다. char ch;// 1 바이트 - 일반 변수 int score[10];// 40 바이트 - 배열 변수 struct student {int id; float avg;} st1;// 8 바이트 - 구조체 변수 int *pi;// 4 바이트 - 포인터 변수 정적 할당 방식의 문제점 필요한 메모리 크기를 모를 때, 최대로 큰 크기를 가정해서 변수를 선언해야 한다. 프로그램 실행 전 메모리..
[5주차] 문자열 문자열의 저장 방식 #10.4 문자열의 배열 🏃‍♂️ 다수의 문자열을 처리하는 방법을 학습한다. 다수의 문자열 처리하기(1): 문자 배열을 여러 개 사용 2차원 문자 배열 이용 int i; char num[3][5] = {"zero", "one", "two"}; for( i=0; i 0 문자열 lhs>rhs -> 양수 문자는 단순히 아스키 코드 값 비교함. 널 문자 '\n'가 가장 작음 문자가 같을 경우 다음 문자로 이동해서 비교 참고: strncmp() 함수: 비교할 문자열의 길이를 지정하는 함수 char s1[50] = "hi", s2[50] = "hello"; int cmp_result = strcmp(s1,s2); if(cmp_result gets_s() 사용 gcc의 경우, 아직 gets()를 ..
[4주차] 문자열 #10.1 문자열 개요 문자열(string) 연속적으로 나열된 문자들의 묶음 문자 배열을 사용해 저장 배열과 반복문을 사용하면 문자 단위로 초기화하고 출력하는 코드를 작성할 수 있지만 문자열을 이용하면 보다 더 쉽게 처리할 수 있다. 예를 들면, 아래의 두 코드는 같은 기능을 구현한 것이다. 1. 배열 + 반복문 char str[8] = {'H','e','l','l','o'}; int i; for (i=0;i

반응형