728x90
반응형
오늘도 역시 공부해놨던 부분을 이제 포스팅하는 시간이다. 역시 미리미리 해야한다.
스택이란?
일단 그림이 먼저다.
A, B, C 순서로 사각형을 넣을 것이다.
이렇게 된다. 그렇다면 다시 뺀다면?
이 때, 담는 용기, 통! 이것이 스택 자료구조이다.
먼저 들어간 사각형 A가 제일 늦게 나오는 구조인 것이다. 이러한 개념을 후입선출이라고 한다. 나중에 들어간 것이 먼저 나오는 구조!
이를 구현하면 아래와 같다.
코드 및 실행 결과
---
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#include <stdio.h>
#define STACK_LEN 10
#define TRUE 1
#define FALSE 0
struct array_stack
{
int stack_arr[STACK_LEN];
int top_index;
};
typedef array_stack stack;
void StackInit(stack* s);
int SIsEmpty(stack* s);
void SPush(stack* s, int data);
int SPop(stack* s);
int SPeek(stack* s);
int main(void)
{
stack s;
StackInit(&s);
SPush(&s, 1);
SPush(&s, 2);
SPush(&s, 88);
SPush(&s, 125);
SPush(&s, 9912);
while (!SIsEmpty(&s))
printf("[%d] ", SPop(&s));
fputs("\n", stdout);
if (SIsEmpty(&s))
printf("스택이 텅 비었습니다.\n");
return 0;
}
void StackInit(stack* s)
{
s->top_index = -1;
return;
}
int SIsEmpty(stack* s)
{
if (s->top_index == -1) // 같아도 된다고?
return TRUE;
else
return FALSE;
}
void SPush(stack* s, int data)
{
if (s->top_index == STACK_LEN)
{
printf("스택이 꽉 찼습니다.\n");
return;
}
s->stack_arr[++(s->top_index)] = data;
printf("스택에 %d 값이 추가 되었습니다.\n", s->stack_arr[s->top_index]);
return;
}
int SPop(stack* s)
{
if (SIsEmpty(s))
{
printf("스택이 이미 비어져 있습니다.\n");
return -1; // 적절치 않다. -1 또한 값으로 넣을 수 있기 때문에. -> 차라리 프로그램을 종료시키는게 적절.
}
return s->stack_arr[s->top_index--];
}
int SPeek(stack* s)
{
if (SIsEmpty(s))
{
printf("스택이 텅 비었습니다.\n");
return -1;
}
return s->stack_arr[s->top_index];
}
|
cs |
---
중간 중간에 보완해야할 부분이 있지만 개념 부분에서는 충분하기 때문에 보완하지는 않았다.
728x90
반응형
'프로그래밍응용 > C 자료구조' 카테고리의 다른 글
C Data Structure - 큐 (0) | 2021.01.08 |
---|---|
C Data Structure - 퀵 정렬 (0) | 2021.01.06 |
C Data Structure - 병합 정렬 (0) | 2021.01.05 |
C Data Structure - 힙 정렬 (0) | 2021.01.05 |
C Data Structure - 연결 리스트 (0) | 2021.01.04 |