Data Structure 5 - Stack(1)

배열이나 연결리스트 등은 데이터를 담을 공간을 마련하는 것에 가까웠다. 이제 이렇게 담은 데이터들을 정리할 필요가 있다. 

가장 먼저 스택이란 것은 들어온 순서대로 끝이 막힌 바구니에 차례로 쌓는 것과 동일하다. 가장 나중에 들어온 것이 가장 먼저 나가는 구조(후입선출, LIFO : Last In First Out)로 흔히 사용되는 Ctrl+Z나 뒤로가기를 구현할 때 사용되는 자료구조이다.

 

#include<stdio.h> // 배열 스택 ADT
#define MAX_SIZE 100

typedef int element;
typedef struct
{
    element stack[MAX_SIZE];
    int top;
}StackType; // 스택 배열과 맨 위(=가장 최근에 들어온 데이터)를 가르키는 변수 top

void init(StackType* s) // 스택 초기화
{
    s->top = -1; // 아무것도 없을 때 top=-1이다.
}

int is_empty(StackType* s) // 공백상태 검출 함수
{
    return (s->top == -1); //만약 공백이면 1을, 아니면 0을 return함.
}

int    is_full(StackType* s) // 스택이 가득 찼는지 확인
{
    return (s->top == (MAX_SIZE - 1));
}

void push(StackType* s, element item) // 스택 삽입 함수
{
    if (is_full(s))
    {
        fprintf(stderr, "스택 포화에러\n"); // 스택이 가득차 있으면 에러
        return;
    }
    else s->stack[++(s->top)] = item; //item을 top의 바로 위에 삽입
}

element pop(StackType* s)
{
    if (is_empty(s))
    {
        fprintf(stderr, "스택공백에러\n");
        exit(1);
    }
    else return s->stack[(s->top)--]; // 맨위에꺼 뽑아서 삭제
}

element peek(StackType* s)
{
    if (is_empty(s))
    {
        fprintf(stderr, "스택공백에러\n");
        exit(1);
    }
    else return s->stack[s->top]; // 맨위에꺼 뽑아서 확인만 하고 삭제 안함
}

댓글

이 블로그의 인기 게시물

IIKH Class from Timothy Budd's introduction to OOP

Compiler 9 - Efficient Code generation

Software Engineering 10 - V&V, SOLID principle