본문 바로가기

웹_프론트_백엔드/C언어

(30)
[자료구조] 2020.08.05 1. 이진트리 구현 예제 : 저번 시간에 배우지 못한 void del() 함수 마저 구현했으나 작동은 되지 않는다. Why? 현재 트리는 루트노드가 메인에서 NULL로 설정되어있기 때문에 (즉, 현재 트리는 루트가 포인터로 (malloc()없이) 정의되어있어서 삭제가 되지 않는다) 만약, 현재 상태에서 삭제를 진행하고 싶다면 리스트처럼 루트를 만들어 주어야 한다. 예) (빈 루트노드) | 10 20 30 #include #include // 노드 생성을 위한 구조체 선언 typedef struct NODE { int data; struct NODE* left; struct NODE* right; }N; // 노드 생성 N* create(N* node, int data) { if (node == NULL)..
[자료구조] 2020.08.03 1. [문제] 숫자 맞추기 게임(저번주 문제 복습) 1) 1 ~ 100까지 랜덤으로 숫자 10개 생성 2) 배열에 넣고 출력 3) 오름차순정렬하고 출력 => 알고리즘 사용 4) 0 ~ 9 중에 랜덤으로 선택, 해당 숫자를 맞춰보자! 예시) [ 1 3 17 18 19 ] [2]->17 3 arr[j]) { min = arr[j]; min_index = j; } } int tmp = arr[i]; arr[i] = arr[min_index]; arr[min_index] = tmp; } } // 이진탐색 == 이분탐색 int binarySearch(int* arr, int data, int start, int end) { int m = (start + end) / 2; while (start data = 10;..
[자료구조] 2020.07.31 1. 정렬 : 버블정렬, 삽입정렬, 선택정렬, 퀵정렬 1) 버블정렬 : 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬하는 방식 2) 삽입정렬 : 아직 정렬되지 않은 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해 가며 정렬하는 방식 3) 선택정렬 : 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식 4) 퀵정렬 : 순환함수 이용 Divide & Conquer(분할정복) 피벗(== 피봇, pivot, 기준) 피벗보다 작으면 왼쪽으로, 비벗보다 크면 오른쪽으로 [3] 5l 7 9 1 10 6 2r 8 4 [3] 2 7l 9 1r 10 6 5 8 4 [3] 2 1r 9l 7 10 6 5 8 4 -> 교차(cross) : 비벗과 r ..
[자료구조] 2020.07.29 1. 큐 : FIFO 선입선출 방식의 데이터 구조 2. Enqueue() 데이터 추가, Dequeue 데이터 삭제 3. 배열로 큐 구현하기 #include #define MAX 5 int queue[MAX]; // 큐에는 start point, end point가 반드시 필요함 int s = 0; int e = 0; int isFull() { if (s == e && queue[s] != 0) { return 1;// 데이터가 가득 찬 상황 } return 0; } int isEmpty() { if (s == e && queue[s] == 0) { return 1;// 데이터가 없는 상황 } return 0; } // 데이터를 입력하는 함수 void Enqueue(int data) { queue[e++]..
[자료구조] 2020.07.27 1. 배열을 이용하여 스택 구현(인덱스 개수 -1 시작) #include #define MAX 5 int stack[MAX]; int index = -1;// 인덱스는 0번째부터 시작하기 때문에 -1을 index에 저장 // 책에 따라, 상황에 따라 index 시작점은 다를 수 있다 int isFull() { if (index == MAX - 1) {// MAX-1을 하는 이유는 검사 후 저장해야하기 때문에 // MAX로 한다면 이미 꽉 찬 상태에서 저장을 하려고 하기 때문에 문제가 생김 return 1;// 스택이 가득차 있을 때 1을 리턴! } return 0; } void push(int data) { index++; stack[index] = data; } int isEmpty() { if (in..
[자료구조] 2020.07.22 1. 리스트를 이용하여 학생 성적 프로그램 만들기 #include #include typedef struct NODE { int data; struct NODE* next; }N; void add(N* root, int data) { N* node = (N *)malloc(sizeof(N)); node->data = data; node->next = NULL; // 노드 생성 // 마지막노드의 next가 매번 새로운 노드를 가리킬수있도록 해야함! N *p = root; while (p->next != NULL) { // 마지막노드를 찾기위해 [p->next] 작성!!! if (p->next->data == data) { printf("%d는 이미 존재합니다.\n", data); return; } else..
[자료구조] 2020.07.20 1. 배열을 이용한 성적 입력 프로그램 #include #include typedef struct student { char name[10]; int score; int num; }S; void f1(S *s, int index, int num) { printf("이름입력: "); scanf("%s", s[index].name); printf("성적입력: "); scanf("%d", &s[index].score); s[index].num = num; } void f3(S *s, int index) { for (int i = 0; i < index; i++) { printf("%d. %s : %d\n", s[i].num, s[i].name, s[i].score); } } void f4(S *s, int i..
[자료구조] 2020.07.17 1. 모듈화 프로그래밍 ** lec01.c #include #include // 모듈화 프로그래밍 #include"studentFile.h" int main() { printf("학생수 입력: "); int n; scanf("%d", &n); S* s = (S*)malloc(n * sizeof(S)); // 학생 구조체 배열이 생성됨 for (int i = 0; i < n; i++) { inputS(&s[i], i); } for (int i = 0; i < n; i++) { show(s[i]); } return 0; } ** studentFile.h #pragma once #include typedef struct student { int num;// 1001번부터 순차적으로 지급 char name[20..
[자료구조] 2020.07.15 1. [과제] 입력: 1 1 0 출력: 2 1(2개의 1) 입력: 1 2 1 1 0 출력: 1 1 1 2 2 1(1의 1, 1의 2, 2개의 1) 입력 : 1 1 1 1 0 출력: 4 1(4개의 1) 제약사항 : 10개까지만 입력 가능 ** 내코드 #include #include /* 힌트1 동적할당 vs 정적할당 => 정적할당을 코드를 짤 수 있으나 입력이 배열이 아니다란 판단을 내릴 수 있음 힌트2 이전 입력과 이후 입력(현재 입력)이 같은지 / 다른지? => 분기점이 달라지기 때문 1- 정적할당입력 -> 배열x출력 2- 배열입력이 아니구나~ -> for(;;i+=2) */ int main() { // 1. 10개의 배열을 만듦 int number[10] = { 0, }; // 2. 만든 배열에 사용..
[자료구조] 2020.07.13 1. 자료구조 & 알고리즘에서 앞으로 배울 내용 : 배열, 구조체, 리스트, 스택, 큐, 트리 교환, 최대값, 정렬, 탐색, 순회 2. cmd 창이 안나올때? : 프로젝트 > 속성 > 링커 > 시스템 > 하위 시스템 콘솔로 변경 3. Visual Studio에서 scanf() 함수 사용하기 4. 포인터, call by value, call by reference, 동적할당 #include #include// malloc 함수를 사용하기 위해 필요한 헤더파일 // 1. call by value 값에 의한 호출 void swap(int a, int b) { int tmp = a;// 임시 저장 변수 // a의 값을 기억할 임시 저장 변수가 필요함 a = b; b = tmp; } // 포인터? 주소를 받는다 ..