반응형
//프렌드 함수 #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++ 소스코드 #프렌드 함수를 이용한 스택 구현 예제 #실습 예제
반응형
'C++' 카테고리의 다른 글
C++ 소스코드: This 포인터의 활용 예제 (0) | 2016.11.28 |
---|---|
C++ 소스코드: This 포인터 사용 예제 (0) | 2016.11.28 |
C++ 소스코드: 접근자 함수를 이용한 스택 구현 예제 (0) | 2016.11.27 |
C++ 소스코드: 스택 분할 구현 예제(헤더, 소스, 메인 파일) (0) | 2016.11.27 |
C++ 소스코드: 스택 구현 예제 (0) | 2016.11.27 |