classCQueue{stack<int> stack_in;stack<int> stack_out;public:CQueue(){while(!stack_in.empty()){stack_in.pop();//清空進棧}while(!stack_out.empty()){stack_out.pop();//清空入棧}}voidappendTail(int value){stack_in.push(value);//在進棧中直接插入元素}intdeleteHead(){if(stack_out.empty())//如果出棧是空,從進棧中加入元素{if(stack_in.empty())//如果進棧也是空表明棧內沒有元素 返回-1{return-1;}while(!stack_in.empty())//如果進棧不為空,將進棧中的元素都加入出棧中{stack_out.push(stack_in.top());stack_in.pop();}int out = stack_out.top();stack_out.pop();return out;}else{int out = stack_out.top();stack_out.pop();return out;}}};
02 包含min函數的棧
定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間復雜度都是 O(1)。 解題思路 方法一:建立兩個棧,一個棧負責正常的push,pop,另外一個棧負責存儲非嚴格遞減的輸入數據 當正常棧pop出的元素等于非非嚴格遞減棧的棧頂元素時,非嚴格遞減棧也pop棧頂元素
classMinStack{private:stack<int> stkNormal;stack<int> stkMin;public://方法一:建立兩個棧,一個棧負責正常的push,pop,另外一個棧負責存儲非嚴格遞減的輸入數據// 當正常棧pop出的元素等于非非嚴格遞減棧的棧頂元素時,非嚴格遞減棧也pop棧頂元素/** initialize your data structure here. */MinStack(){}//加入新元素的時候判斷是否是最小元素voidpush(int x){if(stkMin.empty()){stkMin.push(x);stkNormal.push(x);}else{if(x <= stkMin.top()){stkMin.push(x);}stkNormal.push(x);}}// pop的時候看看是不是最小元素voidpop(){if(stkNormal.top()== stkMin.top()){stkNormal.pop();stkMin.pop();}else{stkNormal.pop();}}inttop(){return stkNormal.top();}intmin(){return stkMin.top();}};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(x);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->min();*/
03 棧的壓入、彈出序列
解題思路用一個棧來模擬進棧操作
classSolution{public:boolvalidateStackSequences(vector<int>& pushed, vector<int>& popped){if(popped.size()==0){returntrue;}stack<int> pushStack;pushStack.push(pushed[0]);int j =0;for(int i =0; i < popped.size(); i++){while(pushStack.top()!= popped[i]){j++;//超出邊界等于失敗if(j >= pushed.size()){returnfalse;}pushStack.push(pushed[j]);}//棧為空表示失敗if(pushStack.empty()){returnfalse;}pushStack.pop();//棧為空補充元素if(pushStack.empty()&(i < popped.size()-1)){j++;//超出邊界等于失敗if(j >= pushed.size()){returnfalse;}pushStack.push(pushed[j]);}}returntrue;}};