需求:固定容量數組,兩指針表示隊首隊尾,入隊出隊操作,滿/空提示。
#include
#include
template
class RingQueue {
T data[CAP];
size_t head = 0, tail = 0, count = 0;
public:
void enqueue(const T& val) {
if (count == CAP) throw std::runtime_error("Queue full");
data[tail] = val;
tail = (tail + 1) % CAP;
++count;
}
T dequeue() {
if (count == 0) throw std::runtime_error("Queue empty");
T val = data[head];
head = (head + 1) % CAP;
--count;
return val;
}
bool empty() const { return count == 0; }
bool full() const { return count == CAP; }
size_t size() const { return count; }
};
int main() {
RingQueue q;
q.enqueue(1); q.enqueue(2); q.enqueue(3);
std::cout << q.dequeue() << '\n'; // 1
q.enqueue(4); q.enqueue(5); q.enqueue(6); // full
try { q.enqueue(7); } catch (...) { std::cout << "full\n"; }
while (!q.empty()) std::cout << q.dequeue() << ' '; // 2 3 4 5 6
return 0;
}