共用方式為


建立堆疊和佇列集合

本文說明如何從 MFC 清單類別建立其他資料結構,例如 堆疊 佇列 。 這些範例會使用衍生自 CList 的類別,不過除非您需要新增其他功能,否則您可以直接使用 CList

堆疊

因為標準的清單集合具有一個頭部和尾部,建立模擬後進先出的堆疊行為之衍生清單集合是很容易的。 堆疊就像自助餐廳的一疊盤子。 當餐盤加入堆疊時,它們會位於堆疊的上方。 最後加入的盤子是第一個被移除的盤子。 清單集合成員函式 AddHeadRemoveHead 可用來從清單的開頭明確地加入和移除項目;因此,最新加入的項目會最先被移除。

建立堆疊集合

  1. 從其中一個現有的 MFC 清單類別衍生新的清單類別,並加入多個成員函式支援堆疊作業的功能。

    下列範例顯示如何加入成員函式,以推入項目至堆疊、檢視堆疊的最上層項目,並從堆疊最上方彈出項目:

    class CTray : public CObject { };
    
    class CStack : public CTypedPtrList< CObList, CTray* >
    {
    public:
       // Add element to top of stack
       void Push(CTray* newTray)
       {
          AddHead(newTray);
       }
    
       // Peek at top element of stack
       CTray* Peek()
       {
          return IsEmpty() ? NULL : GetHead();
       }
    
       // Pop top element off stack
       CTray* Pop()
       {
          return RemoveHead();
       }
    };
    

請注意,這種方法會公開基礎 CObList 類別。 使用者可以呼叫任何 CObList 成員函式,無論它是否對堆疊具有意義。

佇列

因為標準清單集合具有一個頭部和尾部,建立模擬先進先出的佇列行為之衍生清單集合也是很容易的。 佇列就像是在自助餐廳排隊的人。 隊伍中的第一個人會是第一個被服務的人。 當更多人來的時候,他們會走到隊伍的尾端等待。 清單集合成員函式 AddTailRemoveHead 可用來從清單的開頭或尾端明確地加入和移除項目;因此,最新加入的項目會最後被移除。

建立佇列集合

  1. 從其中一個預先定義的清單類別衍生隨附 MFC 程式庫之新的清單類別,並加入多個成員函式支援佇列作業。

    下列範例顯示如何附加成員函式,將項目加入至佇列的末端,並從佇列的前端取得項目。

    class CQueue : public CTypedPtrList< CObList, CPerson* >
    {
    public:
       // Go to the end of the line
       void AddToEnd(CPerson* newPerson)
       {
          AddTail(newPerson);
       }        // End of the queue
    
    // Get first element in line
       CPerson* GetFromFront()
       {
          return IsEmpty() ? NULL : RemoveHead();
       }
    };
    

另請參閱

集合