Minwoo Dev.

[자료구조] 배열 기반 스택 (Stack) 구현 - C 본문

자료구조

[자료구조] 배열 기반 스택 (Stack) 구현 - C

itisminu 2024. 5. 1. 15:43
728x90
반응형
SMALL

스택(Stack)

  • 선입후출(First-in Last-out)의 구조이다.
  • 자료들이 계속해서 겹겹이 쌓이는 형태를 나타낸다.
  • 상단의 위치를 나타내는 top을 변수로 가진다.

  • top의 초기값은 -1이다.
  • top이 -1일 때 이 스택은 비어있는 스택이다. 

 

 

isEmpty()

  • top이 -1이라면 true
  • 그 외의 경우는 false
int isEmpty()
{
    if (top == -1)
        return 1;
    else
        return 0;
}

 

 

isFull()

  • top이 (스택 크기-1)이면 true를 반환
  • 그 외의 경우는 false
int isFull()
{
    if (top == STACK_SIZE - 1)
        return 1;
    else
        return 0;
}

 

 

Push(int val) 

  • val을 스택에 삽입하는 함수
  • isFull()을 사용하여 가득 차있는지 확인
  • 스택이 가득 차있다면 삽입 불가
  • 가득 차있지 않다면 top의 값을 1 증가시킨 후 stack의 top번째 인덱스에 값 삽입
void Push(int val)
{
    if (isFull())
    {
        printf("스택이 꽉 찼습니다.\n");
        return;
    }
    top = top + 1;
    stacks[top] = val;
}

 

 

Pop()

  • 스택에 있는 값을 삭제하는 함수
  • isEmpty()를 사용하여 빈 스택인지 확인
  • 스택이 비어있다면 삭제 불가
  • 비어있지 않다면 stack[top] 의 데이터 반환 후 top--
int Pop()
{
    if (isEmpty())
    {
        printf("출력할 값이 없습니다.\n");
        return -1;
    }
    int item = stacks[top];
    top = top - 1;
    return item;
}

 

 

전체 코드와 함께 실행 결과를 첨부하겠다.

 

전체 코드

#include <stdio.h>
#define STACK_SIZE 7
int top = -1;

int stacks[STACK_SIZE];

int isEmpty()
{
    if (top == -1)
        return 1;
    else
        return 0;
}

int isFull()
{
    if (top == STACK_SIZE - 1)
        return 1;
    else
        return 0;
}

void Push(int val)
{
    if (isFull())
    {
        printf("스택이 꽉 찼습니다.\n");
        return;
    }
    top = top + 1;
    stacks[top] = val;
}

int Pop()
{
    if (isEmpty())
    {
        printf("출력할 값이 없습니다.\n");
        return -1;
    }
    int item = stacks[top];
    top = top - 1;
    return item;
}

void printArray()
{
    for (int i = 0; i < top + 1; i++)
    {
        printf("%d\t", stacks[i]);
    }
    printf("\n");
}

int main(void)
{
    Push(1);
    Push(2);
    Push(3);
    Push(4);
    Push(5);

    printArray();

    printf("Pop : %d\n", Pop());
    printf("Pop : %d\n", Pop());
    printArray();
}

 

 

실행 결과

728x90
반응형
LIST