C언어 16

[백준 C, C++] 2161번 - 카드1(링크드 리스트)

2161번 - 카드1 구조체 Node 선언 (입력받은 데이터: data, 노드 사이를 연결: next) 구조체 포인터 변수 선언(head, tail, cur, newNode) 동적 할당을 통해 노드 생성 노드에 데이터를 저장 (첫 번째 담긴 데이터일 경우 다음 연결은 NULL) if-else문을 사용하여 head가 NULL일 경우에는 newNode를 head에 저장하고, 아닐 경우 tail의 next노드에 newNode를 저장 주어진 데이터를 노드에 저장하고 모두 연결이 끝났다면 문제의 조건에 맞게 코드를 생성(while문 참고) [C언어] #include #include typedef struct _node { int data; struct _node* next; } Node; int main() { ..

Baekjoon 2022.01.28

[C언어] 막대그래프 출력하기

콘솔창에 막대그래프 출력하기 -> 학생들의 점수를 입력받아 막대그래프로 표현하기 학생 수 입력하기 (입력받은 학생 수로 메모리 동적 할당받기) 학생들의 점수 입력하기 입력받은 학생들의 점수를 막대그래프로 출력하기 입력받은 점수를 막대그래프로 출력하기 위해서 ┌┐(시작), ││(중간), ┴┴ (끝)등의 기호가 필요하다. 100점부터 시작해서 0점까지 막대그래프가 출력된다. 만약 학생의 점수가 60점이면 막대그래프의 60점 부분에서 ┌┐기호가 출력되어야 하고, 0점을 만나기 전까지 ││기호가 출력되며, 0점을 만나면 ┴┴ 기호로 마무리한다. 이렇게 출력하기 위해서 조건문을 사용하면 된다. ==> 막대그래프 출력 결과 #include #include #include //system("cls") = 화면 클리어..

C언어 2021.09.13

[C언어] 트리(Tree)

트리(Tree) 트리는 계층적 관계(Hierarchical Relationship)를 표현하는 자료구조이다. 트리구조를 사용하여 컴퓨터의 디렉터리 구조, 집안의 족보, 기업의 조직도 등을 표현할 수 있다. 트리 관련 용어 노드(node) -> 트리의 구성요소, A, B, C, D, E, F와 같은 요소 간선(edge) -> 노드와 노드를 연결하는 연결선 루트 노드(root node) -> 트리 구조에서 최상위에 존재하는 노드, A와 같은 노드 단말 노드(terminal node), 잎사귀 노드(leaf node) -> 아래로 다른 노드가 연결되어 있지 않은 노드, C, D, E, F와 같은 노드 내부 노드(internal node), 비단말 노드(nonterminal node) -> 단말 노드를 제외한 ..

[C언어] 동적할당 사용 예제

코드 설명 입력받을 정수의 개수 정하기(입력받기) (scanf_s) 개수만큼 정수 입력하기 (scanf_s) 문자 배열을 선언하여 정렬 중 로딩 화면 출력하기 (char* dot [], char* loading []) 사용자가 종료할 때까지 반복하기 위해 while문 사용 goto문을 사용하여 선택지에 없는 번호를 입력했을 경우 다시 정렬 선택 코드로 올라가기 Windows 헤더 파일을 include 하여 "system(cls);"를 사용 -> 화면 클리어 마지막으로 free함수로 메모리 해제 정렬 방법 선택하기(오름차순, 내림차순 -> 따로 void함수 만들기) 이중 for문 사용 값을 임시 저장할 변수 temp를 선언하여 값 비교 후 저장 #include #include #include void so..

C언어 2021.09.07

[C언어] 동적할당 (dynamic allocation)

동적 할당(dynamic allocation) 동적 할당은 힙 영역에 동적으로 메모리를 할당하는 것을 말합니다. 힙 영역은 메모리 할당과 해제가 자유롭습니다. 하지만 메모리 해제( free() )는 제대로 해줘야 합니다. 메모리 해제를 하지 않을 경우 메모리 낭비가 일어나게 됩니다. malloc() 이외에도 calloc(), realloc() 등이 있습니다. 자료형* 포인터명 = (자료형*)malloc(sizeof(자료형)*크기); //사용법1 자료형* 포인터명 = (자료형*)malloc(크기); //사용법2 동적 할당 초기화(clear allocation) -> calloc() 자료형* 포인터명 = (자료형*)calloc(크기, sizeof(자료형)); 동적 할당 크기 변경(resize allocati..

