1. 우선순위 큐를 구현하는 방법 배열 기반 연결 리스트 기반 힙 기반 배열 기반 연결 리스트 기반 단점 삽입/삭제 시 모든 데이터를 한칸씩 이동, 우선순위 비교 시 모든 데이터와 비교 삽입 위치를 찾기 위해 처음부터 마지막까지 데이터의 우선순위 비교 이런 이유로 힙으로 구현하는 것이 가장 쉽다. 2. 힙 힙이란 ? : 완전 이진 트리의 일종으로 루트 노드에 우선 순위가 가장 높은 데이터를 위치시킬 수 있는 자료구조 힙의 종류 Max Heap : 모든 노드에 저장된 값은 자식 노드의 값보다 크거나 같아야 함. Min Heap : 모든 노드에 저장된 값은 자식 노드의 값보다 작거나 같아야 함. 3. 우선순위 큐의 구현 1) 데이터 저장 과정을 간략하게 보면, 새 데이터를 마지막 위치에 저장 계속해서 부모 ..
전체 글
1. 삽입 1. 가장 앞에 삽입하는 경우 - 새 노드를 만들어 추가할 데이터를 저장한다. - 새 노드의 next 필드가 현재의 head 노드를 가리키도록 한다. - 새 노드를 새로운 head로 한다. Node *tmp = (Node*)malloc(sizeof(Node)); tmp->data = "Ann"; tmp->next = head; head = tmp; 2. 중간에 삽입하는 경우 - 새 노드를 만들어 추가할 데이터를 저장한다. - 새 노드의 next 필드가 prev의 다음 노드를 가리키도록 한다. - 새 노드를 prev의 다음 노드로 만든다. Node *tmp = (Node*)malloc(sizeof(Node)); tmp->data = "Jim"; tmp->next = prev->next; prev..
* ** *** **** ***** ****** ******* #include int main() { for (int i = 0; i < 7; i++) { for (int j = 0; j < 7 - i; j++) printf(" "); for (int k = 0; k
#include int main() { int n; printf("정수를 입력하시오.:"); scanf("%d", &n); printf("약수 :"); for (int i = 1; i
do-while 문 : while문과 비슷하지만 반복 조건을 루프의 마지막에 검사함. 따라서 조건을 만족하지 않아도 무조건 1번은 실행됨. do { . . . } while ( 조건 ); [예제] #define _CRT_SECURE_NO_WARNINGS #include int main() { int guess; int answer = 59; int tries = 0; do { printf("정답을 추측해 보시오. : "); scanf("%d", &guess); tries++; if (guess > answer) printf("제시한 숫자가 점수보다 높습니다.\n"); else if (guess < answer) printf("제시한 숫자가 점수보다 낮습니다.\n"); } while (guess != an..
#include int main() { int x = 3; int y = -3; printf("x = %08X\n", x); printf("y = %08X\n", y); printf("x+y = %08X\n", x + y); return 0; } 위 코드에서 '%08X'는 16진수로 출력하라는 형식지정자이다.
1. 연결리스트에서 하나의 노드를 표현하기 위한 구조체를 선언한다. struct node { char *data; // 데이터 필드 struct node* next; // 링크 필드 }; typedef struct node NODE; NODE *head = NULL; // 첫 노드의 주소를 저장할 포인터 data next 하나의 노드는 데이터 필드와 링크 필드로 구성된다. 링크 필드는 다음 노드의 주소를 저장하며, 첫 노드의 주소는 head 라는 포인터 변수에 따로 저장해야 한다. 2. head 노드를 생성한다. head = (NODE*)malloc(sizeof(NODE)); head->data = "Tuesday"; head->next = NULL; // 반드시 마지막 노드임을 NULL로 표시 head..
// 전화번호부 v5.0 #include #include #include #define CAPACITY 100 #define BUFFER_LENGTH 100 typedef struct person { char* name; char* number; char* email; char* group; } Person; Person ** directory; // 구조체의 포인터 배열 -> 주소값만 저장되기 때문에 복잡한 과정 생략됨 int capacity, n; char delim[] = " "; void init() { directory = (Person**)malloc(CAPACITY * sizeof(Person*)); capacity = CAPACITY; n = 0; } int readline(FILE* fp..
#include #include #include #define CAPACITY 100 #define BUFFER_LENGTH 100 typedef struct person { char* name; char* number; char* email; char* group; } Person; Person directory[CAPACITY]; int n = 0; char delim[] = " "; int readline(FILE * fp, char str[], int lim) { int ch, i = 0; while ((ch = fgetc(fp)) != '\n' && ch != EOF) if (i < lim) str[i++] = ch; str[i] = '\0'; return i; } void add(char* n..
이 버전은 저장된 사람의 수가 배열의 용량을 초과하는 경우, 배열의 크기를 확장한다. 또 잘못된 명령이 있다면 적절하게 반응하도록 한다. 예시 $ read File name required. $ read directory.txt $ status David 0517778888 Henry 0243737788 John 01034523747 Sean 01012345678 $ add Anderson Number required. $ add Anderson 01032452587 Anderson was added successfully. $ save directory.txt $ exit #include #include #include #define INIT_CAPACITY 3 #define BUFFER_SIZE 50..