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
#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
#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
#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
감사합니다.

댓글
댓글 쓰기