数据结构算法--队列

来源:互联网 发布:thinkphp与php的区别 编辑:程序博客网 时间:2024/06/18 17:23
/**/////////////////////////////
//   队列数据结构       Queue.h //
/**/////////////////////////////

#include<iostream.h>
template<class Type> class Queue;

template<class Type> class QueueNode
{
    friend class Queue<Type>;
private:
    Type data;
    QueueNode<Type> *link;
    QueueNode(Type d=0,QueueNode *l=NULL):data(d),link(l)......{}
};

template <class Type> class Queue
{
public:
    Queue():rear(NULL),front(NULL)......{}
    ~Queue();
    void EnQueue(Type item);
    Type DelQueue();
    Type GetFront();
    void MakeEmpty();
    bool ISEmpty() ......{ return front==NULL; }
private:
    QueueNode<Type> *front,*rear;
};


template<class Type>
Queue<Type>::~Queue()
{
    QueueNode<Type> *p;
    while(front!=NULL)
    {
        p=front;
        front=front->link;
        delete p;
    }
}

template<class Type>
void Queue<Type>::EnQueue(Type item)
{
    if(front==NULL)
        front=rear=new QueueNode<Type> (item,NULL);
    else
        rear=rear->link=new QueueNode<Type> (item,NULL);
}


template<class Type>
Type Queue<Type>::DelQueue()
{
    QueueNode<Type> *p=front;
    Type temp=p->data;;
    front=front->link;
    delete p;
    return temp;
}


template<class Type>
Type Queue<Type>::GetFront()
{
    return front->data;
}


template<class Type>
void Queue<Type>::MakeEmpty()
{
    QueueNode<Type> *p;
    while(front!=NULL)
    {
        p=front;
        front=front->link;
        delete p;
    }
}

/**//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    //
//   队列功能函数 Queue.cpp  //
//    //
/**/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include"Queue.h"

const int INT =13;
const double FLOAT= 13.33;
const char CHAR ='a';

template<class Type>
void Queue_Enter(Queue<Type> &QueueOPP)
{
    cout<<"请输入要插入队列的数据: ";
    Type item;
    cin>>item;
    QueueOPP.EnQueue(item);
}

template<class Type>
void Queue_Del(Queue<Type> &QueueOPP)
{
    if(!QueueOPP.ISEmpty())
    {
        cout<<"出队数据:"<<QueueOPP.DelQueue()<<endl;
    }
    else
    {
        cout<<"队列已为空!"<<endl;
    }
}

template<class Type>
void Queue_ISEmpty(Queue<Type> &QueueOPP)
{
    if(QueueOPP.ISEmpty())
    {
        cout<<"队列已空!"<<endl;
    }
    else
    {
        cout<<"队列不空!"<<endl;
    }
}

template<class Type>
void Queue_GetFront(Queue<Type> &QueueOPP)
{
    if(!QueueOPP.ISEmpty())
    {
        cout<<"队头元素为: "<<QueueOPP.GetFront()<<endl;
    }
    else
   {
        cout<<"队列已空!"<<endl;
    }
}

template<class Type>
void Queue_MakeEmpty(Queue<Type> &QueueOPP)
{
    QueueOPP.MakeEmpty();
    cout<<"队列清空!"<<endl;
}

template<class Type>
void QueueINI(Type temp)
{
    Queue<Type> QueueOPP;

    do
    {
        cout<<"队列的操作: "<<endl
            <<" 1) 插入队列"<<endl
            <<" 2) 出队"<<endl
            <<" 3) 队列是否为空"<<endl
            <<" 4) 得队头数据项"<<endl
            <<" 5) 销毁队列"<<endl
            <<" X) 退出队列操作"<<endl;
        int item;
        cin>>item;
        switch(item)
        {
        case 1: Queue_Enter(QueueOPP); break;
        case 2: Queue_Del(QueueOPP); break;
        case 3: Queue_ISEmpty(QueueOPP);  break;
        case 4: Queue_GetFront(QueueOPP); break;
        case 5: Queue_MakeEmpty(QueueOPP); break;
        default: return ;
        }
    }while(true);
}

void QUEUE()  //根据不同的用户需要选择数据类型
{
    int item;
    cout<<"清选择数据类型: 1) 整型 2) 浮点型 3) 字符型 X) 退出: ";
    cin>>item;
    switch(item)
    {
        case 1: QueueINI(INT); break; 
        case 2: QueueINI(FLOAT); break;
        case 3: QueueINI(CHAR); break;
        default: return ; break;
    }
}
0 0