題目描述
代碼解決
class MyQueue { public:stack<int> stIn; // 輸入棧,用于push操作stack<int> stOut; // 輸出棧,用于pop和peek操作MyQueue() {}void push(int x) {stIn.push(x); // 將元素壓入輸入棧}int pop() {// 如果輸出棧為空,則將輸入棧的元素轉移到輸出棧if(stOut.empty()){while(!stIn.empty()){stOut.push(stIn.top()); // 將輸入棧的頂部元素壓入輸出棧stIn.pop(); // 彈出輸入棧的頂部元素}}int result=stOut.top(); // 取輸出棧的頂部元素stOut.pop(); // 彈出輸出棧的頂部元素return result; // 返回彈出的元素}int peek() {// 如果輸出棧為空,則將輸入棧的元素轉移到輸出棧if(stOut.empty()){while(!stIn.empty()){stOut.push(stIn.top()); // 將輸入棧的頂部元素壓入輸出棧stIn.pop(); // 彈出輸入棧的頂部元素}}return stOut.top(); // 返回輸出棧的頂部元素(不彈出)}bool empty() {return stIn.empty() && stOut.empty(); // 判斷輸入棧和輸出棧是否都為空} };
類
MyQueue
有兩個私有成員變量:stIn
和stOut
,分別用于存儲入隊和出隊的元素。構造函數
MyQueue()
沒有參數,它只是初始化了兩個棧。
push(int x)
方法用于將元素x
入隊。它將元素x
壓入stIn
棧。
pop()
方法用于出隊,并返回隊首元素。如果stOut
棧為空,說明隊列中沒有元素可以出隊,因此需要將stIn
棧中的元素全部移到stOut
棧中。這可以通過一個循環來實現,每次將stIn
棧的頂部元素移到stOut
棧中,然后出棧。最后,返回stOut
棧的頂部元素。
peek()
方法用于查看隊首元素,但不將其出隊。它與pop()
方法類似,但是不將隊首元素出隊,而是返回它。
empty()
方法用于判斷隊列是否為空。如果stIn
棧和stOut
棧都為空,則返回true
;否則返回false
。