StackToQueue
生活随笔
收集整理的這篇文章主要介紹了
StackToQueue
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 使用棧實現隊列
- 1.1 問題分析
- 1.2 解決方案設計
- 1.3 實現思路
- 1.4 代碼實現
- 1.5 分析
1 使用棧實現隊列
1.1 問題分析
用棧實現隊列等價于用“后進先出”的特性實現“先進先出”的特性。
1.2 解決方案設計
1.3 實現思路
1.4 代碼實現
StackToQueue.h:
#ifndef STACKTOQUEUE_H #define STACKTOQUEUE_H#include "LinkStack.h" #include "Queue.h"namespace LemonLib { template <typename T> class StackToQueue : public Queue<T> { protected:mutable LinkStack<T> m_stack_in;mutable LinkStack<T> m_stack_out;void move() const{if (m_stack_out.size() == 0){while (m_stack_in.size() > 0){m_stack_out.push(m_stack_in.top());m_stack_in.pop();}}}public:void add(const T& e){m_stack_in.push(e);}void remove(){move();if (m_stack_out.size() > 0){m_stack_out.pop();}else{THROW_EXCEPTION(InvalidOperationException, "stack to queue remove error, queue is empty");}}T front() const{move();if (m_stack_out.size() > 0){return m_stack_out.top();}else{THROW_EXCEPTION(InvalidOperationException, "stack to queue front error, queue is empty");}}void clear(){m_stack_in.clear();m_stack_out.clear();}int size() const{return m_stack_in.size() + m_stack_out.size();} }; }#endif // STACKTOQUEUE_H1.5 分析
使用的棧實現隊列的方式時間復雜度出現了很多個O(n),所以無實際工程意義。
總結
以上是生活随笔為你收集整理的StackToQueue的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么关闭U盘扫描并修复功能 关闭U盘扫描
- 下一篇: QueueToStack