336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
덱/데크/디큐(dequeue)란?
처음 삽입한 데이터 혹은 마지막에 삽입한 데이터를 꺼내거나 혹은 처음/마지막에 데이터를 삽입할 수 있는 자료구조이다.
아래는 동적할당으로 구현하는 방법으로 template을 사용하지 않고, 데이터는 int를 가진 덱 구현 코드이다.
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 | #include<cstdio> class deque { private: struct node { int data; node* prev; node* after; node() { prev = after = NULL; } node(int input) :data(input) { prev = after = NULL; } }; node* pfront; node* pend; int element; public: deque() { pfront = pend = NULL; } ~deque() { while (!empty()) { printf("Destructor : %d\n", back()); pop_back(); } } void push_front(int input) { node* new_node = new node(input); if (empty()) { pfront = pend = new_node; } else { pfront->prev = new_node; new_node->after = pfront; pfront = pfront->prev; } } void push_back(int input) { node* new_node = new node(input); if (empty()) { pfront = pend = new_node; } else { pend->after = new_node; new_node->prev = pend; pend = pend->after; } } bool pop_front() { if (empty()) return false; node* del_node = pfront; pfront = pfront->after; delete del_node; if (pfront == NULL) pend = NULL; return true; } bool pop_back() { if (empty())return false; node* del_node = pend; pend = pend->prev; delete del_node; if (pend == NULL) pfront = NULL; return true; } int front() { if (empty()) return -1; return pfront->data; } int back() { if (empty()) return -1; return pend->data; } bool empty() { if (pfront == NULL && pend == NULL) return true; return false; } }; int main() { deque* DQ = new deque(); for (int i = 1; i < 5; i++) { DQ->push_front(i); } while (!DQ->empty()) { printf("%d\n", DQ->front()); DQ->pop_front(); } for (int i = 1; i < 5; i++) { DQ->push_back(-i); } while (!DQ->empty()) { printf("%d\n", DQ->back()); DQ->pop_back(); } for (int i = 1; i < 10; i++) { DQ->push_back(-i); } delete DQ; return 0; } | cs |