웹_프론트_백엔드/단과 85

[단과_자료구조] 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;// 노드 생..

[단과_자료구조] 2020.08.03

1. [문제] 숫자 맞추기 게임(저번주 문제 복습)   1) 1 ~ 100까지 랜덤으로 숫자 10개 생성    2) 배열에 넣고 출력    3) 오름차순정렬하고 출력 => 알고리즘 사용    4) 0 ~ 9 중에 랜덤으로 선택, 해당 숫자를 맞춰보자!   예시)          [ 1 3 17 18 19 ]          [2]->17           3          15           16          N번 소요됨!#include#include#includevoid swap(int* arr, int a, int b) { int tmp = arr[a]; arr[a] = arr[b]; arr[b] = tmp;}void quick_sort(int* arr, int start, int end) ..

[단과_자료구조] 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 -> ..

[단과_자료구조] 2020.07.29

1. 큐  : FIFO 선입선출 방식의 데이터 구조  2. Enqueue() 데이터 추가, Dequeue 데이터 삭제  3. 배열로 큐 구현하기#include #define MAX 5int 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 5int 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#includetypedef 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; } e..

[단과_자료구조] 2020.07.20

1. 배열을 이용한 성적 입력 프로그램#include#includetypedef 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 성적수정가능 } else { printf("프로그램종료\n"); break; } } return 0;}  2. 지금까지는 배열과 구조체 배열을 이용했다.   배열은 삭제와 삽..

[단과_자료구조] 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  ** studentFile.h#pragma once#includetypedef struct student { int num; // 1001번부터 순차적으로 지급 char name[20]; int s1; int s2; double avg;}S;void inputScores(S* sp) { // 주소값을 인자로 받기 위한 표인터 필요 -> 값 변화 발생..

[단과_자료구조] 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)*/i..

[단과_자료구조] 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;}// 포인터? 주소..