-
[자료구조] Circular ListsComputer Science 2022. 5. 23. 15:09
Circular list
The link field of the last node points to the first node
마지막 노드의 link 부분이 첫번째 노드를 가르킨다.
#include <iostream> using namespace std; template <class T> struct ChainNode { T data; ChainNode* link; ChainNode() : data(0), link(NULL) {} ChainNode(T _data) : data(_data), link(NULL) {} }; template <class T> class CircularList { private: ChainNode<T> *first = NULL; ChainNode<T> *av = NULL; public: CircularList() { first = new ChainNode<T>; first->link = first; } void insertFront(const T& e){ ChainNode<T> *newNode = GetNode(); newNode->data = e; newNode->link = first->link; first->link = newNode; } ChainNode<T>* GetNode(){ ChainNode<T>* x; if(av) { x=av; av=av->link; printf("av\n"); } else { x = new ChainNode<T>; printf("not av\n"); } return x; } void InsertRear(const T &item) { ChainNode<T> *newNode = new ChainNode<T>(item); ChainNode<T> *cur = first->link; while (cur->link != first) { cur = cur->link; } cur->link = newNode; newNode->link = first; } void RetNode(ChainNode<T>*& x) { x->link=av; av=x; x=0; } void Delete(int idx) { ChainNode<T> *curr = first->link; if (idx < 1) cout << "1 이상의 숫자를 입력하셔야합니다" << endl; else if(idx==1) first->link = curr->link; else { int count = 1; ChainNode<T> *del = first->link; while (count < idx) { del = del->link; count++; } curr = del->link; del->link = curr->link; } RetNode(curr); } void print() { ChainNode<T> *cur; for (cur = first->link; cur != first; cur = cur->link) { cout << cur->data; if (cur->link != first) cout << "->"; else cout << " "; } cout << endl; } }; int main() { CircularList<int> list; list.insertFront(10); list.print(); list.insertFront(20); list.print(); list.Delete(1); list.print(); list.insertFront(30); list.print(); list.InsertRear(40); list.print(); }
'Computer Science' 카테고리의 다른 글
[OS] System Call Handling (2) 2024.04.10 [자료구조] Binary Tree (0) 2022.05.24 [자료구조] 체인 (0) 2022.05.17