본문 바로가기
C++

C++ 소스코드: 스택 구현 예제

by 드린 2016. 11. 27.

목차

    반응형
    #include<iostream>
    using namespace std;
    
    class Stack {
    public:
        int m_size;
        int m_top;
        int *m_buffer;
    
        void Initialize(int size = 10);
        void RemoveAll();
        bool Push(int value);
        bool Pop(int& value);
    };
    
    void Stack::Initialize(int size) {//스택 생성
        m_size = size;
        m_top = -1;
        m_buffer = new int[m_size];
        memset(m_buffer, 0, sizeof(int)*m_size);
    }
    
    void Stack::RemoveAll() {//스택 초기화, 삭제
        m_size = 0;
        m_top = -1;
        delete[] m_buffer;
        m_buffer = NULL;
    }
    
    bool Stack::Push(int value) {
        if (m_top >= m_size - 1)    return false;//오버플로우 발생시 거짓 리턴
        m_buffer[++m_top] = value;
        return true;
    }
    
    bool Stack::Pop(int& value) {
        if (m_top < 0)  return false;//언더플로우 발생시 거짓 리턴
        value = m_buffer[m_top--];
        return true;
    }
    
    int main() {
        Stack s1, s2;
    
        s1.Initialize(5);
        s2.Initialize();
    
        while (s1.Push(rand() % 100));
        cout << "s1에 저장된 데이터: ";
        for(int i = 0; i < s1.m_size; i++)
            cout << s1.m_buffer[i] << " ";
        cout << "\n";
    
        cout << "s1에서 꺼낸 데이터: ";
        int data;
        while (s1.Pop(data))
            cout << data << " ";
        cout << "\n";
    
        while (s2.Push(rand() % 100));
        cout << "s2에 저장된 데이터: ";
        for (int i = 0; i < s2.m_size; i++)
            cout << s2.m_buffer[i] << " ";
        cout << "\n";
    
        cout << "s2에서 꺼낸 데이터";
        while (s2.Pop(data))
            cout << data << " ";
        cout << "\n";
    
        s1.RemoveAll();
        s2.RemoveAll();
    
        return 0;
    }
    

    <결과>

    2016/11/27 - [C++] - C++ 소스코드: 전역, 지역, 동적으로 할당된 객체

    2016/11/26 - [C++] - C++ 소스코드: 네임스페이스 정의 예제

    2016/11/26 - [C++] - C++ 소스코드: 여러개의 파라미터를 갖는 함수 템플릿 예제

    #C++ #C++ 소스코드 #스택 구현 예제 #실습 예제

    반응형