#include
using namespace std;
template
struct LinkNode
{
T data;
LinkNode
LinkNode(T x,LinkNode
{
data=x;
link=p;
}
};
template
class LinkedQueue
{
public:
LinkedQueue();//构造函数初始化
~LinkedQueue();//析构函数置空
bool EnQueue(const T&x);
//插入函数
bool DeQueue(T&x);//从队头出
bool getFront(T&x)const;//得到队头元素
void makeEmpty();//置空函数
bool IsEmpty()const{
return (front==NULL)?true:false;}//判断是否为空
int getSize()const;//得到队列长度
void output(ostream&out);//输出队列元素
private:
LinkNode
};
template
LinkedQueue
//构造函数,初始化队头和队尾指针
front = rear = NULL;
}
template
void LinkedQueue
{
LinkNode
while(front!=NULL)//从队头删元素,首先要判断前提条件
{
p=front;//保存
front=front->link;//移动
delete p;//删除
}
}
template
bool LinkedQueue
{
if(NULL==front){//前提条件判断,观察是否有空间
front=rear=new LinkNode
if(NULL==front) //双重保障,判断是否成功开辟空间
{
return false;}}
else{
rear->link=new LinkNode
if(NULL==rear->link)
return false;//再次判断是否成功开辟空间给x
rear=rear->link; }//更新尾指针
return true;
}
template
bool LinkedQueue
{
if(IsEmpty())//前提条件判断,是否有元素
return false;
LinkNode
x=front->data;
front=front->link;//移动
delete p;//删除
return true;
}
template
bool LinkedQueue
if(IsEmpty())//前提条件判断
{
cout<<"无法输出队头元素,队列为空!"<
}
else
x=front->data;//获取队头元素值
cout<<"队头元素为"<
}
template
int LinkedQueue
{
LinkNode
int k=0;//计数变量
while(p!=NULL)//判断条件
{
k++;//计数
p=p->link;//移动
}
cout<<"当前队列的长度为"<
}
template
LinkedQueue
//析构函数,释放程序中的资源
makeEmpty();
}
template
void LinkedQueue
{
LinkNode
while(current!=NULL)
{
out<
current=current->link;//移动
}
cout<
template
ostream&operator<<(ostream&out,LinkedQueue
{
Q.output(out);
return out;
}
int main()
{
cout<<"------------------链式队列--------------------"<
bool end=false;
int choice;
while(!end)
{
cout<<"1:建立链式队列"<
cin>>choice;
switch(choice)
{
case 1:
cout<<"请输入链式队列的元素个数";
int n;
cin>>n;
cout<<"请依次输入元素值"<
for(int i=0;i
cin>>a[i];
link_Q.EnQueue(a[i]);
}
cout<<"当前队列元素为" <
case 2:
link_Q.getSize();
break;
case 3:
if(link_Q.IsEmpty())
cout<<"链式队列为空!"<
cout<<"链是队列不为空!" <
case 4:
link_Q.makeEmpty();
cout<<"已置空!"<
case 5:
cout<<"请输入插入的元素"<
cin>>val;
link_Q.EnQueue(val);
break;
case 6:
link_Q.getFront(n);
break;
case 7:
link_Q.DeQueue(n);
cout<<"删除的队头元素为"<
case 8 :
cout<<"当前队列元素为"<
case 9:
end=true;
break;
default:
cout<<"输入错误! 请重新输入!!!"<
cout<
}
return 0;
}