Queen模板实现

今天早上给大家带来一个Queen的实现.


#include<exception>
#include<iostream>
using namespace std;

template <class T>
class Queen
{
    public:
        struct node{
            T data;
            node* next;
            node(const T data = T()):data(data),next(NULL){}
        };
        Queen(int _max=0):max(_max),size(0),last(NULL)
        {
            head = new node();
        }
        virtual ~Queen();
        void queenPut(const T&);
        T queenGet();
        bool queenEmpty();
        bool queenFull();
        void show();
        void clear();
        void setNode(const T&);
        int getSize()const { return size;}
    private:
        int size;
        int max;
        node* head;
        node* last;
};
template <class T>
void Queen<T>::clear()
{
    node* p = head;
    while(p->next!=NULL)
    {
        node* temp;
        temp = p;
        p = p->next;
        --size;
        delete temp;
    }
}
template <class T>
Queen<T>::~Queen()
{
    clear();
}
template <class T>
void Queen<T>::setNode(const T& data)
{
    node* no = new node();
    if(no!=NULL){
        no->data = data;
        no->next = last->next;
        last->next = no;
        last = last->next;
        ++size;
    }
}
template <class T>
void Queen<T>::queenPut(const T& data)
{
    if(queenFull())
    {
        throw "Queen is full !!";
    }
    node* no = new node();
    if(last==NULL)
    {
        no->data = data;
        no->next = head->next;
        head->next = no;
        last = head->next;
        ++size;
        return ;
    }
    setNode(data);
}
template <class T>
T Queen<T>::queenGet()
{
    if(queenEmpty())
    {
        throw "Queen is empty !!";
    }
    T data = head->next->data;
    node* p = head->next->next;
    delete head->next;
    head->next = p;
    --size;
    return data;
}
template <class T>
void Queen<T>::show()
{
    node* p = head->next;
    cout<<"Queen< ";
    while(p!=NULL)
    {
        cout<<p->data<<' ';
        p = p->next;
    }
    cout<<" > ";
    cout<<endl;
}
template <class T>
bool Queen<T>::queenEmpty()
{
    return (head->next)==NULL;
}

template <class T>
bool Queen<T>::queenFull()
{
   return size==max;
}


功能和Stack差不多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值