on
C++ / 연결 리스트
C++ / 연결 리스트
#pragma once // 노드 구조체 템플릿 template struct Node { T data; Node* prevNode; // 이전 노드의 주소 Node* nextNode; // 다음 노드의 주소 Node() : data() , prevNode(nullptr) , nextNode(nullptr) { } Node(const T& data, Node* prevNode, Node* nextNode) : data(data) , prevNode(prevNode) , nextNode(nextNode) { } }; // 리스트 클래스 템플릿 template class LinkedList { private: Node* headNode; // 연결 리스트의 맨 앞의 노드 Node* tailNode; // 연결 리스트의 맨 뒤의 노드 int dataCount; // 연결 리스트에 저장된 데이터의 개수 public: void push_back(const T& data); void push_front(const T& data); public: LinkedList(); ~LinkedList(); }; // 연결 리스트 초기화 template LinkedList::LinkedList() : headNode(nullptr) , tailNode(nullptr) , dataCount(0) { } // 동적 할당 메모리 해제 template LinkedList::~LinkedList() { Node* deleteNode = headNode; while (deleteNode) { Node* nextNode = deleteNode->nextNode; delete deleteNode; deleteNode = nextNode; } } // 연결 리스트 뒤에 데이터 추가 template void LinkedList::push_back(const T& data) { // 새로운 노드 생성 Node* newNode = new Node(data, tailNode, nullptr); if (nullptr == headNode) // 연결 리스트에 아무런 데이터가 저장되어 있지 않은 경우 { headNode = newNode; tailNode = newNode; } else { tailNode->nextNode = newNode; tailNode = newNode; } ++dataCount; } // 연결 리스트 앞에 데이터 추가 template void LinkedList::push_front(const T& data) { Node* newNode = new Node(data, nullptr, headNode); headNode->prevNode = newNode; headNode = newNode; ++dataCount; }
공유하기 글 요소 저작자표시
from http://daegwonkim.tistory.com/30 by ccl(A) rewrite - 2021-10-24 21:26:47