C++ 개념 공부/자료구조
[C++] Stack 직접 구현
taene_
2023. 10. 22. 22:12
<Stack>
//Stack
#include <iostream>
using namespace std;
template <typename T>
class Stack
{
public:
Stack() :mTop(0), mSize(3), mArr(new T[mSize]{}) {}
~Stack() {}
void Push(T value)
{
if (mTop == mSize)
{
T* t = mArr;
T* newArr = new T[mSize * 2]{};
for (int i = 0; i < mSize; i++)
{
newArr[i] = mArr[i];
}
delete t;
t = nullptr;
mArr = newArr;
mSize = mSize * 2;
}
mArr[mTop++] = value;
}
void Pop()
{
if (mTop == 0)
return;
mArr[--mTop] = NULL;
}
int Size()
{
return mTop;
}
bool Empty()
{
if (Size() == 0)
return true;
else
return false;
}
void Print()
{
if (mTop == 0)
{
cout << "isEmpty" << '\n';
return;
}
for (int i = 0; i < mTop; i++)
cout << mArr[i] << ' ';
cout << '\n';
}
private:
int mTop;
int mSize;
T* mArr;
};
int main()
{
Stack<int> st;
st.Push(5);
st.Push(3);
st.Push(2);
st.Print(); //5 3 2
cout << st.Size() << '\n'; //3
cout << st.Empty() << '\n'; //0 (비어있지않음)
st.Push(6);
st.Pop();
st.Pop();
cout << st.Size() << '\n'; //2
st.Print(); //5 3
st.Pop();
st.Pop();
st.Print(); //isEmpty
cout << st.Size() << '\n'; //0
cout << st.Empty() << '\n'; //1 (비어있음)
st.Pop(); //return
return 0;
}