#include<iostream>
using namespace std;
template <class T>
class QueueNode{
public:
QueueNode<T>*next;
T data;//类型为T的数据域
QueueNode(T& x,QueueNode<T> *l=NULL){
data=x;
next=l;
}
};
template <class T>
class Queue{
public:
Queue(void){
head=rear=NULL;
}
~Queue(void){
QueueNode<T>*p;
QueueNode<T>*r;
p=head;
while(p!=NULL) {
r=p;
p=p->next;
delete r;
}
}
bool Insert(T&item);//队尾添加元素
bool Delete();//删除队首元素
bool Front(T&item);//存队首元素值
QueueNode<T> *get_head(){
return head;
}
private:
QueueNode<T>*head,*rear;//队首队尾指针
};
template <class T>
bool Queue<T>::Insert(T&item){
if(head==NULL) {
rear=head=new QueueNode<T>(item);
return true;
}
else{
rear=rear->next=new QueueNode<T>(item);
return true;
}
}
template <class T>
bool Queue<T>::Delete(){
if(head==NULL){
return false;
}
else if(head->next==NULL){
QueueNode<T>*p;
p=head;
head=rear=NULL;
delete p;
return true;
}
else{
QueueNode<T>*p;
p=head;
head=head->next;
delete p;
return true;
}
}
template <class T>
bool Queue<T>::Front(T&item){
if(head==NULL){
return false;
}
else{
item=head->data;
return true;
}
}
template <class T> T printQueue(QueueNode<T>*Head){ //打印队内元素
if(Head==NULL) {
cout<<"队列为空!"<<endl;
}
else{
QueueNode<T>*p;
p=Head;
while(p!=NULL) {
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
}
int main(){
Queue<int>q;
bool flag;
int n=1,m,num;
QueueNode<int> *h_node;
while(n!=0) {
cout<<"1代表压入栈顶元素,2代表弹出栈顶元素,3代表获得栈顶元素,0代表结束操作"<<endl;
cin>>n;
if(n==1){
cout<<"请输入队尾元素"<<endl;
cin>>m;
flag=q.Insert(m);
cout<<"入队成功!"<<endl;
cout<<"队内元素为"<<endl;
h_node=q.get_head();
printQueue(h_node); //打印栈内元素
}
else if(n==2){
flag=q.Delete();//弹出栈顶元素
if(flag==true){
cout<<"出队成功!"<<endl;
cout<<"队内元素为"<<endl;
h_node=q.get_head();
printQueue(h_node); //打印栈内元素
}
else{
cout<<"队列为空!"<<endl;
}
}
else if(n==3) {
flag=q.Front(num);//获得栈顶元素
if(flag==true){
cout<<"队首元素为"<<num<<endl;
}
else{
cout<<"队列为空!"<<endl;
}
}
else{
break;
}
}
}
using namespace std;
template <class T>
class QueueNode{
public:
QueueNode<T>*next;
T data;//类型为T的数据域
QueueNode(T& x,QueueNode<T> *l=NULL){
data=x;
next=l;
}
};
template <class T>
class Queue{
public:
Queue(void){
head=rear=NULL;
}
~Queue(void){
QueueNode<T>*p;
QueueNode<T>*r;
p=head;
while(p!=NULL) {
r=p;
p=p->next;
delete r;
}
}
bool Insert(T&item);//队尾添加元素
bool Delete();//删除队首元素
bool Front(T&item);//存队首元素值
QueueNode<T> *get_head(){
return head;
}
private:
QueueNode<T>*head,*rear;//队首队尾指针
};
template <class T>
bool Queue<T>::Insert(T&item){
if(head==NULL) {
rear=head=new QueueNode<T>(item);
return true;
}
else{
rear=rear->next=new QueueNode<T>(item);
return true;
}
}
template <class T>
bool Queue<T>::Delete(){
if(head==NULL){
return false;
}
else if(head->next==NULL){
QueueNode<T>*p;
p=head;
head=rear=NULL;
delete p;
return true;
}
else{
QueueNode<T>*p;
p=head;
head=head->next;
delete p;
return true;
}
}
template <class T>
bool Queue<T>::Front(T&item){
if(head==NULL){
return false;
}
else{
item=head->data;
return true;
}
}
template <class T> T printQueue(QueueNode<T>*Head){ //打印队内元素
if(Head==NULL) {
cout<<"队列为空!"<<endl;
}
else{
QueueNode<T>*p;
p=Head;
while(p!=NULL) {
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
}
int main(){
Queue<int>q;
bool flag;
int n=1,m,num;
QueueNode<int> *h_node;
while(n!=0) {
cout<<"1代表压入栈顶元素,2代表弹出栈顶元素,3代表获得栈顶元素,0代表结束操作"<<endl;
cin>>n;
if(n==1){
cout<<"请输入队尾元素"<<endl;
cin>>m;
flag=q.Insert(m);
cout<<"入队成功!"<<endl;
cout<<"队内元素为"<<endl;
h_node=q.get_head();
printQueue(h_node); //打印栈内元素
}
else if(n==2){
flag=q.Delete();//弹出栈顶元素
if(flag==true){
cout<<"出队成功!"<<endl;
cout<<"队内元素为"<<endl;
h_node=q.get_head();
printQueue(h_node); //打印栈内元素
}
else{
cout<<"队列为空!"<<endl;
}
}
else if(n==3) {
flag=q.Front(num);//获得栈顶元素
if(flag==true){
cout<<"队首元素为"<<num<<endl;
}
else{
cout<<"队列为空!"<<endl;
}
}
else{
break;
}
}
}