본문 바로가기
반응형

혼자 공부하는 것들/자료구조(c언어)8

C) 이진탐색(binary search) 구현하기 저번 시간에 헀던 순차탐색과 비슷하지만 구조가 조금 다르다. 이번에는 재귀를 사용하여 이진탐색을 구현해보았다. #include #include #include #define COMPARE(A,B) ((A)>(B))?(1):(((A) 2020. 7. 18.
C) 순차탐색(sequential search) 구현하기 main에서 찾고싶은 소수를 입력받아 seqsearch함수를 통해 몇 번째에 들어가 있는지 찾을 수 있도록 하는 것이다. prime[]은 자신이 원하는 배열을 넣으면 된다. left는 배열에 첫번째 즉, 0번쨰가되고, right는 배열의 마지막 즉 n번쨰가 된다. 점차 왼쪽 오른쪽 줄여가면서 값을 찾는 것인데 중요한점은 배열이 정렬되어있어야하는 조건이 필요하다. 정렬하는 방법은 따로 다루지는 않겠다. 버블정렬이나 선택정렬 등등... 다른 알고리즘을 사용하면된다. 나중에 다뤄볼 것이다. #include #include int seqsearch(int list[],int searchnum,int left, int right) { for(int i= left;i 2020. 7. 18.
C)주어진 파일 문서에 포함된 각 단어별 빈도 수를 출력하는 프로그램 작성(이진트리 사용) 오늘은 파일을 불러와 이진트리에 저장하여 단어종류와 빈도수를 출력하는 알고리즘을 만들어볼 것입니다. #include #include #include #include #include #include #define MAX_NAME 100 #define MAX_WORDS 10000 #define MAX_WORD_SIZE 100 #define TRUE 1 #define FALSE 0 /// 데이터 형식 typedef struct { char word[MAX_WORD_SIZE];/// 키필드 int count; } element; /// 노드의 구조 typedef struct TreeNode { element key; struct TreeNode *left, *right; } TreeNode; /// 만약 e1 .. 2020. 7. 18.
C)원형 큐(queue)에 자료 삽입 및 삭제 사용자가 정수를 입력하면 원형 큐에 삽입한다. 입력받은 정수가 -1이 아니면 계속 입력을 받는다. -1을 입력받으면 삽입을 멈추고 원형 큐에있는 자료를 순차적으로 삭제하여 출력한다. (즉, 원형 큐가 비게 될 때까지 삭제 및 출력을 한다.) #include #include #define MAX_QUEUE_SIZE 5 //큐의 사이즈를 임의로 설정하였다. typedef int element; typedef struct{ element quesue[MAX_QUEUE_SIZE]; int front,rear; }QueueType; int is_empty(QueueType *q) //만약 머리와 꼬리부분이 같으면 return을 해준다. { return (q->front == q->rear); } int is_fu.. 2020. 7. 18.
C)전위(preorder), 중위(inorder), 후위(postorder)순회 트리 구현 사용자로부터 5개의 숫자를 차례대로 입력받아 트리를 생성한다. (5개의 숫자는 postorder 순으로 입력) 가령, 9, 11, 5, 7, 3 이 입력된 경우, 아래와 같은 구조의 트리를 만든다. 3 / \ 5 7 / \ 9 11 각 노드를 만들어 연결하기 위해 다음과 같은 makeNode() 함수를 이용한다. makeNode() 함수의 인자와 반환 값은 다음과 같다. TreeNode * makeNode(int data, TreeNode *left, TreeNode *right) data: 노드에 저장될 데이터 (정수) left: 왼쪽 자식 노드의 주소 right: 오른쪽 자식 노드의 주소 반환값: 생성된 노드의 주소 ​ 생성된 트리의 preorder, inorder, postorder 순회 결과를 차.. 2020. 7. 18.
C)복소수를 구조체로 표현해보기, 복소수 덧셈 계산 일단 구조체를 하나 만들어준 다음 값을 받아들여 구조체에 저장한 뒤 complex_add함수에서 계산후 반환해주면 된다. 구조체의 정확한 이해가있으면 충분히 할 수 있는 문제이다. 곱셈이나 나눗셈도 똑같은 구조니 응용해 풀어보는 것이 좋을 것같다. #include typedef struct Complex{ double real; double imaginary; }Complex; Complex complex_add(Complex a, Complex b){ Complex add; add.real= a.real + b.real; add.imaginary = a.imaginary + b.imaginary; printf("실수부 : %f, 허수부 : %f\n",add.real,add.imaginary); } in.. 2020. 7. 17.
C)Link List 구현 C언어로 직접 구현해본 Link List입니다. 위에 링크는 소스가 들어간 Git주소입니다. 많은 피드백 해주시면 감사합니다. 일단 제가 구현한 소스는 학생이름,학번,점수 이렇게 꾸려보았습니다. 각 소스에 주석을 달아놓겠습니다. #include #include #include struct student { char name[10]; int hakbun; int score; struct student *next; ///다음학생을 가르키는 포인터 }; struct student *head = NULL; ///구조체의 첫 부분을 null로 초기화시켜준다. int list_size = 0; void add_head(const char *name, int hakbun, int score) ///노드의 해드를 만들.. 2020. 7. 17.
C) 피보나치 수열 계산하기 fib_iter라는 함수를 만들어준다음 입력값은 값이 0이면 0을 반환해주고, 1이면 1을반환해준다. 둘다 아니면 i가 2부터 n번까지 1씩증가하면서 result, pp, p 변수에 번갈아가면서 저장해주는 구조이다. #include #include int fib_iter(int n) { if(n ==0)return 0; if(n ==1)return 1; int pp=0; int p=1; int result=0; for(int i=2;i 2020. 7. 17.
반응형