首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 數組實現隊列:環形緩衝區 + head/tail 指針,滿/空判斷、擴容不需(固定容量)

     編輯:程式設計綜合問答

需求:固定容量數組,兩指針表示隊首隊尾,入隊出隊操作,滿/空提示。

環形隊列實現

#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;
}

關鍵點

  • 用 `count` 區分滿/空(`head==tail` 既可能滿也可能空)。
  • 模運算 `% CAP` 實現環形,無需數據移動。
  • 異常處理用 `std::runtime_error`,主程序 `try-catch` 捕獲提示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved