반응형
//접근자 함수 #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); }; 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; } int main() { Stack s1; s1.Initialize(5); while (s1.Push(rand() % 100)); int data; cout << "스택의 저장된 데이터: "; for (int i = 0; i <= s1.GetTop(); i++) { s1.GetData(i, data); cout << data << " "; } cout << "\n"; s1.SetSize(10); cout << "스택의 크기: " << s1.GetSize() << "\n"; cout << "스택의 탑: " << s1.GetTop() << "\n"; s1.RemoveAll(); return 0; }
<결과>
2016/11/27 - [C++] - C++ 소스코드: 스택 분할 구현 예제(헤더, 소스, 메인 파일)
2016/11/27 - [C++] - C++ 소스코드: 스택 구현 예제
2016/11/27 - [C++] - C++ 소스코드: 전역, 지역, 동적으로 할당된 객체
#C++ #C++ 소스코드 #접근자 함수를 이용한 스택 구현 예제 #실습 예제
반응형
'C++' 카테고리의 다른 글
C++ 소스코드: This 포인터 사용 예제 (0) | 2016.11.28 |
---|---|
C++ 소스코드: 프렌드 함수를 이용한 스택 구현 예제 (0) | 2016.11.27 |
C++ 소스코드: 스택 분할 구현 예제(헤더, 소스, 메인 파일) (0) | 2016.11.27 |
C++ 소스코드: 스택 구현 예제 (0) | 2016.11.27 |
C++ 소스코드: 전역, 지역, 동적으로 할당된 객체 (0) | 2016.11.27 |