Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- C++최적화
- 람다사용정렬
- 선택정렬
- 언리얼가비지컬렉터
- UE4 커스텀로그
- 애셋로드
- UE_LOG
- 프로그래머스
- UML관련
- dataasset
- UELOG
- 강참조
- 델리게이트
- map
- enumasByue
- 약참조
- stl
- unorder_map
- 스마트포인터
- 자료구조
- 언리얼엔진구조체
- 정렬
- 알고리즘
- C++
- 데이터애셋
- 정렬알고리즘
- moreeffectiveC++
- 크리티컬섹션
- 람다
- BFS
Archives
- Today
- Total
기억을 위한 기록들
[자료구조]스택(Stack) / C++ 템플릿 본문
이번엔 스택이다.
스택 쌓자
스택 클래스와 해당 스택에 쌓는 노드 클래스 2개의 클래스로 구성 되어 있다.
template<typename T>
class Node
{
public:
Node(T _data)
: mData(_data)
{};
~Node() {
delete mNextNode;
};
T mData; //현재 노드에 있는 데이터
Node* mNextNode; //현재 노드의 다음 노드를 가리키는 포인터
};
template<typename T>
class Stack {
public:
Stack() {};
~Stack() {};
void Push(T newItem);
T Pop();
T GetTopData();
bool IsEmpty() const;
int GetStackSize() const;
private:
Node<T> * mTopNode; //현재 가장 위에 있는 노드를 가리키는 포인터
int mStackSize = 0;
};
template<typename T>
int Stack<T>::GetStackSize() const
{
return mStackSize;
}
template<typename T>
bool Stack<T>::IsEmpty() const
{
return mTopNode == nullptr; //top(제일 위에 있는 노드)이 null인지 여부
}
template<typename T>
T Stack<T>::GetTopData()
{
if (IsEmpty()) //비어 있지 않으면
{
return -1; //-1반환
}
return mTopNode->mData; //현재 top의 데이터를 반환한다.
}//end of Check
template<typename T>
void Stack<T>::Push(T _NewValue)
{
Node<T> * newNode = new Node<T>(_NewValue); //추가 될 새로운 노드를 생성한다.
newNode->mNextNode = mTopNode; //생성된 노드의 다음노드 = 현재 탑노드
mTopNode = newNode; //탑 노드 갱신
mStackSize++;
}//end of push
template<typename T>
T Stack<T>::Pop()
{
if (IsEmpty()) //꺼낼노드 없으면 -1반환
return -1;
T beforeTopNode = mTopNode->mData; //가장 위 데이터 값 저장
mTopNode = mTopNode->mNextNode; // 탑노드= 다음 노드
mStackSize--;
return beforeTopNode; //가장 위 데이터 값 반환
}//end of pop
#include <iostream>
using namespace std;
int main() {
Stack<int> s;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
int size = s.GetStackSize();
for (int i = 0; i < size; i++)
cout << "꺼낸숫자 : " << s.Pop() << endl;
return 0;
}//end of main
'자 & 알 > 자료구조' 카테고리의 다른 글
[자료구조] 힙(Heap) 특징 (0) | 2021.01.03 |
---|---|
[자료구조]연결리스트-양방향 DLL(DoublyLinkedList) / 템플릿 /C++ (0) | 2020.12.25 |
[자료구조]연결리스트 SLL(SinglyLinkedList) / 템플릿 /C++ (0) | 2020.12.20 |
[자료구조] 큐(Queue)/ 템플릿 / C++ (0) | 2020.07.30 |
빅오 표기법 (0) | 2020.07.14 |