Circular Queue & List Queue


本文原创

用动态数组实现了一个非常简陋但却比较实用的循环队列模板,提供的接口和 STL 的基本一样。

#ifndef __CIRCULAR_QUEUE_HPP__
#define __CIRCULAR_QUEUE_HPP__

#include <assert.h>

namespace std {

template <typename T>
class CircularQueue
{
public:
    CircularQueue(size_t size) : _front(1), _rear(0), _size(size) { _array = new T[_size]; }
    ~CircularQueue() { delete []_array; }

    void clear()
    {
        _front = 1;
        _rear = 0;
    }
    size_t size()
    {
        return (_rear + 1 + _size - _front) % _size;
    }

    bool is_full() { return (_rear + 2) % _size == _front; }
    bool is_empty() { return (_rear + 1) % _size == _front; }

    void push(T value)
    {
        assert( is_full() == false );
        _rear = (_rear + 1) % _size;
        _array[_rear] = value;
    }
    void pop()
    {
        assert( is_empty() == false );
        _front = (_front + 1) % _size;
    }

    T front()
    {
        assert( is_empty() == false );
        return _array[_front];
    }
    T back()
    {
        assert( is_empty() == false );
        return _array[_rear];
    }
private:
    size_t _front;
    size_t _rear;
    size_t _size;
    T *_array;
};

}
#endif

用单链表实现了一个链式队列模板,提供的接口和 STL 的基本一样。

Leave a comment

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