接續昨天的選題,今天挑了一個 queue 相關的題目。
https://leetcode.com/problems/implement-stack-using-queues
Solution
題目的要求是使用兩個 queue (q1、q2) 來模擬 stack FILO 的行為。用紙筆簡單畫了一下,有了一點想法。
主要的想法是,在 stack pop 前,push() 就只塞到其中一個 queue 裡面。
在過程中,如果遇到:
empty():檢查兩個 queue 的 size
top():回傳當前 queue 的 back()
最後,當 stack pop() 的時候,持續 pop q1,並且將數值塞到 q2,直到 q1 為空。pop 的過程中,最後一個元素是 stack 的 top,要特別保留下來,並且不塞到 q2。
Note
STL Queue
member functions:
push()
pop()
front(): queue head, popped first
back(): queue tail, popped last
size()
empty()
C++ Class
Class 是 OOP 為了達成資料抽象 (abstraction) 與資料封裝 (encapsulation) 的手段,用來區分介面 (interface) 與實作 (implementation)。
在 C 的世界中,其實老早就有抽象的概念,將 declaration (.h) 與 definition (.c) 拆分開來。
在 class 的實作中,可以不用加上 this,直接訪問被定義的 member data 或 function。
C++ 的 class constructor 可以利用 initialization list 快速初始化 member data。
C++ class 中的 this 是一個指向 object 本身的 pointer。
C++ 的 class 還有 copy constructor、move constructor,還可以做 operator overloading,詳細的介紹之後有讀到再補充。(Rules of three/five)
class T { public: T() {} // constructor ~T() {} // destructor // member data // member function private: // members protected: // members };
Reference
https://cplusplus.com/reference/queue/queue/
https://hackmd.io/@Mes/MinerT_Class