Queue-C++template

来源:互联网 发布:小学信息技术编程ppt 编辑:程序博客网 时间:2024/05/11 19:07

 

//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

原创粉丝点击