스택을 영어로 설명하면 first in last out이라고 한다.
나는 이 말을 듣자마자 공병이 떠올랐다. ptsd와 함께.
쓸데없는 소리는 여기까지 하고, first in last out을 알아듣게 설명하자면
먼저 입력을 한 값이 나중에 나오고, 나중에 입력된 값이 먼저 나온다는 소리다.
출력할 때는 위에서부터 하고 입력할 때는 쌓아 올리는 형식으로 한다는 말이다.
ㅇ스택 문제를 풀 때는 4개의 함수가 필요하다.
- 공백상태를 검사하는 함수
- 포화상태를 검사하는 함수
- 삽입하는 함수
- 배출하는 함수
공백상태를 검사하는 함수를 설명하겠다.
top이란 변수를 호출했다.
top은 삽입을 하면 1씩 커지고, 배출을 하면 1씩 작아지는 변수다.
그러므로, 공백상태를 검사하는 함수에서 top이 0보다 작으면 1을 반환한다고 했는데
이 말은 top이 음수인 상태는 아직 입력이 없거나, 모두 출력을 해서 공백인 상태라는 것이다.
포화상태 검사하는 함수를 설명하겠다.
1
2
3
4
5
6
7
8
9
|
int full(void)
{
if (top > Max_stack - 1)
{
return 1;
}
else
return 0;
}
|
cs |
top이란 변수가 식별자로 호출된 최대 크기와 같거나 더 클경우에는 포화상태라는 걸 의미한다.
top은 -1부터 시작이므로, 최대크기에서 -1을 뺀 값과 같거나 크면 포화상태다.
삽입하는 함수를 설명하겠다.
1
2
3
4
5
6
7
|
void push(int value)
{
if (full == 1)
printf("들어갈 공간이 없어요ㅜㅜ\n");
else
stack[++top] = value;
}
|
cs |
배열이 포화상태일때는 입력할 수가 없으므로, 포화상태 검사하는 함수에서 1이 반환되는지 0이 반환되는지
알아보는 조건문을 만든 뒤, 포화상태일때는 더 이상 못 들어간다고 선언한다.
포화상태가 아닐때는 전위 증감 연산자를 이용해 top의 값에 1을 더하고 그 인덱스에 매개변수 값을 넣는다.
배출하는 함수를 설명하겠다.
1
2
3
4
5
6
7
|
int pop()
{
if (empty == 1)
printf("배출할게 없어요ㅜㅜ\n");
else
return stack[top--];
}
|
cs |
배열이 공백상태일때는 배출할 게 없으므로 배출할 게 없다고 출력을 한다.
공백상태가 아닐때는 후위 증감 연산자를 이용해 맨 위에 있는 값을 배출하고 그다음에 인덱스의 값에서 1을 뺀다.
Full code
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include <stdio.h>
#define Max_stack 100
int stack[Max_stack];
int top = -1;
int empty(void)
{
if (top < 0)
return 1;
else
return 0;
}
int full(void)
{
if (top > Max_stack - 1)
{
return 1;
}
else
return 0;
}
void push(int value)
{
if (full == 1)
printf("들어갈 공간이 없어요ㅜㅜ\n");
else
stack[++top] = value;
}
int pop()
{
if (empty == 1)
printf("배출할게 없어요ㅜㅜ\n");
else
return stack[top--];
}
int main()
{
push(3);
push(4);
printf("%d\n",pop());
printf("%d\n",pop());
push(10);
full();
empty();
return 0;
}
|
cs |
출처: 안경잡이 개발자 블로그(naver)