简单循环队列(C++模版技术实现)
下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>
// // C++ 模版技术实现简单循环队列示例. // #include <cstdlib> #include <iostream> #include <iomanip> #include <stdexcept> // // 循环队列类模版. // // 由于循环队列队尾永远为空,队列物理空间应比指定队列逻辑空间大 1, // 而返回的队列大小 size 应该为逻辑大小. // // 入队/出队时当发生上/下溢将抛出异常. // template < typename T> class CircularQueue { private : T *_pQueue; size_t _front, _rear, _size; static const size_t _MAX_QUEUE_SIZE = 20; public : CircularQueue( const size_t size = _MAX_QUEUE_SIZE) : _front(0) , _rear(0) , _size(size + 1) { _pQueue = new T[_size]; } ~CircularQueue( void ) { delete [] _pQueue; } size_t getSize( void ) const { return _size - 1; } T getFront( void ) const { if (isEmpty()) { throw std::underflow_error( "队列为空 !" ); } return _pQueue[_front]; } bool isEmpty( void ) const { return _front == _rear; } bool isFull( void ) const { return (_rear + 1) % _size == _front; } void enqueue( const T &val) { if (isFull()) { throw std::overflow_error( "队满上溢 !" ); } _pQueue[_rear] = val; _rear = (_rear + 1) % _size; } T dequeue( void ) { if (isEmpty()) { throw std::underflow_error( "队空下溢 !" ); } T value = _pQueue[_front]; _front = (_front + 1) % _size; return value; } }; // // 队列测试 // int main( void ) { CircularQueue< int > queue; const size_t QUEUE_SIZE = queue.getSize(); for ( size_t i = 0; i < QUEUE_SIZE; ++i) { queue.enqueue(i); } // queue.enqueue(QUEUE_SIZE); std::cout << std::endl << "队列" << (queue.isFull() ? "" : "不" ) << "为满." << std::endl << "队列" << (queue.isEmpty() ? "" : "不" ) << "为空." << std::endl; for ( size_t i = 0; i < QUEUE_SIZE; ++i) { std::cout << std::setw(3) << queue.dequeue(); } // std::cout << std::setw(3) << queue.dequeue(); std::cout << std::endl << "队列" << (queue.isFull() ? "" : "不" ) << "为满." << std::endl << "队列" << (queue.isEmpty() ? "" : "不" ) << "为空." << std::endl; return EXIT_SUCCESS; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?