개인적으로는 책에 구현법이 나와있지않아서 조금 재미있었던 자료구조다.

역시 그림으로 그려서 이해하는게 편한다.


원형 링크드리스트는 제일 나중에 삽입한 노드가 처음 삽입한 노드를 가르키는 구조를 계속 유지하게끔 back을 관리해야 한다.



class CircleLinkedList

{

private:

SNode* back{};


public:

bool isEmpty() { return back == nullptr; }


SNode* begin() { return back; }


void push_back(int data)

{

SNode* newNode = new SNode(data);

newNode->_next = newNode;


if (back)

{

newNode->_next = back->_next;

back->_next = newNode;

}

back = newNode;

}


void pop_front()

{

if (!back->_next) return;

if (back->_next == back)

{

delete back;

back = nullptr;

return;

}

SNode* temp = back->_next;

back->_next = back->_next->_next;

delete temp;


}


SNode* next(SNode* point)

{

return point->_next;

}


SNode* advance(SNode* point, size_t times)

{

while (point && times--)

point = point->_next;


return point;

}


void clear()

{

if (!back) return;


SNode* del = back;

do

{

SNode* temp = del;

del = del->_next;

delete temp;

} while (del != back);

back = nullptr;


}

void display()

{

cout << "circle linked list : \n";

if (!back)

{

cout << "is empty now\n";

return;

}

SNode* n = back;

do

{

cout << n->_data << endl;

n = n->_next;

while (n != back);

}

};



'프로그래밍' 카테고리의 다른 글

구현 - 이진 탐색 트리  (0) 2018.03.09
구현 - 이진 트리  (0) 2018.03.08
구현 - 더블 링크드 리스트  (0) 2018.03.06
구현 - 배열기반 덱  (0) 2018.03.04
구현 - 배열기반 원형 큐  (0) 2018.03.03