티스토리 뷰
스택은 데이터의 순서를 뒤집어야 하는 경우에 유용하게 쓰인다. 스택을 임시 메모리로 사용하면 코드가 간결해진다.
(1) 문자열 뒤집기
문자열의 글자 순서를 뒤집는 문제는 스택을 이용하여 다음과 같이 해결할 수 있다. (널문자는 그대로 있음)
void reverse(char* word)
{
stack_t stack;
int i;
for (i = 0; i < strlen(word); i++)
push(&stack, word[i]);
i = 0;
while (!is_empty(&stack))
word[i++] = pop(&stack);
}
(2) 2진수로 바꾸기
2진수로 바꾸는 문제는 2로 나눈 나머지를 거꾸로 이어 붙여서 2진수를 만들 수 있다. 이 문제도 스택을 이용해서 다음과 같이 간단하게 바꿀 수 있다.
void print_binary(int n)
{
stack_t stack;
while (n > 0) {
push(&stack, n % 2);
n /= 2;
}
while (!is_empty(&stack))
printf("%d", pop(&stack));
}
(3) 주어진 단어가 거울문자열인지 검사하기
거울문자열인지 검사하는 문제도 스택을 이용하여 해결할 수 있다. (여기서는 typedef char element;여야 함)
int palindrome(char* word)
{
stack_t stack;
int i;
init_stack(&stack);
for (i = 0; i < strlen(word) / 2; i++)
push(&stack, word[i]);
if (strlen(word) % 2 > 0)
i++;
while (!is_empty(&stack))
if (word[i++] != pop(&stack))
return 0;
return 1;
}
(4) 괄호 짝 검사
괄호 짝 검사도 스택을 이용하기에 적합한 문제다. 여는 괄호는 푸시하고 닫는 괄호에서는 팝해서 짝이 맞나 확인한다. 괄호가 아닌 경우는 그냥 넘어가면 된다.
int paren(char* word)
{
stack_t stack;
int i;
init_stack(&stack);
for (i = 0; i < strlen(word); i++) {
if (word[i] == '(')
push(&stack, word[i]);
else if (word[i] == ')')
if (pop(&stack) != '(')
return 0;
}
return is_empty(&stack);
}
이런 문제 해결에 스택을 쓰면 코드가 간결하면서도 이해하기 쉬워진다는 점에서 큰 장점을 가진다.
'C로 만드는 자료구조' 카테고리의 다른 글
연결리스트 명령 프로그램 (0) | 2022.04.26 |
---|---|
연결리스트 소개 (1) | 2020.03.14 |
두 개 스택으로 큐 구현하기 (0) | 2020.03.13 |
트리 자료구조의 입출력 (0) | 2020.03.13 |
원형 큐 자료구조와 큐 출력 (0) | 2020.03.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Iterator
- sort key
- zip
- python example
- comparable
- python exercise
- Camel Style
- 이터러블
- 패턴
- rust
- C++ 클래스
- Lazy evaluation
- TypeError
- ToString
- 스트링 +
- typedef
- 자바regex
- 지연계산
- APPEND
- CompareTo
- 스트링
- format
- 콜렉션
- contains
- indexof
- 이터레이터
- 동적바인딩
- follow
- contentEquals
- max
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함