算法导论2nd 10.1-7
生活随笔
收集整理的這篇文章主要介紹了
算法导论2nd 10.1-7
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
思路:兩個隊列q1和q2,兩個隊列指針pusher和poper分別指向q1和q2,push時調用pusher->enqueue,然后將poper里的元素全部dequeue并enqueue到pusher,最后交換pusher和poper。
#include <iostream>class Queue {int *array;int head, tail, size;Queue(Queue &&q) = delete;Queue(const Queue &q) = delete;Queue &operator=(const Queue &q) = delete;public:Queue(int n){size = n + 1;array = new int [size];head = 0;tail = 0;}~Queue(){if (array){delete [] array;array = NULL;size = -1;head = -1;tail = -1;}}bool enqueue(int x){if (full())return false;array[tail++] = x;if (tail >= size)tail = 0;return true;}bool dequeue(int &res){if (empty())return false;res = array[head++];if (head >= size)head = 0;return true;}bool empty(){return head == tail;}bool full(){return (tail + 1) % size == head;} };class Stack {Queue q1, q2, *pusher, *poper;int size;public:Stack(int n) : q1(n), q2(n){pusher = &q1;poper = &q2;}bool push(int x){if (poper->full())return false;pusher->enqueue(x);while (poper->dequeue(x))pusher->enqueue(x);Queue *tmp = pusher;pusher = poper;poper = tmp;return true;}bool pop(int &res){return poper->dequeue(res);} };int main() {int t;Queue queue(4);queue.enqueue(1);queue.dequeue(t);queue.enqueue(2);queue.dequeue(t);queue.enqueue(3);queue.enqueue(4);queue.enqueue(5);queue.enqueue(6);queue.enqueue(7);while (queue.dequeue(t))std::cout << t << std::endl;queue.enqueue(8);queue.enqueue(9);queue.enqueue(10);queue.enqueue(11);queue.enqueue(12);while (queue.dequeue(t))std::cout << t << std::endl;Stack stack(4);stack.push(1);stack.push(2);stack.push(3);stack.push(4);stack.push(5);while(stack.pop(t))std::cout << t << std::endl;return 0; }?
轉載于:https://my.oschina.net/guzhou/blog/3049506
總結
以上是生活随笔為你收集整理的算法导论2nd 10.1-7的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【肥朝】看源码,我为什么推荐IDEA?
- 下一篇: oracle监听启动很慢