欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

环形队列的实现

发布时间:2025/6/15 编程问答 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 环形队列的实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

vs2013下编写的项目工程见 我的 github: https://github.com/excelentone/DataStruct
CircleQueue.h

#include<iostream> using namespace std; template<class T> class Queue { public:Queue(size_t size = 0) :_capacity(size),_head(0),_rear(0),_pBuf(new T[size]),_QueueLen(0){}Queue(const Queue &q){_pBuf = new T[q._capacity];for (size_t i = 0; i < q._capacity; i++){_pBuf[i] = q._pBuf[i];}_capacity = q._capacity;_QueueLen = q._QueueLen;_rear = q._rear;_head = q._head;}Queue &operator=(const Queue &q){if (this != &q){delete[]_pBuf;_pBuf = new T[q._capacity];for (size_t i = 0; i < q._capacity; i++){_pBuf[i] = q._pBuf[i];}_QueueLen = q._QueueLen;_capacity = q._capacity;_rear = q._rear;_head = q._head;}return *this;}bool QueueFull(){return _QueueLen == _capacity;}void Enqueue(const T data){if (!QueueFull()){_pBuf[_rear] = data;_rear = (_rear + 1) % _capacity;_QueueLen++;}else{cout << "¶ÓÁÐÒÑÂú" << endl;}}bool QueueEmpty(){return _QueueLen == 0;}void Dequeue(){if (!QueueEmpty()){_head = (_head + 1) % _capacity;_QueueLen--;}}friend ostream& operator<<(ostream &os, const Queue &q){for (size_t i = q._head; i < q._head + q._QueueLen; i++){os << q._pBuf[i%q._capacity] << " ";}return os;}~Queue(){if (NULL != _pBuf){delete[]_pBuf;}} private:T *_pBuf;size_t _capacity;size_t _QueueLen;size_t _head;size_t _rear; };

test.cpp

#include"circleQueue.h"void test() {Queue<int> *p = new Queue<int>(4);p->Enqueue(5);p->Enqueue(6);p->Enqueue(7);p->Enqueue(8);p->Enqueue(9);cout << *p << endl;Queue<int> a(10);a.Enqueue(1);a.Enqueue(2);a.Enqueue(3);a.Enqueue(4);cout << a << endl;Queue<int> b(a);cout << b << endl;Queue<int> c(3);c = a;cout << c << endl; } int main() {test();system("pause"); }

转载于:https://www.cnblogs.com/readlearn/p/10806461.html

总结

以上是生活随笔为你收集整理的环形队列的实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。