컴퓨터 공부/자료구조
-
스택컴퓨터 공부/자료구조 2020. 3. 24. 15:58
스택 : 컴퓨터에서 빈번하게 사용되는 자료 저장 구조, 한 쪽이 막힘 바구니 형태 후입선출 (LIFO: Last - In First - Out) 스택의 ADT Objects : 0개 이상 n개의 원소를 가진 유한 순서 리스트 Functions : Stack CreateStack( Stacksize ) : Stacksize 크기의 배열 만들기. Top 초기화. Bool is_empty( stack ) : stack 이 빈 상태인가 Bool is_full( stack ) : stack 이 Full 상태인가 Stack push( stack, item ) : stack 에 item 추가하기 Element pop( stack ) : stack에서 item 하나 가져오기(제거됨) Element peek( stack..
-
배열의 응용 - 다항식 표현, 덧셈,컴퓨터 공부/자료구조 2020. 3. 24. 14:09
- 다항식의 형태 p(x)= a_n x^n+a_(n-1) x^(n-1)+ …+a_1 x^1+a_0 - 다항식의 처리 –> 어떻게 저장할 것인가 –> 어떻게 연산을 할 것인가 - 다항식을 저장하는 방법 –> 다항식의 모든 항을 배열에 저장 x^5+6x+3 typedef struct { int degree; //차수 float coef[MAX_DEGREE]; //계수 } polynomial; polynomial a = { 5, {1, 0, 0, 0, 6, 3} }; ex) 3x^5+6x+3과 7x^4+5x^2+1 을 더하기 #include #define MAX(a,b) (((a)>(b))?(a):(b)) //큰 수 반환 #define MAX_DEGREE 101 typedef struct { // 다항식 구조..
-
재귀함수 (팩토리얼, 피보타치 수열, 하노이 타워)컴퓨터 공부/자료구조 2020. 3. 20. 19:28
자기 자신을 호출하는 함수 장점 : 문제 해결을 단순화시킨다. 단점 : 성능 저하 (호출의 반복) 주의점 – 호출할 때마다 범위를 줄여가야 한다. • 줄이지 못하면 무한루프 -> 프로그램 비정상 종료 (메모리 부족) – return을 통한 복귀가 있어야 한다. • 호출된 수만큼 복귀해야 한다. 팩토리얼 : 4! = 1 *2 * 3* 4 n! = n * (n-1)! int factorial (int n) { if (n == 0) return 1; // 0! = 1 return n * factorial (n-1); // fact (n) = n * fact(n-1) } int main( ) { int i = 4; printf(“%d! = %d\n”, i, factorial(i)); } 피보나치 수열: 0, 1..
-
순차 탐색 , 이진 탐색컴퓨터 공부/자료구조 2020. 3. 20. 18:27
앞에서 차례대로 탐색 // 순차 탐색 알고리즘 int Lsearch(int ar[], int len, int target) { int i; for( i = 0 ; i 연산의 수 = 1 •찾는 데이터가 없거나 가장 끝에 있다: 최악의 경우 ---> 연산의 수 = n •가장 현실적인 경우는? 평균의 경우! ↑ 이진 탐색 이미 정렬된 배열에서 검색 1. 정 가운데 위치 찾기 2. 원하는 데이터인지 비교 -> y : 반환 -> N: 앞 또는 뒤 부분을 검색 대상으로 좁힌다. (검색 대상이 반으로 줄어든다!!) int BSearch(int ar[], int len, int target) { int first = 0; // 탐색 대상의 시작 인덱스 값 int last = len-1; // 탐색 대상의 마지막 인덱스..
-
자료구조컴퓨터 공부/자료구조 2020. 3. 20. 16:21
개념 : 모델링된 데이터를 컴퓨터에 저장하는 방식 종류 ) - 선형 구조 : 리스트, 스택, 큐 - 비선형 구조 : 트리, 그래프 알고리즘 : 작업의 구체적 수행 방식, 특정한 일을 수행하는 명령어들의 유한 집합, 단계쩍 절차 작업을 위해 데이터가 필요한데, 이 데이터를 저장하는 방식이 자료구조 즉, 프로그램 = 알고리즘 + 자료구조 알고리즘 조건 ) - 입력 : 0개 이상의 입력 데이터 - 출력 : 적어도 하나의 결과 - 명백성 : 각 명령어들이 모호함 없이 명확 - 유한성 : 한정된 수의 단계 뒤에는 반드시 종료 - 유효성 : 실행 가능한 연산 수행 시간 측정 - 두 알고리즘 직접 구현 후, 실제 수행 시간 측정 #include #include #include //시간 패키지 int main( voi..
-
C언어) 링크드리스트 (연결 리스트)컴퓨터 공부/자료구조 2020. 3. 20. 15:45
필요한 이유: 배열의 단점 개선 (삽입, 삭제가 어려움) 배열처럼 나란히 x, 자료들이 포인토를 가지고 연결, 다음 데이터가 어딘지 알 수 있음!! 연결 리스트의 구조체 struct node { int data; //데이터 (값, 숫자, 문자..) struct node * next; //다음 노드를 가리키는 포인터 } 연결 리스트의 구성 struct node { //구조체 선언 int data; struct node * next; } struct node *first, *second, *start; //구조체 포인터 변수 선언 first = malloc(sizeof(struct node)); //동적 할당 (포인터 반환) first ->data = 10; //데이터 넣기 start = first; //처..
-
C언어) 동적 할당컴퓨터 공부/자료구조 2020. 3. 20. 15:36
Dynamic Allocation : 프로그램이 실행될 때 메모리 공간 할당 (실행 도중에 결정) ->flexible (Static Allocation : 정적 할당은 컴파일하고 생성) 동적 메모리 할당 void *malloc(size) //공용 포인터 //필요한 공간의 사이즈(byte) if (score=NULL) return 0; //실패 시, NULL 반환 메모리의 힙 공간 안에서 공간과 주소 반환 프로그램 실행 도중에 변수 크기 결정 -> 필요한 크기만큼 할당 (언제든지 반환 가능) 큰 크기의 메모리 할당 (지역변수 한계, 전역 변수로 안 좋음) 어느 함수에서나 접근 가능 -> 공유 가능! (공용 공간에 존재, 초인터 주소만 알면 ok) 메모리의 효율적 사용 가능 (필요한 만큼 쓰고 안 쓰면 반환..