본문 바로가기
C++

C++ 소스코드: 프렌드 함수를 이용한 스택 구현 예제

by 드린 2016. 11. 27.

목차

    반응형
    //프렌드 함수
    #include<iostream>
    #include<string.h>
    using namespace std;
    
    class Stack {
    protected:
        int m_size;
        int m_top;
        int *m_buffer;
    
    public:
        void Initialize(int size = 10);
        void RemoveAll();
        bool Push(int value);
        bool Pop(int& value);
    
        int GetSize();
        int GetTop();
        bool SetSize(int size);
        bool GetData(int index, int& data);
    
        friend void ShowData(const Stack& s);   //프렌드 함수
    };
    
    
    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 Stack::GetSize() {
        return m_size;
    }
    
    int Stack::GetTop() {
        return m_top;
    }
    
    bool Stack::SetSize(int size) {
        if (size < m_size)  return false;
        int* tmp = m_buffer;
        m_size = size;
        m_buffer = new int[m_size];
        memcpy(m_buffer, tmp, sizeof(int)*(m_top + 1));
        delete[] tmp;
        return true;
    }
    
    bool Stack::GetData(int index, int& data) {
        if (index<0 || index>m_top) return false;
        data = m_buffer[index];
        return true;
    }
    
    void ShowData(const Stack &s) { //프렌드 함수
        cout << "스택에 저장된 데이터: ";
        if (s.m_top == -1)
            cout << "없음\n";
        else
        {
            for (int i = 0; i <= s.m_top; i++)
                cout << s.m_buffer[i] << " ";
            cout << "\n";
        }
    }
    
    int main() {
        Stack s1;
        s1.Initialize(5);
        while (s1.Push(rand() % 100));
        ShowData(s1);   //프렌드 함수
    
        int data;
        cout << "스택에서 꺼낸 데이터: ";
        while (s1.Pop(data))
            cout << data << " ";
        cout << "\n";
    
        s1.RemoveAll();
    
        return 0;
    }
    
    

    <결과>

    2016/11/27 - [C++] - C++ 소스코드: 접근자 함수를 이용한 스택 구현 예제

    2016/11/27 - [C++] - C++ 소스코드: 스택 분할 구현 예제(헤더, 소스, 메인 파일)

    2016/11/27 - [C++] - C++ 소스코드: 스택 구현 예제

    #C++ #C++ 소스코드 #프렌드 함수를 이용한 스택 구현 예제 #실습 예제

    반응형