다음을 통해 공유


스택 및 큐 컬렉션 만들기

이 문서에서는 MFC 목록 클래스에서 스택 및 큐같은 다른 데이터 구조를 만드는 방법을 설명합니다. 예제에서는 파생된 CList클래스를 사용하지만 기능을 추가해야 하는 경우가 아니면 직접 사용할 CList 수 있습니다.

스택

표준 목록 컬렉션에는 헤드와 꼬리가 모두 있으므로 마지막 선입선출 스택의 동작을 모방하는 파생된 목록 컬렉션을 쉽게 만들 수 있습니다. 스택은 카페테리아에 있는 트레이 스택과 같습니다. 트레이가 스택에 추가되면 스택 맨 위로 이동합니다. 추가된 마지막 트레이는 가장 먼저 제거됩니다. 목록 컬렉션 멤버 함수 AddHead 를 사용 하 RemoveHead 고 추가 하 고 목록의 머리에서 특별히 요소를 제거 하는 데 사용할 수 있습니다., 따라서 가장 최근에 추가 된 요소는 제거 될 첫 번째입니다.

스택 컬렉션을 만들려면

  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. Microsoft Foundation 클래스 라이브러리와 함께 제공되는 미리 정의된 목록 클래스 중 하나에서 새 목록 클래스를 파생시키고 큐 작업의 의미 체계를 지원하기 위해 더 많은 멤버 함수를 추가합니다.

    다음 예제에서는 멤버 함수를 추가하여 큐의 끝에 요소를 추가하고 큐 앞에서 요소를 가져오는 방법을 보여 줍니다.

    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();
       }
    };
    

참고 항목

컬렉션