목록과제 (22)
without haste but without rest
#include #include #define MAX_SIZE 5 /* 선형 큐 디큐로 인자를 빼는 경우 앞 공간을 활용하기가 쉽지 않다. 코드에서 디큐로 3까지 뽑았는데, 엔큐를 하면 오버플로우가 난다. 큐 배열에 데이터는 아직 존재하기 때문이다. 따라서 원형 큐로 변경하여, 빠져나간 공간을 재활용할 수 있게 만든다. */ typedef int element; typedef struct { element queue[MAX_SIZE]; int front, rear; } QueueType; void error(char* msg) { fprintf(stderr, "%s\n", msg); // remind this point exit(1); } void init_Queue(QueueType* q) { q->f..
후위 표기 계산 main (기본 코드) #include "stack.h" #include #include int eval(char* value) { int n = strlen(value); int v1, v2; char ch; stackType s; init_stack(&s); for (int i = 0; i < n; i++) { ch = value[i]; if (ch != '+' && ch != '-' && ch != '/' && ch != '*') { ch = ch - '0'; // atoi push(&s, ch); } else { v2 = pop(&s); v1 = pop(&s); switch (ch) { case '+': push(&s, v1 + v2); break; case '-': push(&s..
괄호 매칭 main #include "stack.h" #include #include int check_matching(const char* input) { int i, n = strlen(input); char ch, open_ch; stackType s; init_stack(&s); print_stack(&s, input); for (i = 0; i < n; i++) { ch = input[i]; switch (ch) { case '(': case '{': case '[': push(&s, ch); print_stack(&s, input + (i + 1)); // * input + (i + 1) 은 input[i] 이후의 문자를 모두 출력 break; case ')': case '}': case ']..
미로 문제 main #include #include #include "stack.h" #define WALL '1' #define ROAD '0' #define PATH '#' #define GOAL 'G' #define VISITED '.' #define MAX_SIZE 20 char maze[MAX_SIZE][MAX_SIZE]; int maze_size = 0; void init_maze() { printf("Maze Size >> "); scanf_s("%d", &maze_size); for (int i = 0; i < maze_size; i++) { printf("%d행: ", i); scanf_s("%s", &maze[i], sizeof(char) * maze_size + 1); } } void..
동적 배열 스택 #include #include /* 동적 배열 스택 완성 코드 추가 1. void delete_stack 2. void print_stack 3. 구조체를 포인터로 선언 */ typedef int element; // element is data tpye of stack, it is easy to adjust code typedef struct { element* stack; int top; int capacity; } stackType; void init_stack(stackType* s); int is_full(stackType* s); int is_empty(stackType* s); void push(stackType*, element item); element pop(stack..
구조체를 활용하는 스택 #include #include #define MAX_SIZE 5 /* 구조체를 활용한 배열 스택 단점 1. 배열의 크기를 변경할 수 없다. 2. 메모리 사용측면에서 비효율적이다. 해결 방법 1. 동적 배열 스택 */ typedef int element; // element is data tpye of stack, it is easy to adjust code typedef struct { element data[MAX_SIZE]; int top; } stackType; void init_stack(stackType* s); int is_full(stackType* s); int is_empty(stackType* s); void push(stackType* s, element i..
전역변수를 사용하는 스택 #include #include #define MAX_SIZE 5 /* 전역 변수를 사용하는 배열 스택 단점 1. 전역 변수를 많이 사용한다. 해결 방법 1. 구조체를 활용해서 전역 변수 사용을 줄인다. */ typedef int element; // element is data tpye of stack, it is easy to adjust code element stack[MAX_SIZE]; int top = -1; int is_full(); int is_empty(); void push(element item); element pop(); element peek(); int main(void) { for (int i = 1; i
ADT 구현, 사각형 문제 #include #include typedef struct _coordinates { int x; int y; } Point; void input(Point *p); void output(Point p); double distance(Point pt1, Point pt2); int area(Point pt1, Point pt2); int equals(Point pt1, Point pt2); void move(Point* pt1, Point vec); int test() { Point p1, p2, vec; printf(">>"); input(&p1); printf(">>"); input(&p2); if (equals(p1, p2)) { printf("두 점이 같습니다."); r..