CS/자료구조
[자료구조] 배열로 구현한 스택(stack)
하늘아래현서
2022. 6. 13. 22:21
1. 스택(stack)이란?
- 컴퓨터에서 많이 사용되는 자료구조 중 하나이다.
- 후입선출(LIFO : Last In First Out) 구조를 가지고 있다.
- 스택의 기본적인 연산으로 스택에 삽입하는 push 연산과 삭제하는 pop 연산이 있다.
- 스택의 맨 상단은 stack top이라 하고 맨 하단을 stack bottom이라 한다.
스택의 입출력은 top에서만 일어난다.
즉 스택의 한쪽 끝에서만 삽입, 삭제하는 구조이다.
- 함수 호출 시 함수 실행이 끝나면 자신을 호출한 지점으로 다시 돌아가야 하기 때문에
스택을 이용해 복귀할 주소를 저장한다.
2. 배열로 스택 구현하기
- 정수형 배열을 이용하여 스택을 구현해본다.
- push, pop 모두 배열의 top에서 이뤄진다.
#include <stdio.h>
#define STACK_SIZE 5
int stack[STACK_SIZE] = {0,};
int top = 0;
//스택이 다 찼는지 확인하는 함수.
int is_full(void){
if(top >= STACK_SIZE){
return 1;
}else{
return 0;
}
}
//스택이 비었는지 확인하는 함수.
int is_empty(void){
if(top <= 0){
return 1;
}else{
return 0;
}
}
//스택에 삽입
void push(int data){
if(is_full()){
printf("stack is full...\n");
}else{
//스택의 top에 데이터를 삽입
stack[top++] = data;
printf("complete...\n");
}
}
//스택에서 삭제
void pop(void){
if(is_empty()){
printf("stack is empty...\n");
}else{
//스택의 top 데이터 삭제
top--;
printf("complete...\n");
}
}
//스택 배열 출력
void print_stack(int* stack_p){
printf("stack data [ ");
for(int i=0; i<top; i++){
printf("%d ", stack_p[i]);
}
printf("]\n");
}
int main(int argc, const char * argv[]) {
int input;
int data;
do{
printf("1. push 2. pop 3. print 4. end\n");
scanf("%d", &input);
if(input == 1){
printf("data : ");
scanf("%d", &data);
push(data);
}else if(input == 2){
pop();
}else if(input == 3){
print_stack(stack);
}
}while(input != 4);
printf("end.");
}