알고리즘/알고리즘+자료구조

[자료구조] 스택 구현하기 (C++)

무하지 2022. 3. 8. 18:00
반응형
문제: https://www.acmicpc.net/problem/10828
 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

스택은 데이터의 입력과 출력이 한쪽 방향으로만 이루어지기 때문에 배열을 이용해서 구현할 수 있습니다.

 

#include <iostream>
#include <string>

struct stack
{
    int arr[10000];
    int top_index = -1;

    // arr[top]을 리턴하고 top을 1 감소시킨다.
    int pop()
    {
        if (isEmpty())
            return -1;
        return arr[top_index--];
    }

    // top을 1 증가시키고 arr[top]에 저장
    void push(int n)
    {
        arr[++top_index] = n;
    }

    // top + 1 리턴
    int size()
    {
        return top_index + 1;
    }

    // top이 -1이면 1 리턴, 아니면 0 리턴
    int isEmpty()
    {
        return top_index == -1 ? 1 : 0;
    }

    // arr[top] 리턴
    int top()
    {
        if (isEmpty())
            return -1;
        return arr[top_index];
    }
};

int main()
{
    int N;
    std::string arg;
    stack myStack;
    std::cin >> N;

    while (N--)
    {
        int result;
        std::cin >> arg;
        if (arg == "push")
        {
            int num;
            std::cin >> num;
            myStack.push(num);
        }
        else if (arg == "pop")
        {
            std::cout << myStack.pop() << std::endl;
        }
        else if (arg == "size")
        {
            std::cout << myStack.size() << std::endl;
        }
        else if (arg == "empty")
        {
            std::cout << myStack.isEmpty() << std::endl;
        }
        else if (arg == "top")
        {
            std::cout << myStack.top() << std::endl;
        }
    }
}

 

 

 

반응형