<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                隊列的順序表示中,可能會出現隊列有空位卻產生溢出,這就是"假溢出"現象。解決方法是把隊列從邏輯上看成是一個頭尾相連的環, 再有新元素需要入隊時,就可以將新元素存入下標0的位置。 隊頭指針進1:front = (front + 1) % maxSize 隊尾指針進1:rear = (rear + 1) % maxSize 空隊列:front == rear 滿隊列:front == (rear + 1) % maxSize 滿隊列時還是有一個元素的空間沒有使用的,如果不留這個元素的空間,那么隊尾指針rear一定指向該元素空間,使得滿隊列時的判斷 條件也是(front == rear)而無法區分。 包含的函數有IsEmpty(), IsFull(), Frong(), EnQueue(), DEQueue(), Clear()。 實現代碼: ~~~ #include "iostream" #include "cstdio" #include "cstring" #include "algorithm" using namespace std; template <class T> class Queue { public: virtual bool IsEmpty() const = 0; // 隊列為空返回true virtual bool IsFull() const = 0; // 隊列滿返回true virtual bool Front(T &x) const = 0; // 隊頭元素賦給x,操作成功返回true virtual bool EnQueue(T x) = 0; // 隊尾插入元素x,操作成功返回true virtual bool DeQueue() = 0; // 刪除隊頭元素,操作成功返回true virtual bool Clear() = 0; // 清除隊列中所有元素 }; template <class T> class SeqQueue:public Queue<T> { public: SeqQueue(int mSize); ~SeqQueue() { delete []q; } bool IsEmpty() const { return front == rear; } // front與rear相等時循環隊列為空 bool IsFull() const { return (rear + 1) % maxSize == front; } // front與(rear + 1) % maxSize相等時循環隊列滿 bool Front(T &x) const; bool EnQueue(T x); bool DeQueue(); bool Clear() { front = rear = 0; return true; } /* data */ private: int front, rear, maxSize; // 隊頭元素 隊尾元素 數組最大長度 T *q; }; template <class T> SeqQueue<T>::SeqQueue(int mSize) { maxSize = mSize; q = new T[maxSize]; front = rear = 0; } template <class T> bool SeqQueue<T>::Front(T &x) const { if(IsEmpty()) { // 空隊列處理 cout << "SeqQueue is empty" << endl; return false; } x = q[(front + 1) % maxSize]; return true; } template <class T> bool SeqQueue<T>::EnQueue(T x) { if(IsFull()) { // 溢出處理 cout << "SeqQueue is full" << endl; return false; } q[(rear = (rear + 1) % maxSize)] = x; return true; } template <class T> bool SeqQueue<T>::DeQueue() { if(IsEmpty()) { // 空隊列處理 cout << "SeqQueue is empty" << endl; return false; } front = (front + 1) % maxSize; return true; } int main(int argc, char const *argv[]) { SeqQueue<int> sq(5); if(sq.IsEmpty()) cout << "SeqQueue is empty" << endl; for(int i = 0; i < 5; ++i) // sq(0, 1, 2, 3) if(sq.EnQueue(i)) cout << "EnQueue successfully" << endl; int x; if(sq.Front(x)) cout << "The front of sq is " << x << endl; if(sq.IsFull()) cout << "SeqQueue is full" << endl; if(sq.DeQueue()) cout << "Delete front successfully" << endl; if(sq.Front(x)) cout << "The front of sq is " << x << endl; if(sq.Clear()) cout << "Clear successfully" << endl; return 0; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看