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 | 29 | 30 | 31 |
Tags
- UE_LOG
- 델리게이트
- stl
- 람다사용정렬
- BFS
- dataasset
- 애셋로드
- 알고리즘
- map
- UELOG
- 크리티컬섹션
- 프로그래머스
- 스마트포인터
- 자료구조
- C++최적화
- unorder_map
- 약참조
- 정렬
- moreeffectiveC++
- 람다
- UML관련
- 데이터애셋
- 선택정렬
- C++
- enumasByue
- 언리얼엔진구조체
- 언리얼가비지컬렉터
- 강참조
- 정렬알고리즘
- UE4 커스텀로그
Archives
- Today
- Total
기억을 위한 기록들
[자료구조] 큐(Queue)/ 템플릿 / C++ 본문
큐(Queue 클래스)에서 관리하는 데이터는 Node 클래스로 구성되어있다.
작성된건 링크드 큐이기도 한데, 순환큐도 있다.
순환큐는 배열에서 사용되서 new와 같은 연산이 없고, 고정배열이라 빠르나, 사이즈 제한이 있다.
어느정도 정해진 수만큼의 큐를 만든다면 순환큐도 좋다.
template <typename T>
class Node {
public:
T mdata; //노드 값 변수
Node* NextNode; //해당 노드의 다음 노드
Node(T _data)
:mdata(_data) {};
~Node() {};
};
template <typename T> class Queue {
public:
Queue() :
mhead(nullptr), mtail(nullptr) {}; //기본값 초기화
~Queue() {};
void Enqueue(T _NewData);
T Dequeue();
bool IsEmpty();
T Check() const; //현재 뽑히는 값 확인
private:
Node<T>* mhead; //앞쪽 노드
Node<T>* mtail; //뒤쪽 노드
};
template <typename T>
T Queue<T>::Check() const
{
return mhead->mdata; //현재 head value값 확인
}
template<typename T>
void Queue<T>::Enqueue(const T& _NewData)
{
Node<T>* newNode = new Node<T>(_NewData);
if (IsEmpty() == true ) //헤드가 비었다면,
{
mhead = newNode;
mtail = newNode;
}
else
{
mtail->NextNode = newNode; //꼬리노드의 다음 = 추가 된 노드
mtail = newNode; //꼬리노드 = 추가된 노드
}
}//end of Add
template<typename T>
T Queue<T>::Dequeue()
{
if (IsEmpty()) //노드가 비어 있다면
return -1;
T curData = mhead->mdata; //헤드데이터 값
mhead = mhead->NextNode; //헤드노드 변경
return curData; //뽑은 값 출력
}//end of Remove
template<typename T> bool Queue<T>::IsEmpty()
{
return mhead == nullptr; //비었는지 확인
}
#include <iostream>
using namespace std;
int main() {
Queue<int> queue;
cout << queue.Dequeue() << endl;
queue.Enqueue(3);
queue.Enqueue(5);
queue.Enqueue(7);
queue.Enqueue(9);
queue.Enqueue(12);
cout << queue.Dequeue() << endl;
cout << queue.Dequeue() << endl;
cout << "다음으로 나오는 값은 : " << queue.Check() << "입니다." << endl;
cout << queue.Dequeue() << endl;
cout << queue.Dequeue() << endl;
cout << queue.Dequeue() << endl;
cout << queue.Dequeue() << endl;
cout << queue.Dequeue() << endl;
cout << queue.Dequeue() << 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 |
[자료구조]스택(Stack) / C++ 템플릿 (0) | 2020.08.03 |
빅오 표기법 (0) | 2020.07.14 |