본문 바로가기
반응형

C, C++7

[C] 단일연결리스트 합병정렬 (singly linked list merge sort) 합병정렬에 관한 포스팅은 따로 알고리즘 창고에 하겠습니다. 보통 배열로 이루어진 정렬만 해서 애를 먹었습니다. 특히 분할하는 부분에서 힘들었는데, 그래도 깔끔한 방법을 찾아내 만들었습니다. 구조체 및 함수설명 NODE : 단일연결리스트를 구성하는 노드 구조체 TMP : partition 함수를 위한 구조체. 두 개의 반환값을 받아내기 위함 NODE* addNode(int n) : 노드를 추가하는 함수. 단일연결리스트 끝부분에 계속 붙여나가므로 새 노드 값의 next는 항상 NULL이다. void mergeSort(NODE **L, int k) : 합병정렬함수. 재귀방식으로 구성돼있다. L은 리스트의 시작 주소, k는 리스트의 크기이다. NODE* merge(NODE *L1, NODE *L2) : 합병함수.. 2018. 10. 14.
[C] 함수: 숫자 뒤집기 직접 만들어서 써야되는 함수가 있는데 맨날 치기 귀찮아서 짤막하지만 유용한 내 손으로 코딩한 함수들을 블로그에다 저장해놓을 생각이다. 구글링 하면 된다고? 조교와 교수님이 배낀걸 잡아낼 수도 있다. 내가 직접 친거를 보관해놨다가 써야지~ int Rev(int n) { int result = 0; while (n > 0) { result *= 10; result += (n % 10); n /= 10; } return result; } 함수 설명 반환값 : int 인자 : int 1개 인자로 받은 n을 뒤집어서 반환하는 함수이다. 12345를 넘겨주면 54321로 반환한다. int이므로 큰 수를 뒤집고 싶으면 적절하게 인자와 반환값의 자료형을 바꿔주자. 2018. 7. 25.
[C] 자료형 정리 C언어에는 많은 자료형이 있다. 그 중에서 주로 쓰는 자료형은 거의 몇 개 정해져있지만 상황(큰 범위의 정수를 써야하는 경우라든지)에 따라 활용할 수 있는 자료형이 많기 때문에 모든 자료형을 한 눈에 볼 수 있도록 정리해볼 생각이다. 키워드 자료형 크기포맷형식 short 정수 2 byte%hd int 정수 4 byte%d long 정수 4 byte, (64비트)8 byte%ld long long 정수 8 byte, (64비트)8 byte 이상%lld char 정수(문자) 1 byte%c (문자열)%s float 실수 4 byte%f double 실수 8 byte%lf long double 실수 8 byte 이상%Lf long과 long long은 시스템에 따라 자료형의 크기가 달라진다. long은 32비.. 2018. 7. 18.
[C] DIY로 해보는 strcmp string.h에 내장되어있는 함수인 strcmp(str1, str2). 두 개의 문자열의 사전상 순서(크기)를 비교하기 위해 사용된다. 리턴 값이 0보다 작으면 str1이 더 먼저 나오는 것. 리턴 값이 0이면 두 문자열이 같은 것. 리턴 값이 0보다 크면 str2가 먼저 나오는 것이다. 함수 알고리즘 1. 두 문자열을 처음 문자부터 비교한다. 중간에 서로 다른 문자가 나오면 비교해 str1의 문자가 사전상 먼저 나오면 -1, str2가 사전상 먼저 나오면 1을 리턴한다. 2. for문을 빠져나오면 상황은 두 가지이다. 둘 중 하나가 먼저 NULL을 만났거나, 둘 다 같아서 둘 다 NULL을 만난 상태이거나. 여기서 str1이 먼저 끝났으면 -1, str2가 먼저 끝났으면 1을 리턴한다. 길이가 짧으면.. 2018. 7. 14.
[C] scanf로 공백포함 문자열 입력받기 공백을 포함한 문자열을 받을 때, scanf("%s")로는 해결되지 않습니다. 스페이스 또한 입력의 끝으로 받기 때문입니다. 그 때마다 필연적으로 gets를 쓸 수 밖에 없는데, scanf만을 이용해 공백까지 받아낼 수 있는 방법을 알려드리고자 합니다. #include int main() { char str[100]; scanf("%[^\n]s", str); printf("%s\n", str); return 0; } 위와 같은 코드로 scanf만을 이용해 공백을 포함한 문자열을 받을 수 있습니다. %[^'문자']는 해당 문자가 나오기 전까지 모든 입력을 받는다는 뜻입니다. 그러므로 %[^\n]s는 개행(엔터)가 나오기 전까지 모든 문자열을 받겠다는 얘기죠! 공백도 포함해서요! #include int ma.. 2018. 7. 5.
[C] 학교과제_황제노드찾기 학교과제로 풀었던 황제노드찾기. 내부노드를 한 번 씩만 방문해 황제노드를 판별하는 방식이다. 순회 방식은 레벨순회이다. 황제노드 - 자신은 로만노드가 아니지만 자기 아래 자손들이 모두 로만노드인 노드로만노드 - 자신의 오른쪽과 왼쪽 부트리의 노드 개수 차이가 5 이하인 노드 구글링 해도 황제, 로만노드의 개념이 나오지 않는 것을 보면 교수님이 고안해내신 개념인 것 같다. #include #include #include #include typedef struct node { struct node *left; struct node *right; }NODE; typedef struct { NODE *root; }TREE; // 각 노드의 좌,우 자식 유무에 대한 정보를 담은 함수. initNode를 편리하게 .. 2018. 7. 1.
반응형