Stack 자료구조 직접 구현하기
개요
안녕하세요.
C++ 자료구조 (Data Structure)의 가장 기본인 Stack 을 구현한
예제입니다.
-
마지막에 들어간 값이 먼저 나오는 LIFO (Last In First Out) 구조.
- 배열 (Array) 로 구성
- Push, Pop 이 일어날 때 배열의 값이동(X), 인덱스 (top) 이동(O)
-
생성자에서 동적할당하는 클래스는 복사생성자, 대입연산자를 따로 정의
(Queue 예제를 참조하여 Do it yourself. 아래 예제에서 생략)
개발 환경
- C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit
- Windows 11 Pro
stack.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #ifndef STACK_H #define STACK_H const int MAX = 5; class Stack { public : Stack( int _size=MAX); ~Stack(); public : void push( int v); int pop(); void print(); inline int length() { return size;} private : bool isFull(); bool isEmpty(); private : int top, size; int *p; }; #endif // STACK_H |
stack.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include "stack.h" #include <iostream> #include <cstring> using namespace std; Stack::Stack( int _size) : top(0), size(_size), p(nullptr) { cout << "Contructor" << '\n' ; p = new int [size]; memset (p, 0, sizeof ( int )*size); } Stack::~Stack() { cout << "Destructor" << '\n' ; if (p) { delete [] p; p = nullptr; } } void Stack::print() { for ( int i=0; i<size; i++) { cout << p[i] << ' ' ; } cout << '\n' ; } void Stack::push( int v) { if (!isFull()) p[top++] = v; else cout << "Stack is full" << '\n' ; } int Stack::pop() { if (isEmpty()) { cout << "Stack is empty" << '\n' ; return -1; } return p[--top]; } bool Stack::isFull() { return (top>=size) ? true : false ; } bool Stack::isEmpty() { return (top<=0) ? true : false ; } |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include "stack.h" using namespace std; int main() { Stack s; // push for ( int i=0; i<5; i++) s.push(i); s.print(); // pop for ( int i=0; i<5; i++) cout << s.pop() << ' ' ; cout << '\n' ; return 0; } |
output
감사합니다.
댓글
댓글 쓰기