기타: 123개의 글
[C] 후위표기법 1 Stack_LinkedList 링크드 리스트의 스택을 활용하여 중위표기법을 후위표기법으로 변경해보자 1. '(' 문자는 무시하고 넘어간다2. 피연산자는 그대로 출력한다.3. 연산자는 스택에 푸시한다.4. ')'를 만나면 스택에서 팝하여 출력한다. 아래 알고리즘의 단점은 연산자 우선 순위가 고려되지 않아 중위표기법에 괄호를 씌워야 한다. void postfix1(char *dst, char *src){ char c; init_stack(); while (*src){ if (*src == ')'){ *dst++ = pop(); *dst++ = ' '; src++; } else if(*src=='+' || *src=='-' || *src=='*' || *src=='/'){ push(*sr..
[C] 스택(Stack) LinkedList 스택은 리스트로 표현할 수도 있다.배열에서는 크기가 정해져 있기 때문에 크기 이상의 데이터가 push 되면 스택오버플로우가 발생하지만, 리스트를 사용할 경우 동적으로 할당할 수 있기 때문에 메모리가 고갈될 때까지 push를 할 수 있다. #include #include typedef struct _node{ int key; struct _node *next; } node; node *head, *tail; void init_stack(void){ head = (node*)malloc(sizeof(node)); tail = (node*)malloc(sizeof(node)); head->next = tail; tail->next = tail; } int push(..
[C] 스택(Stack) 배열형 스택은 LIFO(Last In First Out) 구조이다.스택은 배열로 나타낼 수 있으며, 동적 구현을 위해서 Linked List를 사용할 수도 있다. 배열로 구현할 경우, 제한된 배열 크기 안에서 스택을 사용할 수 있으며 Stack이 꽉찬 상태에서 push가 발생하면, Stack Overflow 처리를 그리고 스택이 비어있을 때 pop이 발생하면 Stack underflow 처리를 해줘야 한다. 스택에서는 현재 최상단의 위치를 가리키는 top 을 유지해야 한다. #include #define MAX 10 int stack[MAX]; // 스택의 긴 통 int top; // 스택의 상단 void init_stack(void){ top = -1; } int push(in..
[C] 이중 연결 리스트 (Doubly Linked List) #include #include typedef struct _dnode{ int key; struct _dnode *prev; struct _dnode *next; } dnode; dnode *head, *tail; void init_dlist(void){ head = (dnode*)malloc(sizeof(dnode)); tail = (dnode*)malloc(sizeof(dnode)); head->next = tail; head->prev = head; tail->next = tail; tail->prev = head; } dnode *find_dnode(int k){ dnode *s; s = head->next; while (s->key..
[C] 요셉의 문제 (환형 연결 리스트) 요셉의 문제 :A부터 J까지의 10명의 사람이 시계 방향으로 순서대로 원을 지어 앉아 있다고 하자. 이때 A부터 시작하여서 4명 간격으로 사람을 그 원에서 뽑아낸다고 하면 그 순서는 어떻게 될 것인가? 결과 : A, E, I, D, J, G, F, H, C, B 응용하여 1부터 n까지의 숫자를 순서대로 나열되어 있고, 1부터 시작하여 m 간격으로 숫자를 뽑아내는 순서를 구하는 문제를 환형 연결 리스트를 사용하여 풀어본다. #include #include typedef struct _node{ int key; struct _node *next; } node; node *head; // 1부터 k까지의 값을 가지는 환형 연결 리스트 구성 void insert_node..
[C] 연결리스트 (Linked List) #include #include typedef struct _node{ int key; struct _node *next; } node; node *head, *tail; void init_list(void){ head = (node*)malloc(sizeof(node)); // head 메모리 할당 tail = (node*)malloc(sizeof(node)); // tail 메모리 할당 head->next = tail; // head의 다음은 tail tail->next = tail; // tail의 다음은 tail } node *insert_after(int k, node* t){ node *s; s = (node*)malloc(sizeof(node)); ..
[C] Turbo C 의 clrscr 함수 Visual C에서 컴파일하기 Turbo C 에서 사용하는 clrscr() 함수는 콘솔의 내용을 지워주는 함수이다.하지만 VC에서는 clrscr 함수를 제공하지 않으며, 아래의 내용을 추가하여 컴파일할 수 있다. #include void clrscr(void) { COORD Cur = { 0, 0 }; unsigned long dwLen; FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ', 80 * 25, Cur, &dwLen); } 출처: https://hyeonstorage.tistory.com/341?category=622873 [개발이 하고 싶어요]
[C] Turbo C의 gotoxy 함수 Visual C 에서 컴파일하기 Trubo C 에서는 콘솔에서 특정 x, y 좌표로 이동시켜주는 gotoxy 라는 함수가 제공된다.하지만 Visual C 에서는 gotoxy가 제공되지 않아 컴파일 되지 않는다. 아래의 함수를 추가해주면 VC에서도 gotoxy()를 사용할 수 있다. #include gotoxy(int x, int y)//내가 원하는 위치로 커서 이동 { COORD pos = { x - 1, y - 1 };//커서가 X좌표에서 -1 한값. Y좌표에서 -1한 값으로 이동 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);// WIN32API 함수입니다 } 출처: https://hyeonst..
[C] memcpy()를 사용한 swap swap 함수를 작성할 때는, 포인터로 인자를 넘겨야 한다. 값을 인자로 넘길 경우 원본을 복사한 사본이 넘어오므로, 원본에는 값이 변경되지 않기 때문이다. 보통 swap 함수는 아래와 같이 작성된다. void swap(int *a, int *b){ int t; t = *a; *a = *b; *b = t; } 위와 같은 방법으로 int 형의 데이터 a 와 b의 데이터를 swap 할 수 있다. 하지만 int 형 외에 다른 타입의 swap을 하기 위해 타입별로 swap 함수를 만드는 것은 비효율적이다.이러한 경우에 인자를 void* 형으로 받고, 넘어오는 인자의 size 를 같이 넘겨준 후 memcpy()를 사용하여 swap을 하면 여러형의 변수에 사용할 수 있다. ..
[C] 소수 출력하기 (에라토스테네스의 체) '주어진 N보다 작은 소수를 모두 구하여라' 이것은 2부터 주어진 N까지의 숫자를 탐색하면서, 소수가 아닌 숫자와 그 배수들을 지워나가고 최종적으로 남은 숫자만 출력하는 방법이다. 소수가 아닌 숫자들을 체크하여 지워나가기 위하여 배열을 사용한다. 1. 정수 N을 입력받는다 (N까지의 소수를 구한다)2. 정수 N만큼의 배열 array[N]을 확보한다.3. array[N]을 초기화시킨다. (모든 요소를 0으로)4. for(i=2; i