VioletaBabel
원형 큐 (c/c++) 본문
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #include<cstdio> using namespace std; struct node { node* prev; node* next; int value; }; class CircleList { private: node head; public: void Add(int i); void Remove(int i); void LinkNewNode(node *t, node *newer, node *h); void ShowAllNumber(); CircleList(); int count; }; void CircleList::Add(int i) { node *newer = new node; if (count > 0) { LinkNewNode(head.next->prev, newer, head.next); newer->value = i; } else { head.next = newer; head.prev = newer; newer->prev = newer; newer->next = newer; newer->value = i; } ++count; } void CircleList::Remove(int i) {//i와 동일한 밸류를 처음 찾으면, 그 애를 삭제 node *cursor = head.next; if (count > 1) { do { if (cursor->value == i) { node *n = cursor->next; node *p = cursor->prev; p->next = n; n->prev = p; if (head.next == cursor) { head.next = n; head.prev = n; } delete cursor; --count; break; } cursor = cursor->next; } while (cursor != head.next); } else if (count > 0) { cursor = head.next; if (cursor->value == i) { head.next = &head; head.prev = &head; delete cursor; --count; } } } void CircleList::LinkNewNode(node *t, node *newer, node *h) { (*newer).prev = t; (*newer).next = h; (*t).next = newer; (*h).prev = newer; } void CircleList::ShowAllNumber() { printf("count : %d\n", count); if (count > 0) { node* cursor; cursor = head.next; do { printf("%d %d %d\n", cursor->prev->value, cursor->value, cursor->next->value); cursor = cursor->next; } while (cursor != head.next); } } CircleList::CircleList() { head.prev = &head; head.next = &head; head.value = 0; count = 0; } | cs |
'알고리즘' 카테고리의 다른 글
플로이드-와샬 알고리즘 (0) | 2017.06.23 |
---|---|
세그먼트 트리 (0) | 2017.06.19 |
최대공약수, 최소공배수 (0) | 2017.05.28 |
[C++/함수]에라토스테네스의 체 (0) | 2017.05.28 |
단순한 이진트리 코드 (0) | 2017.04.29 |
Comments