programming/data-structures

    [DAY 10] Stack And Queue

    Stack의 개념Stack은 쌓아 놓은 접시와 같은 자료구조다마지막에 쌓은 접시가 먼저 사용되듯, 나중에 입력된 자료가 먼저 처리된다이것을 후입선출(LIFO : Last In First Out)이라 부른다 Push : 스택에 자료를 넣는 동작이다Pop : 스택에서 자료를 꺼내는 동작이다 Stack 분석스택은 1차원 배열을 사용하여 구현한다. 스택의 방식을 살펴보자(그림)#. Stack은 Shift를 할 필요가 없다! top 포인터가 마지막을 가리키고 있으면 full이고 처음을 가리키고 있으면 empty다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606..

    [DAY 09] Sort

    1.1.1 정렬이란? 순서 없이 배열된 자료를 작은 것부터 큰 것 순서인 오름차순이나 큰 것부터 작은 것 순서인 내림차순으로 재배열하는 것 1.1.2 키(key)란? 자료를 정렬하는 데 사용하는 기준이 되는 특정값 1.2 정렬을 왜할까? '검색' 때문!검색을 얼마만큼 효율적으로 빨리 할 수 있느냐가 관건이다. Bubble Sort(버블 정렬) : 키를 비교하고 교환하여 정렬하는 방식(교환 방식)버블 정렬(Bubble Sort)은 실무에서 많이 쓴다.왜? 코드짜기 편하니까But, 성능은 최악이다 - "인접"한 원소를 두 개 비교하여 자리를 교환하는 방식을 반복하여 정렬한다. 버블정렬을 수행하면 인접한 처음 두 개 원소부터 인접한 마지막 원소까지 비교하는 작업과 자리를 교환하는 작업을 반복하면서 가장 큰 원..

    [DAY 07] Recursion

    Factorial은 자기 자신보다 같거나 작은 모든 수를 곱한 값이다. ex. 5! = 5 x 4 x 3 x 2 x 1 = 120 Factorial은 반복문 또는 재귀호출을 이용하여 구현할 수 있다. 위의 두 가지 방법으로 작성하시오. 123456789101112131415161718192021#define _CRT_SECURE_NO_WARNINGS#include int Factorial(int n){ // 재귀호출의 탈출조건 if (n == 1) return 1; return n * Factorial(n - 1);} void main(){ int num, res; printf("Input number : "); scanf("%d", &num); res = Factorial(num); printf("%d..

    [DAY 06] Binary Search Tree

    Program 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166..

    [DAY 05] Tree

    Linked List 복습노드를 어떻게 연결시킬가가 관건이다그 연결은 포인터로 한다 (삽입, 삭제 등의 알고리즘만 알고 있으면 할 수 있다) Treeㅇ Recursion자기 자신도 함수이기 때문에 자신을 호출하는 것을 재귀함수라 한다.내가 나를 부르는 것을 재귀호출이라 한다. Binary Search Tree1. 트리의 특징은 절대 같은 값을 넣으면 안된다.2. 왼쪽 자식의 노드는 자신의 부모 기준으로 작은 값이 들어와야 한다.3. 오른쪽 자식의 노드는 자신의 부모 기준으로 큰 값이 들어와야 한다. 모든 자료구조에서 삭제가 제일 중요하다! 삭제 알고리즘1. 노드의 자식이 0개 있는 경우2. 노드의 자식이 1개 있는 경우3. 노드의 자식이 2개 있는 경우 1234567891011121314151617181..

    [DAY 04] Doubly Linked List

    (오후) 링크가 잘 걸려있는지 항상 체크하여야 한다. 삽입, 삭제가 빈번할 때는 절대로 배열을 쓰지 않는다. 더블 링크 리스트 장점검색 효율이 좋다유지 보수성이 좋다 linked list는 검색 알고리즘이다. ------답 주석while(pos>count || posnext = NULL; root->prev = NULL; do { puts("========== MENU =========="); puts("1. 추가"); puts("2. 출력"); puts("=========================="); printf("뭐 할래? : "); scanf("%d", &num); switch (num) { case 1: // 입력 Insert(root); break; case 2: // 출력 Display..

    [자료구조] 성적관리프로그램(Singly Linked List)

    Saturday, January 27, 2018 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916..

    [DAY 03] Singly Linked List를 이용한 성적관리프로그램

    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816..

    [DAY 03] Singly Linked List 2

    Linked List의 종류 1. Single Linked List2. Double Linked List3. Single 환형 Linked List4. Double 환형 Linked List (실무에서 많이 씀) 2. 삭제 삭제는 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512..

    [DAY 02] Singly Linked List 1

    Linked List의 종류 1. Singly Linked List2. Doubly Linked List3. Circular Singly Linked List4. Circular Doubly Linked List (실무에서 많이 씀) linked list를 쓸때 키 포인트가 뭐냐? 동적 메모리는 이름이 없다! 그래서 항상 포인터가 잡고 있어야 한다그래서 내가 가리키고 있는 포인터에서 얘를 움직여도 되는가? 라는 부분을 항상 염두해 두어야 한다움직일 순 있지만, 항상 첫번째 부분을 가리키고 있어야 한다. 그래야 뒤에 있는 곳도 가리킬 수 있다. (그림은 필기 참고) 자기 참조 구조체 구조체 안에 구조체를 넣을 수 있나? (o)그게 자바에서 has-a 관계이다(그림 참고) 지금부터 용도를 확실히 해라! 포인..

    [DAY 01] Review of Pointers

    알고리즘 : 문제 해결력 주소값 : 메모리에 저장된 위치1. &변수명 : 그 변수의 시작주소를 의미한다.2. 배열명3. 함수명 : 코드 영역에 저장된다4. 문자열 문자열의 집합으로 밖에 쓸 수 없다.5. 포인터 (간접 변수; 자기 자신을 위해서 쓰는 게 아니라 접근하는 대상에 쓴다) 주소 표현식그 정체가 배열이면 sizeof(그 배열의 전체 크기)포인터면 sizeof(int) right - left정체를 알면 그 정체부분은 읽지 않는다 Program 01.01 차원을 구분해서 동적 메모리 할당으로 만든 성적관리프로그램