스택
1) 스택(Stack)은 한쪽으로 들어가서 한쪽으로 나오는 자료 구조(Data Structure) 입니다
즉, 들어가는 곳과 나오는 곳이 동일합니다
2) 이러한 특성 때문에 수식 계산 등의 알고리즘에서 다방면으로 활용됩니다
-PUSH: 스택에 데이터를 넣습니다
-POP: 스택에서 데이터를 빼냅니다
스택의 구현
1) 스택(Stack)은 배열을 이용한 구현 방법과 연결 리스트를 이용한 구현 방버븡로 나누어 집니다
2) 가장 기본적인 형태의 자료구조로 구현 난이도는 낮은 편입니다
3) 먼저 배열을 이용한 구현 방법에 대해서 알아보겠습니다
배열을 이용해 스택을 활용한 예시
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
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10000
#define INF 99999999
int stack[SIZE];
int top = -1; //스택의 최상단
void push(int data) {
if (top == SIZE - 1) { //더 이상 데이터를 못 넣을때
printf("스택 오버플로우가 발생했습니다\n");
return;
}
stack[++top] = data;
}
int pop() {
if (top == -1) { //더 이상 데이터를 못 뺄때
printf("스택 언어플로우가 발생했습니다\n");
return -INF;
}
return stack[top--];
}
void show() {
printf("--- 스택의 최상단 ---\n");
for (int i = top; i >= 0; i--) {
printf("%d\n", stack[i]);
}
printf("--- 스택의 최하단 ---\n");
}
int main (void){
push(7);
push(5);
push(4);
pop();
push(6);
pop();
show();
return 0;
}
|
cs |
연결 리스트를 이용해 스택을 활용한 예시
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
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define INF 99999999
typedef struct {
int data;
struct Node* next;
}Node;
typedef struct {
Node* top;
} Stack;
void push(Stack* stack, int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = stack->top;
stack->top = node;
}
void pop(Stack* stack) {
if (stack-> top == NULL) {
printf("스택 언더플로우가 발생했습니다\n");
return -INF;
}
Node* node = stack->top;
int data = node->data;
stack->top = node->next;
free(node);
return data;
}
void show(Stack* stack) {
Node* cur = stack->top;
printf("--- 스택의 최상단 ---\n");
while (cur != NULL) {
printf("%d\n", cur->data);
cur = cur->next;
}
printf("--- 스택의 최하단 ---\n");
}
int main (void){
Stack s;
s.top = NULL;
push(&s, 7);
push(&s, 5);
push(&s, 4);
pop(&s);
push(&s, 6);
pop(&s);
show(&s);
return 0;
}
|
cs |
이렇게 스택은 배열 , 연결 리스트를 이용해서 구현할 수 있습니다
'자료구조와 알고리즘' 카테고리의 다른 글
양방향 연결 리스트 (0) | 2021.02.27 |
---|---|
연결 리스트 (0) | 2021.02.17 |
자료구조의 개요 (0) | 2021.02.16 |