队列(顺序存储)C++模板实现

原创 2014年04月09日 16:57:39

队列:一端进行插入,另一端进行删除的线性结构,具有先进先出性。利用数组来实现队列将面临“假溢出”的情况,如下图所示:

front:永远指向队首元素,队首在本文中是允许删除元素的一端

rear:永远指向队尾元素,队尾在本文中是允许插入元素的一端


所以引出循环队列,循环队列简单来说就是当rear=n时,将rear指针修改为0。

上图可形象为下图:


#include <iostream>
using namespace std;

template <typename T>
class Queue{
	private:
		int front; //指向队列首元素
		int rear; //指向队列尾元素的下一个地址
		int maxSize; //队列最大长度
		T *data; //保存队列元素的数组空间
		int num; //队列中的元素个数
	public:
		Queue(int max=10):maxSize(max){  //构造函数,初始化队列
			front=0;   
			rear=0;
			num=0;
			data = new T[maxSize];
		}
		~Queue(){ 
			delete [] data;  //释放队列空间
		}
		void In(T x);  //向队列插入一个元素
		void Out();    //队尾元素出队
		T getFront() const;  //获得队首元素 
		int getLength() const; //当前队列元素个数
		bool isFull() const;  //判断队列是否已满
		bool isEmpty() const; //判断队列是否为空
		void printAll() const; //打印队内元素
};

template <typename T>
void Queue<T>::In(T x){  //队尾插入一个元素
	data[rear]=x;
	rear=(rear+1)%maxSize;
	num++;
}

template <typename T>
void Queue<T>::Out(){   //队首元素出队
	front=(front+1)%maxSize;
	num--;
}

template <typename T>
T Queue<T>::getFront() const{  //获得队首元素
	return data[front];
}

template <typename T>
int Queue<T>::getLength()const{ //当前队列元素个数
	return num;
}

template <typename T>
bool Queue<T>::isFull()const{  //判断队列是否已满
	return num==maxSize;
}

template <typename T>
bool Queue<T>::isEmpty()const{ //判断队列是否为空
	return num==0;
}

template <typename T>
void Queue<T>::printAll() const{
	int p = front;
	int i=1;
	while(p!=rear){
		cout<<"第"<<i<<"元素:"<<data[p]<<endl;
		i++;
		p = (p+1)%maxSize;
	}
}

void main(){
	Queue<int> *a = new Queue<int>(5);
	cout<<"队列是否为空:"<<a->isEmpty()<<endl;  //判断队列是否为空,如果返回1则为空
	a->In(1);  //队尾插入一个元素值为1
	a->In(2);	//队尾插入一个元素值为2
	a->In(3);	//队尾插入一个元素值为3
	a->In(4);	//队尾插入一个元素值为4
	a->In(5);	//队尾插入一个元素值为5
	cout<<"队列是否已满:"<<a->isFull()<<endl;  //判断队列是否已满,如果返回1则表示队列已满
	cout<<"队列元素个数:"<<a->getLength()<<endl;
	a->Out();   //队首元素出队
	cout<<"队列元素个数:"<<a->getLength()<<endl<<endl;
	a->printAll();  //打印队内元素
}

运行结果:



顺序队列模板--c++实现

//顺序队列类的实现 #include "iostream" #include "cstdio" #include "cstring" #include "algorithm" using names...
  • u014377853
  • u014377853
  • 2016年09月30日 12:04
  • 538

C++ 顺序队列与循环队列

很好理解,队列就是把数据排成队,先到的排在前面,后到的排在后面,走的时候,在前面的先出去。(不许插队!) 先是顺序队列,也就是基本的排成一队。 实现如下:#include #include u...
  • qq786556830
  • qq786556830
  • 2016年04月03日 23:24
  • 959

C++ 模板应用 实现一个Queue 队列

#include using namespace std; template class Queue { public: Queue() { Node *node=new Node(); ...
  • cq361106306
  • cq361106306
  • 2014年09月28日 13:24
  • 4753

【C++ STL模板之queue队列的用法】

--Queue用法   2010-08-17 21:13:06|  分类: STL--标准模板库|举报|字号 订阅 #include #include #i...
  • u010800530
  • u010800530
  • 2014年04月28日 22:51
  • 5335

C++ 队列queue的用法

转自:http://www.169it.com/article/2718050585107790752.html  C++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个...
  • cindywry
  • cindywry
  • 2016年07月15日 16:52
  • 27566

C++的STL中队列(queue)的使用说明

文章转载自http://www.cnblogs.com/yaoyueduzhen/p/4456430.html基本操作:push(x) 将x压入队列的末端pop() 弹出队列的第一个元素(队顶元素),...
  • u011499425
  • u011499425
  • 2016年09月18日 17:15
  • 10269

C++ stl队列Queue用法介绍:删除,插入等操作代码举例

C++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。     C++队列Queu...
  • l494926429
  • l494926429
  • 2016年07月29日 17:28
  • 10619

C++栈和队列

使用标准库的栈和队列时,先包含相关的头文件 #include #include 定义栈如下: stack stk; 定义队列如下: queue q; 栈提供了如下的操作 s.empty...
  • zhy_cheng
  • zhy_cheng
  • 2012年10月19日 16:19
  • 61686

队列的C++实现

队列的C++实现
  • mimi9919
  • mimi9919
  • 2016年04月09日 17:21
  • 1597

C++ STL 队列queue的用法

C++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。     C++队列Queu...
  • cf406061841
  • cf406061841
  • 2017年05月01日 10:36
  • 531
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:队列(顺序存储)C++模板实现
举报原因:
原因补充:

(最多只允许输入30个字)