Circular Queue 배열 구현 클래스

컴퓨터 이야기/C++ 2015. 12. 9. 06:00
template <typename Node>
class CircularQueue
{
private:
    Node* node; // 노드 배열
    int capacity; // 큐의 용량
    int front; // 전단의 인덱스
    int rear; // 후단의 인덱스
public:
    CircularQueue(int capacity)
    {
        this->capacity = capacity + 1; // 노드 배열의 크기는 실제 용량에서 1을 더한 크기 (더미 공간 때문)
        node = new Node[this->capacity]; // Node 구조체 capacity + 1개를 메모리 공간에 할당한다
        front = 0; rear = 0; // 전단과 후단의 초기화
    }
    
    ~CircularQueue()
    {
        delete []node; // 노드 배열 소멸
    }
    void clear()
    {
        front = rear = 0;
    }
    void enqueue(const Node& data)
    {
        int pos; // 데이터가 들어갈 인덱스
        pos = rear;
        rear = (rear + 1) % (capacity);
        node[pos] = data; // pos 번째의 노드의 데이터에 data를 대입한다
    }
    Node dequeue() {
        int pos = front; // pos에 전단의 인덱스 대입
        front = (front + 1) % capacity;
        return node[pos]; // 제외되는 데이터를 반환한다
    }
    int getSize() {
        if (front <= rear) // 전단의 인덱스가 후단의 인덱스와 같거나 그보다 작다면
            return rear - front; // 후단의 인덱스에서 전단의 인덱스를 뺀값을 반환한다
        else // 전단의 인덱스가 후단의 인덱스보다 크다면
            return capacity - front + rear; // 용량에서 전단의 인덱스를 뺀 뒤에 후단의 인덱스를 더한 값을 반환한다
    }
    bool isEmpty() {
        return front == rear; // 전단의 인덱스와 후단의 인덱스가 같을 경우 true, 아니면 false
    }
    bool isFull() {
        return front == (rear + 1) % capacity;
    }
    int getRear() { return rear; }
    int getFront() { return front; }
    vector<Node> getTotalData()
    {
        int tempFront = front;
        vector<Node> T;
        while(tempFront != rear)
        {
            T.push_back(node[tempFront]);
            tempFront = (tempFront + 1) % capacity;
        }
        return T;
    }

    //  void show()
    //  {
    //      int tempFront = front;
    //      while(tempFront != rear)
    //      {
    //          cout << node[tempFront].data << "/";
    //
    //          tempFront = (tempFront + 1) % capacity;
    //      }
    //      cout << endl;
    //  }
};


'컴퓨터 이야기 > C++' 카테고리의 다른 글

32bit / 64bit well hash functions  (0) 2016.06.02
JNI 정리.  (0) 2016.05.30
boost::pool 메모리 풀  (0) 2015.12.09
C++ Standard draft 07  (0) 2011.02.05
나머지 연산자의 동작.  (2) 2011.01.13
: