LongDz 的数字文墨提案

📄 data_struct/循环队列.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
const int QueueSize = 1000;
template <class T>
class CircleQueue
{
public:
    CircleQueue() { front = rear = 0; }
    void EnQueue(T x);
    T DeQueue();
    T GetFront();
    int GetLength();
    bool Empty() { return front == rear; }

private:
    T data[QueueSize];
    int front;
    int rear;
};
template <class T>
void CircleQueue<T>::EnQueue(T x)
{
    if ((rear + 1) % QueueSize == front)
        throw "满";
    rear = (rear + 1) % QueueSize
                            data[rear] = x;
}
template <class T>
int CircleQueue<T>::GetLength()
{
    return (rear - front + QueueSize) % QueueSize;
}
template <class T>
T CircleQueue<T>::DeQueue()
{
    if (Empty())
        throw "空";
    T x = data[(front + 1) % QueueSize];
    front = (front + 1) % QueueSize;
    return x;
}
template <class T>
T CircleQueue<T>::GetFront()
{
    if (Empty())
        throw "空";
    return data[(front + 1) % QueueSize];
}