顺序队列基础操作

顺序队列基础操作

环境及程序说明

/*
	环境:Dev C++   TDM-GCC 4.9.2 64-bit Profiling 
	输出大小: 1.85951137542725 MiB
    编译时间: 1.72s
    顺序队列操作(使用模板)
	包括队列的插入、删除、访问队首、清空、判断是否为空或者满 
*/

头文件

#include<iostream>
using namespace std;

顺序队列类定义

template <class T>
class AQueue{
	private:
		int front;						//队首所在数组元素下标 
		int rear;						//新元素要插入的位置 
		int count;						//队列中元素的个数 
		T *QArray;						//存放队列元素的数组 
		int size;						//存放队列元素的数组规模 
	public:
		AQueue();						//构造函数 
		~AQueue();						//析构函数 
		bool QInsert(const T & item);	//队首插入 
		bool QDlete(T & item);			//队尾删除 
		bool QFind(T & item);			//队首访问 
		void QClear();					//队列清空 
		bool IsEmpty();					//队列是否为空? 
		bool IsFull();					//队列是否已满? 
};

函数

template <class T>
AQueue<T>::AQueue()
{
	cout<<"请输入建立队列大小"<<endl;
	cin>>size;
	QClear();
}

template <class T>
AQueue<T>::~AQueue()
{
	delete [] QArray;
}

template <class T>
bool AQueue<T>::QInsert(const T & item)
{
	if(count == size)
	{
		cout<<"队列已满无法插入"<<endl;
		return false;
	}
	QArray[rear] = item;
	rear = (rear+1)%size;
	count++;
	return true;
}

template <class T>
bool AQueue<T>::QDlete(T & item)
{
	if(count == 0)
	{
		cout<<"队列为空无法删除"<<endl;
		return false;
	}
	item = QArray[front];
	front = (front+1)%size;
	count--;
	return true;
}

template <class T>
bool AQueue<T>::QFind(T & item)
{
	if(count == 0)
	{
		cout<<"队列为空"<<endl;
		return false;
	}
	item = QArray[front];
	return true;
}

template <class T>
void AQueue<T>::QClear()
{
	front = rear =count = 0;
}

template <class T>
bool AQueue<T>::IsEmpty()
{
	if(count == 0)
		return true;
	else return false;
}

template <class T>
bool AQueue<T>::IsFull()
{
	if(count == size)
		return true;
	else return false;
}

主函数

int main(int argc,char **argv)
{
	AQueue<int> A;
	int item,choose;
	bool flag;
	while(1)
	{
		flag = false;
		cout<<"请输入操作数"<<endl<<"(0:插入 1:删除 2:访问队首 3:清空队列 4:是否为空? 5:是否已满?)"<<endl;
		cin>>choose;
		if(choose == -1)
			break;
		switch(choose)
		{
			case 0:
				{
					cout<<"请输入插入元素";
					cin>>item;
					cout<<endl;
					flag = A.QInsert(item);
					if(flag)
						cout<<item<<" 成功插入"<<endl;
					break;
				}
			case 1:
				{
					flag = A.QDlete(item);
					if(flag)
						cout<<"成功删除 "<<item<<endl;
					break;
				}
			case 2:
				{
					flag = A.QFind(item);
					if(flag)
						cout<<"队首元素为"<<item<<endl;
					break;
				}
			case 3:
				{
					A.QClear();
					cout<<"队列已清空"<<endl;
					break;
				}
			case 4:
				{
					if(A.IsEmpty())
						cout<<"队列为空"<<endl;
					else cout<<"队列不空"<<endl;
					break;
				}
			case 5:
				{
					if(A.IsFull())
						cout<<"队列已满"<<endl;
					else cout<<"队列未满"<<endl;
					break;
				}
			default:
				{
					cout<<"操作数输入错误"<<endl;
					break;
				}	
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值