스택이란?
스택은 쌓아놓은 더미라는 뜻으로, 가장 최근에 들어온 데이터가 가장 먼저 나가는 후입선출(LIFO:Last-In First-Out)의 형태이다.

스택의 연산
-
push(): 스택에 데이터를 추가
-
pop(): 스택에서 데이터를 삭제
- is_empty(s): 스택이 공백상태인지 검사
- is_full(s): 스택이 포화상태인지 검사
-
create(): 스택을 생성
-
peek(s): 요소를 스택에서 삭제하지 않고 보기만 하는 연산
배열을 이용한 스택
- 1차원 배열 stack[]
- 스택에서 가장 최근에 입력되었던 자료를 가리키는 top 변수
-
¨가장 먼저 들어온 요소는 stack[0]에, 가장 최근에 들어온 요소는 stack[top]에 저장
- 스택이 공백상태이면 top은 -1
전역 변수로 구현하는 방법
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100 // 스택의 최대 크기
typedef int element; // 데이터의 자료형
element stack[MAX_STACK_SIZE]; // 1차원 배열
int top = -1;
// 공백 상태 검출 함수
int is_empty()
{
return (top == -1);
}
// 포화 상태 검출 함수
int is_full()
{
return (top == (MAX_STACK_SIZE - 1));
}
// 삽입 함수
void push(element item)
{
if (is_full()) {
fprintf(stderr, "스택 포화 에러\n");
return;
}
else stack[++top] = item;
}
// 삭제 함수
element pop()
{
if (is_empty()) {
fprintf(stderr, "스택 공백 에러\n");
exit(1);
}
else return stack[top--];
}
int main(void)
{
push(1);
push(2);
push(3);
printf("%d\n", pop());
printf("%d\n", pop());
printf("%d\n", pop());
return 0;
}

구조체 배열 사용하기
#include <stdio.h>
#define MAX_STACK_SIZE 100
typedef int element;
typedef struct {
element data[MAX_STACK_SIZE];
int top;
} StackType;
// 스택 초기화 함수
void init_stack(StackType* s)
{
s->top = -1;
}
// 공백 상태 검출 함수
int is_empty(StackType* s)
{
return (s->top == -1);
}
// 포화 상태 검출 함수
int is_full(StackType* s)
{
return (s->top == (MAX_STACK_SIZE - 1));
}
// 삽입함수
void push(StackType* s, element item)
{
if (is_full(s)) {
fprintf(stderr, "스택 포화 에러\n");
return;
}
else s->data[++(s->top)] = item;
}
// 삭제함수
element pop(StackType* s)
{
if (is_empty(s)) {
fprintf(stderr, "스택 공백 에러\n");
exit(1);
}
else return s->data[(s->top)--];
}
int main(void)
{
StackType s;
init_stack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("%d\n", pop(&s));
printf("%d\n", pop(&s));
printf("%d\n", pop(&s));
}

'자료구조' 카테고리의 다른 글
[자료구조] 큐(Queue) (0) | 2022.10.19 |
---|---|
[자료구조] 스택(Stack) 예제 (0) | 2022.10.19 |
[자료구조] 배열 구조체 포인터 (0) | 2022.10.18 |
[자료구조] 순환, 히노이탑 (0) | 2022.10.18 |
[자료구조] 자료구조와 알고리즘 (0) | 2022.10.18 |
댓글