알고리즘 (8) 썸네일형 리스트형 연결리스트 연결리스트는 포인터로 연결된 논리적 선형리스트를 의미한다. #include #include typedef struct Node { int data; struct Node* nextNode; } Node; Node* Head = NULL; void printList(); int add(int data); int addFirst(int data); bool addIndex(int data, int index); bool delAll(); bool del(int index); int main() { add(10); add(20); add(30); add(40); add(50); del(3); printList(); return 0; } // 모든 리스트 출력 void printList() { Node* ptr.. 원형 큐 원형 큐를 배열로 구현하는 방법 front = 가장 먼저 들어온 원소 = 가장 먼저 삭제될 원소 rear = 가장 마지막에 들어온 원소 = 가장 마지막에 삭제될 원소 구조를 배열로 생성한 다음 (rear+1)%maxsize에 원소를 추가한다. rear++이 아니라 mod 연산을 이용하는 이유는 rear의 범위가 자연스럽게 0 ~ maxsize-1가 되어 index를 벗어나지 않고 자연스럽게 순환하는 구조가 만들어진다. Code #include #define MAX 10 int arr[MAX] = { 0 }; int front = -1; // 가장 먼저 들어온 데이터 int rear = -1;// 가장 마지막에 들어온 데이터 void enqueue(int data); void dequeue(); void .. stack 자료구조 stack은 LIFO구조의 자료구조이다. (LIFO : 마지막에 들어온값이 가장 먼저 나간다.) Code #include #define DATALENGTH 10 // 배열의 길이 int data[DATALENGTH] = {0, }; int curIdx = 0; // push 기준 현재 값을 넣을 위치 void push(int arr[], int data); void pop(int arr[]); void peek(int arr[]); int main() { for (int i = 0; i < DATALENGTH + 10; i++) { push(data, (i + 10) * 10); } peek(data); printf("\n"); for (int i = 0; i < DATALENGTH + 10; .. quick sort quick sort 중 피봇이 맨 오른쪽에 위치한 quick sort를 알아보려고 한다. 우선 quick sort에서 가장 중요한 피벗이란 하나의 기준점을 말한다. 이 피벗을 중심으로 피벗의 앞에는 피벗보다 작은 원소들을, 뒤에는 피벗보다 큰 원소들을 나열하여 피벗의 위치를 확정시켜 나아가다. 결국엔 모든 원소가 정렬되는 알고리즘이 quick sort알고리즘이다. 위의 사진도 마찬가지로 피벗을 맨 오른쪽 원소로 잡은다음 quick sort를 진행한 결과이다. quick sort는 운이 좋으면 O(nlogn)의 시간복잡도를 가지지만 운이 좋지 못하면 O(n^2)의 시간 복잡도를 가진다. 또한 quick sort는 피벗의 위치에 따라 시간복잡도의 차이가 나는데 피벗을 맨 오른쪽에 위치한 원소로 잡는 방식 말.. 이전 1 2 다음