C언어
-
[알고리즘] 퀵소트(Quick Sort) - C/C++알고리즘/알고리즘 구현 2018. 9. 29. 16:56
- 피봇(pivot)을 기준으로 왼쪽에 작은 값 / 오른쪽에 큰 값으로 분류한 후, 이 두 부분 집합에 대해 각각 퀵소트를 동일하게 반복하는 분할 정복 (Divide and Conquer) 기법의 정렬 알고리즘 - 재귀호출 이용 * 최선, 평균 : - 상당히 효율적인 정렬 알고리즘임을 알 수 있다. * 최악 : - 부분집합이 한 쪽으로만 계속 몰리는 경우 효율성이 떨어진다. void quickSort(int arr[], int start, int end) { if (start < end) { int left = start; int right = end; int pivot = end; while(left < right) { while(arr[left] = arr[pivot] && left < right) ..
-
[자료구조] 배열로 구현한 원형 큐(Circular Queue) - C/C++자료구조 2017. 7. 23. 18:19
- 선형구조로 자료를 차례대로 저장하고, 가장 먼저 들어간 자료가 가장 먼저 나오는 FIFO(First In First Out, 선입선출)의 특성을 지닌다. - 자료 반환은 큐의 제일 앞(front)에서만 가능하고 자료 추가는 큐의 제일 끝(rear)에서만 가능하다. --> 선형 큐의 단점 : dequeue가 실행되고 생긴 front 앞의 빈 노드가 있어도, rear가 이동할 오른쪽에 빈 노드가 없으면 overflow현상이 발생한다. = 선형 큐는 메모리 비효율적이다. --> 선형 큐의 대안으로 원형 큐가 제시되었다. - rear의 오른쪽과 front의 왼쪽을 (가상적으로) 연결시켜, rear의 오른쪽으로 front의 왼쪽 빈 노드를 사용할 수 있도록한다. - rear 노드 이동에 mod 연산자를 이용한..
-
[자료구조] 연결리스트로 구현한 큐(Linked Queue) - C/C++자료구조 2017. 7. 20. 21:05
- 선형구조로 자료를 차례대로 저장하고, 가장 먼저 들어간 자료가 가장 먼저 나오는 FIFO(First In First Out, 선입선출)의 특성을 지닌다. - 자료 반환은 큐의 제일 앞(front)에서만 가능하고 자료 추가는 큐의 제일 끝(rear)에서만 가능하다. * 본 게시물에서의 큐는 연결리스트(Linked List)로 구현하였다. 1. 노드 : 자료구조에 저장할 데이터를 가진 각각의 원소들을 구조체 Node로 선언한다. - 기존 연결리스트와 동일한 형태로 구성된다. typedef struct Node { Node *next; void *data; } Node; 2. 큐 : 구조체 Queue을 선언한다. - front(자료를 반환하는 큐의 제일 앞), rear(자료를 추가하는 큐의 제일 끝) 이라..
-
[자료구조] 스택(Stack) - C/C++자료구조 2017. 7. 15. 15:57
- 선형구조로 자료를 차례대로 저장하고, LIFO(Last In First Out = 후입선출)의 특성을 가진다. - 자료의 추가/반환이 스택의 끝에서만 가능한 제약 사항으로 인해 리스트 자료구조와 구별되는 독특한 특성을 가진다. * 본 게시물에서의 스택은 이중연결리스트(Double Linked List)로 구현하였다. 1. 노드 : 자료구조에 저장할 데이터를 가진 각각의 원소들을 구조체 Node로 선언한다. - 기존 이중연결리스트와 동일한 형태로 구성된다. typedef struct Node { Node *rlink; Node *llink; void *data; } Node; 2. 스택 : 구조체 Stack을 선언한다. - 기존 이중연결리스트와 동일하되, 특별히 top이라는..
-
[자료구조] 연결리스트(Linked List) - C언어자료구조 2017. 7. 2. 17:23
★ 연결리스트 : Data와 Link로 구성된 Node들을 순차적으로 연결시킨 자료구조 - 장점 1) 노드 추가/삭제 시 추가연산 불필요 2) 최대 노드 갯수 지정 불필요->메모리 효율성 좋음 (배열리스트는 리스트 생성 시에 최대 원소 갯수를 지정해야 함) - 단점 1) 특정 노드 탐색이 어려움 -> 원하는 노드를 찾을 때까지 포인터로 노드를 탐색해야하기 때문 (배열리스트는 인덱스로 접근이 가능하므로 한번에 탐색 가능) 1. 이중연결리스트 노드 구조 - 저장하려는 Data와, 이전 노드를 가리키는 포인터 Left link, 다음 노드를 가리키는 포인터 Right link로 구성된다. typedef struct __Node { void *data; Node *llink; Node *rlink; } Node..