// Queue.h

#ifndef _QUEUE_H_
#define _QUEUE_H_

template<class T>
class Queue
{
public:
    Queue(int size = 10);
    ~Queue();

    bool IsEmpty() const;
    bool IsFull() const;
    T First() const;
    T Last() const;
    Queue<T>& Add(const T &x);
    Queue<T>& Delete(T &x);

private:
    int front;
    int rear;
    int MaxSize;
    T *queue;
};

#endif // _QUEUE_H_


// Queue.cpp

#include "Queue.h"
#include <iostream>
using namespace std;

template<class T>
Queue<T>::Queue(int size = 10)
{
    MaxSize = size + 1;
    queue = new T[MaxSize];
    front = rear = 0;
}

template<class T>
Queue<T>::~Queue()
{
    delete [] queue;
}

template<class T>
bool Queue<T>::IsEmpty() const
{
    return (front == rear);
}

template<class T>
bool Queue<T>::IsFull() const
{
    return ( ((rear+1) % MaxSize == front) ? 1 : 0 );
}

template<class T>
T Queue<T>::First() const
{
    if (IsEmpty())
    {
        cout << "Queue is empty!" << endl;
    }

    return queue[(front+1) % MaxSize];
}

template<class T>
T Queue<T>::Last() const
{
    if (IsEmpty())
    {
        cout << "Queue is empty!" << endl;
    }

    return queue[rear];
}

template<class T>
Queue<T>& Queue<T>::Add(const T &x)
{
    if (IsFull())
    {
        cout << "Queue is full!" << endl;
        reutrn *this;
    }
    rear = (rear+1) % MaxSize;
    queue[rear] = x;

    return *this;
}

template<class T>
Queue<T>& Queue<T>::Delete(T &x)
{
    if (IsEmpty())
    {
        cout << "Queue is empty!" << endl;
        return *this;
    }
    front = (front+1) % MaxSize;
    x = queue[front];

    return *this;
}


// Queue.cpp

#include "Queue.h"
#include <iostream>
using namespace std;

template<class T>
Queue<T>::Queue(int size = 10)
{
    MaxSize = size + 1;
    queue = new T[MaxSize];
    front = rear = 0;
}

template<class T>
Queue<T>::~Queue()
{
    delete [] queue;
}

template<class T>
bool Queue<T>::IsEmpty() const
{
    return (front == rear);
}

template<class T>
bool Queue<T>::IsFull() const
{
    return ( ((rear+1) % MaxSize == front) ? 1 : 0 );
}

template<class T>
T Queue<T>::First() const
{
    if (IsEmpty())
    {
        cout << "Queue is empty!" << endl;
    }

    return queue[(front+1) % MaxSize];
}

template<class T>
T Queue<T>::Last() const
{
    if (IsEmpty())
    {
        cout << "Queue is empty!" << endl;
    }

    return queue[rear];
}

template<class T>
Queue<T>& Queue<T>::Add(const T &x)
{
    if (IsFull())
    {
        cout << "Queue is full!" << endl;
        reutrn *this;
    }
    rear = (rear+1) % MaxSize;
    queue[rear] = x;

    return *this;
}

template<class T>
Queue<T>& Queue<T>::Delete(T &x)
{
    if (IsEmpty())
    {
        cout << "Queue is empty!" << endl;
        return *this;
    }
    front = (front+1) % MaxSize;
    x = queue[front];

    return *this;
}


// main.cpp

#include "Queue.h"
#include "Queue.cpp"
#include <iostream>
using namespace std;

int main(void)
{
    Queue<int> queue(10);

    for (int i = 1; i <= 10; i++)
    {
        queue.Add(i);
    }

    cout << "first = " << queue.First() << endl;
    cout << "last = " << queue.Last() << endl;

    cin.get();
    return 0;
}

2011-08-15

发表评论

电子邮件地址不会被公开。 必填项已用*标注

鄂ICP备17003086号. Copyright © 2016. All Rights Reserved.