C언어 2021.09.06

[자료구조 - C언어] 재귀함수(Recursion) - Factorial, fib, Hanoi

재귀 함수 (Recursion) 재귀 함수는 자기 자신을 참조하는 함수입니다. Factorial과 Fibonacci, Tower of Hanoi는 반복 루프를 사용하는 것보다 재귀 함수를 사용할 때 코드를 더 간단하게 이해하기 쉽게 작성할 수 있습니다. 다만 재귀 함수를 사용하면 메모리에 스택이 계속 쌓이게 되어 효율성은 약간 떨어집니다. 또한, 재귀 함수를 사용할 때는 꼭 탈출구(종료 조건)를 넣어 줘야 합니다. 재귀 함수의 예시 팩토리얼(Factorial) 재귀 함수의 가장 간단한 예시는 팩토리얼이라고 할 수 있습니다. loop문 사용 (fact) -> ret *= i을 사용하여 팩토리얼 구하기 재귀 함수 사용 (fact_re) -> n * fact_re(n - 1)을 리턴하여 팩토리얼 구하기 #in..

[자료구조 - C언어] 정렬(Sort) - Bubble, Insertion, Selection

Bubble Sort (버블 정렬) -> 서로 인접한 두 값을 비교하여 정렬하는 알고리즘 오름차순으로 정렬할 때, 두 값을 비교하여 더 작은 값을 앞에 위치시킨다. 1회전 정렬을 끝내면 가장 큰 값이 가장 마지막에 위치하게 된다. 2회전, 3회전 반복될수록 그다음으로 큰 값의 위치가 정해진다. Ex) 8, 1, 6, 3, 2 정렬하기 #include #include #define ASIZE 5 void bubble_print(int* array, int size) { for (int n = 0; n < size; n++) { printf("%d ", array[n]); } printf("\n"); } int main(int argc, char* argv[]) { int array[ASIZE] = { 8,..

C언어 2021.08.30

[자료구조 - C언어] 큐(Queue)

Queue - FIFO(First In First Out) 형식 큐(queue)는 스택과 반대로 입구와 출구가 나뉘어 있습니다. 즉, 가장 먼저 들어온 자료가 가장 먼저 나가게 되는 형식입니다. 1 #include 2 #include 3 4 typedef struct node{ 5 char value; 6 struct node *prev; 7 struct node *next; 8 }NODE; 9 10 typedef struct _queue{ 11 NODE *head; 12 NODE *tail; 13 }QUEUE; 14 15 QUEUE *queue_create(){ 16 QUEUE *queue; 17 queue = (QUEUE*)malloc(sizeof(QUEUE)); 18 19 queue->head = ..

[자료구조 - C언어] 스택(Stack)

Stack - LIFO형식 스택에서는 자료를 넣고 빼는 곳이 하나만 있는 LIFO(Last In First Out) 형식이다. 즉, 제일 처음 들어간 자료가 가장 마지막에 나오게 된다. #include#include #include typedef struct node{ char value; struct node *next; }NODE; NODE *stack_push(NODE *top_node, char value){ NODE *new_top_node = NULL; new_top_node = (NODE*)malloc(sizeof(NODE)); new_top_node->value = value; new_top_node->next = top_node; return new_top_node; } NODE *sta..

[자료구조 - C언어] Linked List(3) - delete

Delete - 노드 삭제하기 delete_node : 인덱스 값과 삭제할 노드의 개수를 입력하여 해당 노드를 삭제함. #include #include typedef struct node { char value; struct node *next_node; }NODE; NODE *create_node(char v){ NODE *mynode; mynode = (NODE*)malloc(sizeof(NODE)); mynode->value = v; mynode->next_node = NULL; return mynode; } void append_node(NODE* h, NODE* n) { struct node *tail; if (h == NULL || n == NULL) return; tail = h; while..