스택 및 큐 컬렉션 만들기
이 문서에서는 MFC 목록 클래스에서 스택 및 큐와 같은 다른 데이터 구조를 만드는 방법을 설명합니다. 예제에서는 파생된 CList
클래스를 사용하지만 기능을 추가해야 하는 경우가 아니면 직접 사용할 CList
수 있습니다.
스택
표준 목록 컬렉션에는 헤드와 꼬리가 모두 있으므로 마지막 선입선출 스택의 동작을 모방하는 파생된 목록 컬렉션을 쉽게 만들 수 있습니다. 스택은 카페테리아에 있는 트레이 스택과 같습니다. 트레이가 스택에 추가되면 스택 맨 위로 이동합니다. 추가된 마지막 트레이는 가장 먼저 제거됩니다. 목록 컬렉션 멤버 함수 AddHead
를 사용 하 RemoveHead
고 추가 하 고 목록의 머리에서 특별히 요소를 제거 하는 데 사용할 수 있습니다., 따라서 가장 최근에 추가 된 요소는 제거 될 첫 번째입니다.
스택 컬렉션을 만들려면
기존 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
함수를 호출할 수 있습니다.
큐
표준 목록 컬렉션에는 헤드와 꼬리가 모두 있으므로 선입선출 큐의 동작을 모방하는 파생된 목록 컬렉션을 쉽게 만들 수 있습니다. 큐는 카페테리아에 있는 사람들의 줄과 같습니다. 줄에 있는 첫 번째 사람이 가장 먼저 제공됩니다. 더 많은 사람들이 올 때, 그들은 자신의 차례를 기다리기 위해 라인의 끝으로 이동합니다. 목록 컬렉션 멤버 함수 AddTail
를 RemoveHead
사용 하 여 추가 하 고 특히 목록의 머리 또는 꼬리에서 요소를 제거 하는 데 사용할 수 있습니다., 따라서 가장 최근에 추가 된 요소는 항상 제거 될 마지막입니다.
큐 컬렉션을 만들려면
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(); } };