-
3.4 구조체와 포인터자료구조(C)/배열,구조체,포인터 2020. 7. 17. 11:58
구조체에 대한 포인터를 선언하고 포인터를 통하여 구조체 멤버에 접근할 수 있다. 표기법은 "->"이다. ps가 구조체를 가리키는 포인터라 할 때, (*ps).i 보다는 ps->i라고 쓰는 것이 더 편리하다. 자료 구조에서 구조체에 대한 포인터도 자주 함수의 매개변수로 전달된다. #include #include #include typedef struct studenTag { char name[10]; int age; double gpa; } student; int main() { student *s; s = (student *)malloc(sizeof(student)); if (s == NULL) { fprintf(stderr, "메모리가 부족해서 할당할 수 없습니다."); exit(1); } strcpy..
-
3.3 동적 메모리 할당자료구조(C)/배열,구조체,포인터 2020. 7. 17. 11:10
동적 메모리 할당(dynamic memory allocation) C언어에서는 필요한 만큼의 메모리를 운영체제로 부터 할당받아서 사용하고, 상용이 끝나면 시스템에 메모리를 반납하는 기능이 있다. 히프(heep) 동적 메모리가 할당되는 공간 운영체제가 사용되지 않는 메모리 공간을 모아 놓은 공간이다. 동적 메모리 할당 코드 int *p; p = (int *)malloc(sizeof(int)); 동적메모리 할당 *p = 1000; 동적메모리 이용 free(p); 동적메모리 반납 malloc() size 바이트 만큼의 메모리 블록을 할당한다. 동적 메모리 블럭의 시작 주소를 반환한다. 반환되는 주소의 타입은 void *이므로 이를 적절한 포인터로 형변환시켜야 한다. 포인터로만 사용이 가능하다. *p = 100..
-
3.2 포인터자료구조(C)/배열,구조체,포인터 2020. 7. 13. 18:09
포인터(pointer) 다른 변수의 주소를 가지고 있는 변수이다. ex) int a = 100; int *p; p = &a; p가 a를 가리킨다. 포인터와 관련된 연산자 & : 주소 연산자(변수의 주소를 추출한다.) * : 간접참조 연산자(포인터가 가리키는 곳을 가리킨다.) 역참조 연산자라고도 한다. ex) int a; //정수형 변수 p = &a //변수의 주소를 포인터로 저장 int a = 20 *p = 200; //포인터 p가 가리키는 곳에 200을 저장한다 -> a = 200; NULL 포인터 어떤 객체도 가리키지 않는 포인터이다. 포인터가 아무것도 가리키고 있지 않을 때는 항상 널포인터 상태로 만들어 두는 것이 좋다. 함수 매개변수로 포인터 사용 포인터는 함수의 매개변수로 전달될 수 있다. 특정..
-
3.1 배열자료구조(C)/배열,구조체,포인터 2020. 7. 9. 17:34
배열(array)의 개념 동일한 타입의 데이터를 한 번에 여러 개 만들 때 사용된다. "연속적인 메모리 공간"이 할당되고 index 번호를 사용하여 쉽게 접근이 가능하다. -> 렌덤 억세스: 기억 장치에서 자료를 읽거나 쓸 때 기억 장소에 관계없이 동일한 접근 시간이 걸리는 접근 방식. 즉, 기억 장치에 저장된 자료를 차례대로 접근하지 않고 거의 동일한 시간 내에 임의의 장소를 찾아 접근할 수 있는 방식이다. ex) int list[6]; 배열 ADT array 객체: 쌍의 집합 연산: - create(size) ::= size개의 요소를 저장할 수 있는 배열 생성 - get(A, i) ::= 배열 A의 i번째 요소 반환. - set(A, i, v) ::= 배열 A의 i번째 위치에 값 v 저장. c에서는..
-
2.1 순환자료구조(C)/순환 2020. 7. 9. 16:53
순환(recursion) 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. ex) int factorial(int n) { if(n factorial(3) = 3 * factorial(2) = 3 * 2 * factorial(1) = 3 * 2 * 1 = 6 순환 호출의 내부적인 구현 복귀주소가 시스템 스택에 저장되고 호출되는 함수를 매개변수(parameter)와 지역 변수를 스택으로부터 할당받는다. -> 이런 함수를 위한 시스템 스택에서의 공간을 활성 레코드(activation record) 순환 알고리즘의 구조 - 자기 자신을 순환적으로 호출하는 부분 - 순환 호출을 멈추는 부분으로 구성 순환 반복 반복: for or while 등의 반복구조로 되풀이 하는 방법이다...
-
1.2 알고리즘의 성능 분석자료구조(C)/자료구조와 알고리즘 2020. 7. 6. 15:29
알고리즘 성능 분석하는 이유 1. 최근 상용 프로그램의 규모가 이전에 비해서는 엄청나게 커지고 있기 때문이다. 2. 사용자들이 점점 빠른 프로그램을 선호한다. 수행시간 측정방법 단순하지만 확실한 방법은 알고리즘을 프로그래밍 언어로 작성하여 실제 컴퓨터상에 실행시킨 다음, 그 수행시간을 측정하는 것이다. 하지만 이 방법은 몇 가지 문제가 있다. 1. 알고리즘이 복잡한 경우에는 구현해야 된다는 큰 부담이 될 수 있다. 2. 똑같은 하드웨어를 사용하여 알고리즘들의 수행시간을 측정해야 한다. 3. 실험되지 않은 입력에 대해서는 수행시간을 주장할 수 없다. 4. 컴퓨터 언어에 따라 수행 시간이 달라질 수 있다. 알고리즘 복잡도 분석 방법 알고리즘 복잡도 분석 구현하지 않고 모든 입력을 고려하는 방법이고 실행 하드..
-
1.1 추상 자료형자료구조(C)/자료구조와 알고리즘 2020. 7. 6. 15:23
추상 자료형? 먼저 자료형(data type) 말 그대로, "자료(data)의 종류" "데이터 타입"이다. 자료형에는 기초 자료형, 파생 자료형, 사용자 정의 자료형 기초 자료형: char, int, float, double 파생 자료형: 배열, 포인터 사용자 정의 자료형:구조체 , 공용체, 열거형 자료형을 작성하 때는 실행 가능한 연산에 대해서도 신경 써야 한다. 데이터의 종류가 결정되면 그 데이터와 관련된 연산도 달라진다. 복잡한 자료형을 구현할 때는 연산이 연산자가 아니고 함수(function)로 작성한다. ADT(Abstract Data Type) 추상 자료형? ADT 추상적, 수학적으로 자료형을 정의한 것이다. 자료구조에는 이러한 추상 자료형을 프로그래밍 언어로 구현할 수 있다. 추상화(abst..
-
1.0자료구조와 알고리즘자료구조(C)/자료구조와 알고리즘 2020. 7. 6. 14:48
자료구조? 프로그램에서 자료를 정리하여 보관하는 구조 ex) 스택, 큐, 리스트, 사전, 그래프, 트리 등 컴퓨터 프로그램 구성 흔히 프로그램 = 자료구조+알고리즘 데이터(자료)를 처리하고 데이터 스트럭쳐(자료구조)를 사용하여 저장된다. 자료구조를 처리하는 절차가 있어야 한다. 이 절차가 알고리즘(algorithm)이다. 알고리즘? 컴퓨터로 문제를 풀기 위한 단계적인 절차 -> 문제와 컴퓨터가 주어진 상태에서 문제를 해결하는 방법을 정밀하게 장치가 이해할 수 있는 언어로 기술한 것이다. 조건 입력 : 0개 이상의 입력이 존재하여야 한다. 출력 : 1개 이상의 출력이 존재하여야 한다. 명백성 : 각 명령어의 의미는 모호하지 않고 명확해야 한다. 유한성 : 한정된 수의 단계 후에는 반드시 종료되어야 한다. ..