자료구조
-
큐 Queue 나중에 들어온 데이터가 먼저 나가는 스택 자료구조와 달리 큐는 먼저 들어온 데이터가 먼저 나가는 자료구조입니다. 선입선출(FIFO: First-In First-Out) 큐를 사용하는 방식에는 선형 큐, 원형 큐, 덱이 있습니다. 선형 큐 배열을 선형으로 사용하여 구현된 큐이며, 삽입을 계속하기 위해서는 요소들을 이동시켜야 합니다. 데이터를 넣을때마다 번거로움이 있다는 문제점이 있는 방식입니다. 또한 인덱스를 감소하지는 않고 증가만 하면서 사용하는 방식이기에, 실제로 앞부분에는 데이터가 없을 때에도 비어있는 공간을 활용할 수 없기 때문에 비효율적인 부분이 있습니다. #include #include #define MAX_QUEUE_SIZE 5 typedef int element; typedef..
[자료구조] 큐 Queue, 선형 큐, 원형 큐 구현큐 Queue 나중에 들어온 데이터가 먼저 나가는 스택 자료구조와 달리 큐는 먼저 들어온 데이터가 먼저 나가는 자료구조입니다. 선입선출(FIFO: First-In First-Out) 큐를 사용하는 방식에는 선형 큐, 원형 큐, 덱이 있습니다. 선형 큐 배열을 선형으로 사용하여 구현된 큐이며, 삽입을 계속하기 위해서는 요소들을 이동시켜야 합니다. 데이터를 넣을때마다 번거로움이 있다는 문제점이 있는 방식입니다. 또한 인덱스를 감소하지는 않고 증가만 하면서 사용하는 방식이기에, 실제로 앞부분에는 데이터가 없을 때에도 비어있는 공간을 활용할 수 없기 때문에 비효율적인 부분이 있습니다. #include #include #define MAX_QUEUE_SIZE 5 typedef int element; typedef..
2021.04.18 -
스택을 응용한 예시로는 괄호 검사, 스택의 응용1 : 괄호 검사 프로그램 괄호의 종류에는 대괄호 [ , ] 중괄호 { , } 소괄호 ( , ) 가 있습니다. 프로그램을 구현하기 위해 다음 조건을 만족해야 합니다. 1. 왼쪽 괄호의 개수와 오른쪽 괄호의 개수가 같아야 한다. 2. 같은 괄호에서 왼쪽 괄호는 오른쪽 괄호보다 먼저 나와야 한다. 3. 괄호 사이에는 포함 관계만 존재한다. 검사가 필요해 보이는 잘못된 괄호 사용의 예시 (a(b) a(b)c) a{b(c[d]e}f) 알고리즘 문자열에 있는 괄호를 차례대로 조사하면서 왼쪽 괄호를 만나면 스택에 삽입하고, 오른쪽 괄호를 만나면 스택에서 삭제한 후 짝이 맞는지를 검사합니다. 이 때, 스택이 비어 있으면 조건1 또는 조건2 등을 위배하게 되고 괄호의 짝이..
[자료구조] 스택을 응용, 활용한 프로그램스택을 응용한 예시로는 괄호 검사, 스택의 응용1 : 괄호 검사 프로그램 괄호의 종류에는 대괄호 [ , ] 중괄호 { , } 소괄호 ( , ) 가 있습니다. 프로그램을 구현하기 위해 다음 조건을 만족해야 합니다. 1. 왼쪽 괄호의 개수와 오른쪽 괄호의 개수가 같아야 한다. 2. 같은 괄호에서 왼쪽 괄호는 오른쪽 괄호보다 먼저 나와야 한다. 3. 괄호 사이에는 포함 관계만 존재한다. 검사가 필요해 보이는 잘못된 괄호 사용의 예시 (a(b) a(b)c) a{b(c[d]e}f) 알고리즘 문자열에 있는 괄호를 차례대로 조사하면서 왼쪽 괄호를 만나면 스택에 삽입하고, 오른쪽 괄호를 만나면 스택에서 삭제한 후 짝이 맞는지를 검사합니다. 이 때, 스택이 비어 있으면 조건1 또는 조건2 등을 위배하게 되고 괄호의 짝이..
2021.04.10 -
스택(Stack) 쌓아놓은 더미, 즉 메모리가 쌓인 더미 영역을 말합니다. 스택의 특징 후입선출(LIFO:Last-In First-Out)로써 가장 최근에 들어온 데이터가 가장 먼저 나갑니다. 스택 추상 데이터 타입 (ADT) 객체: 0개 이상의 원소를 가지는 유한 선형 리스트 연산: 매개변수 s는 스택을 의미 ▪ create(size) 최대 크기가 size인 공백 스택을 생성한다. ▪ is_full(s) if(스택의 원소수 == size) return TRUE; else return FALSE; ▪ is_empty(s) if(스택의 원소수 == 0) return TRUE; else return FALSE; ▪ push(s, item) if( is_full(s) ) return ERROR_STACKFUL..
[자료구조] 스택 Stack스택(Stack) 쌓아놓은 더미, 즉 메모리가 쌓인 더미 영역을 말합니다. 스택의 특징 후입선출(LIFO:Last-In First-Out)로써 가장 최근에 들어온 데이터가 가장 먼저 나갑니다. 스택 추상 데이터 타입 (ADT) 객체: 0개 이상의 원소를 가지는 유한 선형 리스트 연산: 매개변수 s는 스택을 의미 ▪ create(size) 최대 크기가 size인 공백 스택을 생성한다. ▪ is_full(s) if(스택의 원소수 == size) return TRUE; else return FALSE; ▪ is_empty(s) if(스택의 원소수 == 0) return TRUE; else return FALSE; ▪ push(s, item) if( is_full(s) ) return ERROR_STACKFUL..
2021.04.10 -
동적 메모리 할당이란 프로그램의 실행 도중에 메모리를 할당 받는 것입니다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납합니다. 이로 인해 메모리를 효율적으로 관리하고 사용이 가능합니다. 메모리 영역은 스택(Stack :: 지역변수, 매개변수), 힙(Heap :: 동적 할당), 데이터(Data :: 전역변수, static), 코드(Code, Text :: 코드, 함수, 제어문) 으로 이루어져 있는데 동적 할당의 경우 힙 영역에 저장됩니다. main() { int *pi; pi = (int *)malloc(sizeof(int)); // 동적 메모리 할당 // ... // ... 동적 메모리 사용 // ... free(pi); // 동적 메모리 반납 } C에서 동적 메모리를 사용하는 함수로 mal..
[자료구조] 동적 메모리 할당과 반납동적 메모리 할당이란 프로그램의 실행 도중에 메모리를 할당 받는 것입니다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납합니다. 이로 인해 메모리를 효율적으로 관리하고 사용이 가능합니다. 메모리 영역은 스택(Stack :: 지역변수, 매개변수), 힙(Heap :: 동적 할당), 데이터(Data :: 전역변수, static), 코드(Code, Text :: 코드, 함수, 제어문) 으로 이루어져 있는데 동적 할당의 경우 힙 영역에 저장됩니다. main() { int *pi; pi = (int *)malloc(sizeof(int)); // 동적 메모리 할당 // ... // ... 동적 메모리 사용 // ... free(pi); // 동적 메모리 반납 } C에서 동적 메모리를 사용하는 함수로 mal..
2021.04.10 -
함수의 매개변수로 포인터 전달 포인터는 다른 변수의 주소를 값으로 가지는 변수입니다. 포인터의 연산자 *(asterisk)는 포인터가 가리키는 값을 의미합니다. 즉, int *a = &b 로 선언했을 때 포인터 변수a는 변수b의 주소를 값으로 가지며 *a는 변수 b가 가진 값을 가리키는 것입니다. 이것을 다른 말로 'dereferncing' 한다고 말합니다. 포인터를 이야기하면 항상 나오는 개념이 배열입니다. 포인터는 배열과 매우 비슷합니다. 배열 int a[4] 를 선언했다고 합시다. 우리가 배열에 들어있는 특정 인덱스의 값에 접근하려면 a[0] = 2, a[2] = 30 등 이러한 방식으로 사용합니다. 이것은 포인터에서 *a = 2, *a = 30 과 유사합니다. 지정 영역에는 차이가 있지만 둘 다 ..
[자료구조] 함수의 매개변수로 포인터 전달함수의 매개변수로 포인터 전달 포인터는 다른 변수의 주소를 값으로 가지는 변수입니다. 포인터의 연산자 *(asterisk)는 포인터가 가리키는 값을 의미합니다. 즉, int *a = &b 로 선언했을 때 포인터 변수a는 변수b의 주소를 값으로 가지며 *a는 변수 b가 가진 값을 가리키는 것입니다. 이것을 다른 말로 'dereferncing' 한다고 말합니다. 포인터를 이야기하면 항상 나오는 개념이 배열입니다. 포인터는 배열과 매우 비슷합니다. 배열 int a[4] 를 선언했다고 합시다. 우리가 배열에 들어있는 특정 인덱스의 값에 접근하려면 a[0] = 2, a[2] = 30 등 이러한 방식으로 사용합니다. 이것은 포인터에서 *a = 2, *a = 30 과 유사합니다. 지정 영역에는 차이가 있지만 둘 다 ..
2021.04.10 -
배열을 이용한 다항식 표현 다항식의 일반적인 형태는 다음과 같습니다. 프로그램에서 다항식을 처리하려면 다항식을 위한 자료구조가 필요합니다. 배열을 이용한 다항식의 표현 방법에는 2가지가 있습니다. >> (1) 모든 항을 저장한다. >> (2) 0이 아닌 항만을 저장한다. (1) 모든 항을 저장하는 방식 #define MAX_DEGREE 101 // (다항식의 최대차수 + 1) 101 #include typedef struct { int degree; //최고차항의 지수 float coef[MAX_DEGREE]; }polynomial; polynomial a = { 5,{10,0,0,0,6,3} }; //10X^5+6X+3 polynomial poly_add1(polynomial A, polynomial ..
[자료구조] 배열을 이용한 다항식 표현1배열을 이용한 다항식 표현 다항식의 일반적인 형태는 다음과 같습니다. 프로그램에서 다항식을 처리하려면 다항식을 위한 자료구조가 필요합니다. 배열을 이용한 다항식의 표현 방법에는 2가지가 있습니다. >> (1) 모든 항을 저장한다. >> (2) 0이 아닌 항만을 저장한다. (1) 모든 항을 저장하는 방식 #define MAX_DEGREE 101 // (다항식의 최대차수 + 1) 101 #include typedef struct { int degree; //최고차항의 지수 float coef[MAX_DEGREE]; }polynomial; polynomial a = { 5,{10,0,0,0,6,3} }; //10X^5+6X+3 polynomial poly_add1(polynomial A, polynomial ..
2021.03.21