📄 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];
}