C语言数据结构之队列使用范例
#include<iostream.h>
//#include<stdlib.h>
template<class T>
struct linknode
{
T data;
linknode<T> *link;
linknode<T>(linknode<T> *ptr=NULL)
{
link=ptr;
}
linknode<T>(const T&item,linknode<T> *ptr=NULL)
{
link=ptr;
data=item;
}
};
template<class T>
class linkedqueue
{
public:
linkedqueue():rear(NULL),front(NULL)
{
}
~linkedqueue()
{
makeempty();
}
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 show()const;
//friend ostream& operator<<(ostream& os,linkedqueue<T>& Q);
protected:
linknode<T> *front,*rear;
};
template<class T>
void linkedqueue<T>::makeempty()
{
linknode<T> *p;
while(front!=NULL)
{
p=front;
front=front->link;
delete p;
}
};
template<class T>
bool linkedqueue<T>::enqueue(const T&x)
{
int s;
cout<<"请选择插入数据的端:1 队头 2 队尾 :";
cin>>s;
if(s==2)
{
if(front==NULL)
{
front=rear=new linknode<T>(x);
if(front==NULL)
return false;
}
else
{
rear->link=new linknode<T>(x);
if(rear->link==NULL)
return false;
rear=rear->link;
}
return true;
}
else if(s==1)
{
if(front==NULL)
{
front=rear=new linknode<T>(x);
if(front==NULL)
return false;
}
else
{
linknode<T> *p;
p=front;
front=new linknode<T>(x);
front->link=p;
}
return true;
}
};
template<class T>
bool linkedqueue<T>::dequeue(T&x)
{
if(isempty()==true)
return false;
linknode<T> *p=front;
x=front->data;
front=front->link;
delete p;
return true;
};
template<class T>
bool linkedqueue<T>::getfront(T&x)const
{
if(isempty()==true)
return false;
x=front->data;
return true;
};
template<class T>
int linkedqueue<T>::getsize()const
{
linknode<T>*p;
p=front;
int k=0;
while(p!=NULL)
{
p=p->link;
k++;
}
return k;
};
template<class T>
void linkedqueue<T>::show()const
{
linknode<T>* p=front;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->link;
}
cout<<endl;
};
void main()
{
linkedqueue<int> myqueue;
for(int i=1;i<=3;i++)
{
myqueue.enqueue(i);
}
myqueue.show();
for(i=1;i<=3;i++)
{
myqueue.enqueue(i);
}
myqueue.show();
// int x;
// myqueue.dequeue(x);
// cout<<x<<endl;
// myqueue.show();
// cout<<myqueue.getsize()<<endl;
}
