//this is a Queue template by C
//It complied ok with dev-c and vc 6.0
//Fine name is Test.cpp
#include <cstdlib>
#include <iostream>
#include <cstring>
#include "QueueLink.h"
using namespace std;
int main(int argc, char *argv[])
{
cout<<"Queue class template with pointer.../n";
//1.constrator QueueArray(),~QueueArray() test ok
QueueLink<int> int1; //QueueArray
//2.IsEmpty(),IsFull() test ok
cout<<"int1.IsEmpty()="<<int1.IsEmpty()<<endl; //IsEmpty()
cout<<"int1.IsFull()="<<int1.IsFull()<<endl; //IsFull()
//3.GetHead(),GetTail(),In(item),Out(),Print() test ok
int1.In(10); //In(item)
int1.In(20);
int1.In(30);
int1.In(40);
int1.In(88);
cout<<"int1.GetHead()="<<int1.GetHead()<<endl; //GetHead()
cout<<"int1.GetTail()="<<int1.GetTail()<<endl; //GetTail()
int1.Print(); //Print()
int1.Out(); //Out()
int1.Print();
int1.In(99);
int1.Print();
system("Pause");
return 0;
}
/*
*QueueLink.h
*this is a QueueLink template by pointer link
*QueueLink ADT
*writer:chinayaosir ,QQ:44633197
*blog http://blog.csdn.net/chinayaosir
*date:07/08/2008
*/
#ifndef H_QueueLink
#define H_QueueLink
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cassert>
using namespace std;
template <class T>
struct NodeType{
T info;
NodeType<T> *link;
};
template <class T>
class QueueLink
{
public:
//1.constrator QueueLink(),~QueueLink()
QueueLink();
~QueueLink();
//2.IsEmpty(),IsFull()
bool IsEmpty();
bool IsFull();
//3.GetHead(),GetTail(),In(item),Out()
//In=入队列,Out=出队列
T GetHead();
T GetTail();
void In(const T& item);
void Out();
//4.Destory(),Print
void Destory();
void Print();
//protected:
private:
NodeType<T> *QueueFront;
NodeType<T> *QueueRear;
};
//1.constrator QueueLink(),~QueueLink()
template <class T>
QueueLink<T>::QueueLink(){
QueueFront=NULL;
QueueRear=NULL;
}
template <class T>
QueueLink<T>::~QueueLink(){
Destory();
QueueFront=NULL;
QueueRear=NULL;
}
//2.IsEmpty(),IsFull()
template <class T>
bool QueueLink<T>::IsEmpty(){
return (QueueFront==NULL);
}
template <class T>
bool QueueLink<T>::IsFull(){
return false;
}
//3.GetHead(),GetTail(),Insert(),Delete()
template <class T>
T QueueLink<T>::GetHead(){
assert(QueueFront!=NULL);
return QueueFront->info;
}
template <class T>
T QueueLink<T>::GetTail(){
assert(QueueRear!=NULL);
return QueueRear->info;
}
template <class T>
void QueueLink<T>::In(const T& item){
NodeType<T> *newnode;
newnode= new NodeType<T>;
assert(newnode!=NULL);
newnode->info=item;
newnode->link=NULL;
if(QueueFront==NULL){
QueueFront=newnode;
QueueRear=newnode;
}
else{
QueueRear->link=newnode;
QueueRear=newnode;
}
}
template <class T>
void QueueLink<T>::Out(){
NodeType<T> *temp;
if(QueueFront!=NULL){
temp=QueueFront;
QueueFront=QueueFront->link;
delete temp;
}
if(QueueFront==NULL)
QueueRear=NULL;
}
//4.Destory(),Print()
template <class T>
void QueueLink<T>::Destory(){
NodeType<T> *temp;
if (QueueFront!=NULL){
while(QueueFront!=NULL){
temp=QueueFront;
QueueFront=QueueFront->link;
delete temp;
}
QueueRear=NULL;
}
}
template <class T>
void QueueLink<T>::Print(){
NodeType<T> *temp,*current;
current=QueueFront;
assert(current!=NULL);
while(current!=NULL){
temp=current;
current=current->link;
cout<<temp->info<<" ";
}
cout<<endl;
}
#endif