본문 바로가기

반응형
SMALL

C/코드 리뷰

Tree 구현하기 Tree를 구현해봤습니다. 노드의 갯수와 간선의 갯수를 받았으며, 노드의 구조체에 부모, 자식의 데이터를 int형으로 구성했습니다. #include #define MAX_TREE_NODE 1000 #define MAX_CHILD_NUM 10 typedef struct _node { int parent; int child[MAX_CHILD_NUM]; }Node; Node Tree[MAX_TREE_NODE]; int NodeNum; int edgeNum; void initTree() { for (int i = 1; i 더보기
Linked List 구현하기 (2) 저번에 간단하게 Linked List를 구현해봤는데, 삽입, 삭제, 조회 기능을 만들지 못해서 이번에 한꺼번에 코드를 작성해 보았습니다. #include #include typedef struct _node { int data; struct _node* next; struct _node* prev; }Node; Node* head = NULL; Node* tail = NULL; Node* cur = NULL; Node* newNode = NULL; void LInsert(int data) { newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; newNode->prev = NULL; if (head == NUL.. 더보기
C언어 순열과 조합 최근 문제를 풀다가 계속해서 순열과 조합 문제를 보게 되었는데, 제가 재귀가 약하다보니 항상 문제를 푸는데 어려움이 있었습니다. 그래서 이번에 정리를 잘해서 다시는 찾아보는 일이 없도록 만들고자 포스팅을 하려 합니다. 우선, 순열입니다. #include int arr[4] = { 1, 2, 3, 4 }; int len = 4; void swap(int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } void permu(int N) { if (N == 3) { for (int i = 0; i < 4; i++) { printf("%d", arr[i]); } printf("\n"); } else { for (int i = N; i < 4; i.. 더보기
우선순위 큐 구현 우선 순위 큐 구현입니다. 사실 우선 순위큐는 힙(Heap)을 이용해서 만들어진 자료구조인데요. 어떤 우선 순위를 기준으로 하느냐에 따라서 뽑아내는 순서를 달리할 수 있는 자료구조입니다. 힙은 배열을 기반으로 구현을 해야합니다. 물론 링크드 리스트로도 구현을 할 수 있습니다. 그렇다면 트리구조가 되겠죠. 허나 링크드 리스트로 구현 시 새로운 노르를 힙의 '마지막 위치'에 추가하는 것이 쉽지가 않습니다. 뭐 이렇게 설명만 한다면 사소한 문제 같지만, 이 문제를 해결하는 것보다 그냥 간단하게 배열로 접근해서 문제를 고민 안할 수 있다면, 배열을 쓰는게 낫겠죠? 자세한 것은 코드로 살펴보도록 하겠습니다. SW expert Academy에서 코드를 가져왔는데 별로 좋은 코드는 아닌거 같습니다. 좀 더 직관적으로.. 더보기
큐 구현 (원형 큐) 큐를 구현해봅시다. 구현하려는 큐는 원형 큐입니다. 자세한 건 코드로 살펴보도록 하겠습니다. main 함수는 stack과 유사합니다. #include #define MAX_N 100 int front; // 시작을 가리킵니다. int rear; // 끝을 가리킵니다. int queue[MAX_N]; // 큐 최대 크기 100 void queueInit(void) { front = 0; rear = 0; } int queueIsEmpty(void) { return (front == rear); // front와 rear가 같은 위치를 가르키고 있으면 큐가 비어있는 상태입니다. } int queueIsFull(void) { return ((rear + 1) % MAX_N == front); // rear가 .. 더보기
스택 구현 배열을 이용한 스택을 구현해보도록 하겠습니다. 설명은 주석을 참고해주시길 바랍니다. #include #define MAX_N 100 int top; int stack[MAX_N]; // 최대 스택 크기 100, index로는 0 ~ 99 void stackInit(void) { top = 0; } int stackIsEmpty(void) { return (top == 0); // top이 0이면 아무것도 없는 상태 } int stackIsFull(void) { return (top == MAX_N); // top이 100이 되어버리면 stack은 꽉 찬 상태 } int stackPush(int value) { if (stackIsFull()) { // stack이 꽉 찼다면 1을 받으니 if문이 실행됩니.. 더보기
Linked List 구현하기 (1) 이 글에서는 Linked List의 전체 읽기, 전체 삭제에 관해서 작성할 생각입니다. 원하는 노드를 읽는 건 다음 시간에 해보도록 하겠습니다. #include #include typedef struct _node { int data; // 데이터를 담는 바구니 struct _node* next; // 연결의 도구 }Node; int main(void) { Node* head = NULL; // 리스트의 머리 Node* tail = NULL; // 리스트의 꼬리 Node* cur = NULL; // 리스트의 조회에 사용되는 변수 Node* newNode = NULL; int readData; // 데이터 입력 받는 과정 while (1) { printf("자연수 입력 "); scanf_s("%d", &r.. 더보기
이진 탐색(Binary Search) 알고리즘과 시간 복잡도 분석 #include int BSearch(int ar[], int len, int target) { int first = 0; int last = len - 1; int mid; while (first last) { return -1; } int mid; mid = (first + last) / 2; if (ar[mid] == target) { return mid; } else if (target < ar[mid]) return BSearchRec(first, mid - 1, ar, target); else return BSearchRec(mid + 1, last, ar, target); } int main(void) { int index; int arr[] = { 1, 3, 5, 7, 9 }; index .. 더보기

반응형
LIST