c++ 数据结构 循环队列
2016-12-05 15:35
531 查看
1.头文件:
# include<iostream> # include<assert.h> template <class T> class SeqQueue{ private: T* elements; //存放队列元素的数组 int rear,front; //队尾指针和对头指针 int maxSize; //队列可容纳的最大元素个数 public: SeqQueue(int sz=10); //构造函数 ~ SeqQueue(){ delete[]elements;} //析构函数 bool EnQueue(const T& x); //进队函数 bool DeQueue(T& x); //出队函数 bool getFront(T& x); //取队头元素 void makeEmpty(){front=rear=0;} //把队置空 bool isEmpty(){return (front==rear)?true:false;} //判断队空 bool isFull(){return ((rear+1)%maxSize==front)?true:false;} //判断队满 int getSize(){return (rear-front+maxSize)%maxSize;} //求队中元素个数 friend ostream& operator<<(ostream& ostr,SeqQueue<T>& Q); //输出运算符重载 };2.原文件:
# include"SeqQueue.h" # include<iostream> using namespace std; template<class T> SeqQueue<T>::SeqQueue(int sz):rear(0),front(0),maxSize(sz){ elements=new T[maxSize]; assert(elements!=NULL); //断言机制:如果不满足括号内条件将终止程序的执行 } template<class T> bool SeqQueue<T>::EnQueue(const T& x){ if(isFull()) return false; else elements[rear]=x; rear=(rear+1)%maxSize; //加一再取余是为了rear指向队列最后一个元素(下标maxSize-1),再进一下标就到了0 return true; } template<class T> bool SeqQueue<T>::DeQueue(T& x){ if(isEmpty()) return false; else x=elements[front]; front=(front+1)%maxSize; return true; } template<class T> bool SeqQueue<T>::getFront(T& x){ if(isEmpty()) return false; else x=elements[front]; return true; } template<class T> ostream& operator<<(ostream& ostr,SeqQueue<T>& Q){ ostr<<"front="<<Q.front<<" "<<"rear="<<Q.rear<<endl; for(int i=Q.front;i!=Q.rear;i=(i+1)%Q.maxSize) ostr<<i<<": "<<Q.elements[i]<<endl; return ostr; }
相关文章推荐
- AVL树及关于插入的说明
- Java数据结构和算法-栈和队列(1-前言+栈)
- 栈
- sparse matrix(稀疏矩阵)
- perl 监控数据库用到的数据结构
- perl 监控数据库用到的数据结构
- 从尾到头打印链表
- 数组旋转
- 数据结构之Trie树
- 数据结构存储,顺序和链式比较d
- 数据结构实验之查找一:二叉排序树
- 常见数据结构与算法整理总结(上)
- 使用LinkedList来模拟一个堆栈或者队列数据结构
- 数据结构整理
- 计算机图形学中的Mesh数据结构
- 数据结构八大排序算法
- 数据结构笔记--1.1.3关于算法效率 计算多项式值
- Java数据结构和算法-简单排序(4-对象排序及几种排序的比较)
- 二叉树的基本操作
- 数据结构实验之查找三:树的种类统计(先排序树再中序遍历)