336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
큐(queue)란?
가장 처음에 삽입한 데이터가 가장 처음 꺼낼 수 있는 자료구조.
아래는 동적할당으로 구현하는 방법으로 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 | #include<cstdio> class queue { private: struct node { int data; node* after; node() { after = NULL; } node(int input): data(input){ after = NULL; } }; node* pfront; node* pend; int element; public: queue() { pfront = pend = NULL; } ~queue() { while (!empty()) { pop(); } } void push(int input) { node* new_node = new node(input); if (empty()) { pfront = pend = new_node; } else { pend->after = new_node; pend = new_node; } printf("push data %d\n", input); } bool pop() { if (empty()) return false; node* del_node = pfront; pfront = pfront->after; printf("pop data %d\n", del_node->data); delete del_node; if (pfront == NULL) pend = NULL; return true; } bool empty() { if (pfront == NULL && pend == NULL) return true; return false; } int front() { if (empty()) return -1; return pfront->data; } }; int main() { queue* Q = new queue(); for (int i = 1; i < 20; i++) { Q->push(3 * i + 1); printf("front %d\n", Q->front()); } while (!Q->empty()) { Q->pop(); } printf("empty Queue\n"); for (int i = 1; i < 20; i++) { Q->push(3 * i + 1); printf("front %d\n", Q->front()); } delete Q; return 0; } | cs |
큐의 크기를 1<<18 만큼 정해두고 작성한 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | template<class T> struct my_queue { T d[1 << 18]; int s, e; my_queue() { s = e = 0; } bool full() { return (e + 1) == s; } bool empty() { return s == e; } void push(T input) { if (full()) return; T[e++] = input; e %= (1 << 18); } void pop() { if (empty()) return; s = (s + 1) % (1 << 18); } T front() { T ret; if (empty()) return ret; return d[s]; } }; | cs |