顺序队列基础操作
环境及程序说明
头文件
#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;
}