Membuat Koleksi Tumpukan dan Antrean
Artikel ini menjelaskan cara membuat struktur data lain, seperti tumpukan dan antrean, dari kelas daftar MFC. Contohnya menggunakan kelas yang berasal dari CList
, tetapi Anda dapat menggunakan CList
secara langsung kecuali Anda perlu menambahkan fungsionalitas.
Tumpukan
Karena koleksi daftar standar memiliki kepala dan ekor, mudah untuk membuat koleksi daftar turunan yang menipu perilaku tumpukan last-in-first-out. Tumpukan seperti tumpukan baki di kantin. Saat baki ditambahkan ke tumpukan, baki berada di atas tumpukan. Baki terakhir yang ditambahkan adalah yang pertama dihapus. Anggota kumpulan daftar berfungsi AddHead
dan RemoveHead
dapat digunakan untuk menambahkan dan menghapus elemen khususnya dari kepala daftar; dengan demikian, elemen yang terakhir ditambahkan adalah yang pertama dihapus.
Untuk membuat koleksi tumpukan
Dapatkan kelas daftar baru dari salah satu kelas daftar MFC yang ada dan tambahkan lebih banyak fungsi anggota untuk mendukung fungsionalitas operasi tumpukan.
Contoh berikut menunjukkan cara menambahkan fungsi anggota untuk mendorong elemen ke tumpukan, mengintip elemen atas tumpukan, dan memunculkan elemen atas dari tumpukan:
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(); } };
Perhatikan bahwa pendekatan ini mengekspos kelas yang mendasar CObList
. Pengguna dapat memanggil fungsi anggota apa pun CObList
, apakah masuk akal untuk tumpukan atau tidak.
Antrean
Karena koleksi daftar standar memiliki kepala dan ekor, juga mudah untuk membuat koleksi daftar turunan yang menipu perilaku antrean first-in-first-out. Antrean seperti barisan orang di kantin. Orang pertama yang mengantri adalah orang pertama yang dilayani. Ketika lebih banyak orang datang, mereka pergi ke akhir baris untuk menunggu giliran mereka. Anggota kumpulan daftar berfungsi AddTail
dan RemoveHead
dapat digunakan untuk menambahkan dan menghapus elemen khususnya dari kepala atau ekor daftar; dengan demikian, elemen yang terakhir ditambahkan selalu yang terakhir dihapus.
Untuk membuat koleksi antrean
Mendapatkan kelas daftar baru dari salah satu kelas daftar yang telah ditentukan sebelumnya yang disediakan dengan Microsoft Foundation Class Library dan menambahkan lebih banyak fungsi anggota untuk mendukung semantik operasi antrean.
Contoh berikut menunjukkan bagaimana Anda dapat menambahkan fungsi anggota untuk menambahkan elemen ke akhir antrean dan mendapatkan elemen dari depan antrean.
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(); } };