隊列 | 隊列的實現

描述

隊列是一種線性存儲結構。隊列中的數據是按照先進先出方式進出隊列的。隊列只允許在隊首進行刪除操作(出隊),而在隊尾進行插入操作(入隊)。

順序隊列(C++)

#include<iostream>
 
using namespace std;
 
template<class T>
class ArrayQueue{
	public:
		ArrayQueue();
		ArrayQueue(int size);
		~ArrayQueue();
		
		T front();//返回隊首元素
		bool push(T e);//入隊
		bool pop();//出隊 
		bool empty();//返回隊列是否爲空 
		int size();//返回隊列中的元素個數 
	
	private:
		T *arr;
		int count;//隊列中元素的個數
		int capacity;//隊列的容量 
};
 
//構造函數 
template<class T>
ArrayQueue<T>::ArrayQueue(int size)
{
	count=0;
	capacity=size;
	arr=new T[capacity];
	if(!arr)
	{
		cout<<"動態內存分配失敗!"<<endl;
	}
}
 
template<class T>
ArrayQueue<T>::ArrayQueue()
{
	new (this)ArrayQueue(30);
}
 
//構造函數
template<class T>
ArrayQueue<T>::~ArrayQueue()
{
	count=capacity=0;
	if(!arr)
	{
		delete[] arr;
		arr=NULL;
	}
}
 
//返回隊首元素
template<class T>
T ArrayQueue<T>::front()
{
	return arr[0];
}
 
 
//入隊
template<class T>
bool ArrayQueue<T>::push(T e)
{
	//隊列已滿,入隊失敗,返回false 
	if(count>=capacity)
	 return false;
	arr[count++]=e;
	return true;
} 
 
//出隊
template<class T>
bool ArrayQueue<T>::pop()
{
	//隊列爲空,出隊失敗,返回false 
	if(count<0)
	  return false;
	for(int i=0;i<count;i++)
	  arr[i]=arr[i+1];
	count--;
	return true;
}
 
//返回隊列是否爲空 
template<class T>
bool ArrayQueue<T>::empty()
{
	return count==0;
}
 
//返回隊列中的元素個數 
template<class T>
int ArrayQueue<T>::size()
{
	return count;
}
 
int main()
{
	ArrayQueue<int> *queue=new ArrayQueue<int>();
	//入隊操作
	cout<<"入隊 5 7 4"<<endl;
	queue->push(5);
	queue->push(7);
	queue->push(4);
	while(!queue->empty())
	{
		cout<<"隊列中元素個數爲"<<queue->size()<<endl; 
		int front=queue->front();
		queue->pop();
		cout<<"刪除隊首元素"<<front<<endl;
	}
	if(queue->empty())
	  cout<<"隊列爲空!"<<endl; 
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章