代码随想录算法训练营第十天| 232.用栈实现队列,225. 用队列实现栈

第九天学kmp 一刷该跳就跳(doge)

232.用栈实现队列

力扣

1. 注意:default constructor留空即可,初始化两个stack是在所有方法的外面建(public后面)

2. 重点是peek()和pop(): 使用两个stack(可以想象成相对摆放?)。需要pop时,如果stack-out为空,就把stack-in中的元素【全部导入】。

pop的具体实现为:

int pop(){
    if(s2.empty()){
        while(!s1.empty()){ //还未全部导出
            int oldTop = s1.top();
            s1.pop(); //别忘了这步
            s2.push(oldTop);
        }
    
    int newTop = s2.top();
    s2.pop(); //peek & pop的区别在这步
    return newTop;

3. 注意stack可用的方法为:, push, top(仅提取top不去除),pop(仅pop不返回任何值)。尤其注意后两个的用法

4. peek可引用pop

int peek(){
    int res = this->pop(); //注意使用已有的pop函数是【this->pop()】
    s2.push(res);
    return res;
}

 

 

 225. 用队列实现栈

力扣

用一个queue的解决方法:把队尾之外的所有点排到队尾后面,让队尾变成队头。比如原来是123,则变成312,再pop掉3。

具体代码为:

int pop(){
    int count = 0;
    while(count < q.size()-1){
        int toPush = q.front();
        q.pop();
        q.push(toPush);
        count++;
    }

    //此时的顺序就是对的了
    int front = q.front();
    q.pop();
    return front;
}

注意:top()直接用back()解决即可

你可能感兴趣的:(c++,数据结构,leetcode,算法)