C++实现循环队列之顺序存储
2015-07-06 10:30
1001 查看
#include <iostream> #include <string> using namespace std; const int QueueSize = 100; template<typename T> class CircleQueue{ public: CircleQueue(){ front = rear = QueueSize - 1; } //构造函数 CircleQueue(T a[],int n); ~CircleQueue(){ } //析构 void InputQue(T x); T OutputQue(); T GetQueue(); string Empty(); void Print(); private: T data[QueueSize]; int front, rear; }; template<typename T> CircleQueue<T>::CircleQueue(T a[], int n) //构造函数初始化队列 { front = rear = QueueSize - 1; if (n <=QueueSize){ for (int i = 0; i < n; ++i) { rear = (rear + 1) % QueueSize; data[rear] = a[i]; } } } template<typename T> void CircleQueue<T>::InputQue(T x) //入队,队尾插入 { if (rear == front) //是否队满 throw "下溢"; rear = (rear + 1) % QueueSize; data[rear] = x; } template<typename T> T CircleQueue<T>::OutputQue() //出队 { if (rear == front) throw "下溢"; //是否队空 front = (front + 1) % QueueSize; return data[front]; } template<typename T> T CircleQueue<T>::GetQueue() { if (rear == front) throw "下溢"; int i = (front + 1) % QueueSize; return data[i]; } template<typename T> void CircleQueue<T>::Print() //遍历输出 { int p = front; while ((p + 1) % QueueSize != rear) { p = (p + 1) % QueueSize; cout << data[p] << " "; } p = (p + 1) % QueueSize; cout << data[p] << " " << endl; } int _tmain(int argc, _TCHAR* argv[]) { int a[] = { 1, 2, 3, 4, 5, 6 }; CircleQueue<int> A(a, 6); A.Print(); A.InputQue(7); A.Print(); cout<< A.GetQueue() <<endl; A.Print(); return 0; }
相关文章推荐
- QTC++ widget中使用QML编写的UI界面
- C++重载operator = 和初始化 =
- C++编译问题-检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式
- VS2008切换环境(c#,c++,other)
- 【C++】栈空栈满异常处理
- chapter16test2
- C++拷贝构造函数详解
- ubuntu下用Eclipse完成C语言编程练习
- C++的深拷贝与浅拷贝
- 跳跃表(Skip List)的实现及测试 C++实现
- chapter16test1
- C++中关于输入输出流中c_str
- 黑马程序员——C语言之选择排序、折半查找法与二维数组
- C++ Virtual详解
- 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
- 八大排序算法的C++实现
- C++类型转换关键字 *_cast<type> (expression)
- C++类的所占空间
- C++11中std:bind()与SOCKET bind()冲突问题
- Heat