前言之前就有刷代码随想录但奈何总是三天打鱼两天晒网而且刷的也很囫囵吞枣于是乎决定参加代码随想录训练营准备精刷一遍希望自己能坚持下去结营后自己的算法水平能更上一个level冲ingleetcode232.用栈实现队列题目链接leetcode232.用栈实现队列思路本题只要熟悉栈和队列的基本操作知道各自的出入元素规则便可以写出。在push数据的时候只要数据放进输入栈就好但在pop的时候操作就复杂一些输出栈如果为空就把进栈数据全部导入进来注意是全部导入再从出栈弹出数据如果输出栈不为空则直接从出栈弹出数据就可以了。代码classMyQueue{public:stackintstIn;stackintstOut;MyQueue(){}voidpush(intx){stIn.push(x);}intpop(){// 只有当stOut为空的时候再从stIn里导入数据导入stIn全部数据if(stOut.empty()){// 从stIn导入数据直到stIn为空while(!stIn.empty()){stOut.push(stIn.top());stIn.pop();}}intresultstOut.top();stOut.pop();returnresult;}intpeek(){intresthis-pop();// 直接使用已有的pop函数stOut.push(res);// 因为pop函数弹出了元素res所以再添加回去returnres;}boolempty(){returnstIn.empty()stOut.empty();}};leetcode225. 用队列实现栈题目链接leetcode225. 用队列实现栈思路本题的常规思路仍然是使用两个队列来实现栈。但是可以进一步优化使用一个队列来实现栈的功能。实现入栈比较容易和入队列一样直接调用push即可。实现出栈当用一个队列在模拟栈弹出元素的时候只要将队列头部的元素除了最后一个元素外 重新添加到队列尾部此时再去弹出元素就是栈的顺序了。代码classMyStack{public:queueintque;MyStack(){}voidpush(intx){que.push(x);}intpop(){intsizeque.size();size--;while(size--){// 将队列头部的元素除了最后一个元素外 重新添加到队列尾部que.push(que.front());que.pop();}intresultque.front();// 此时弹出的元素顺序就是栈的顺序了que.pop();returnresult;}inttop(){intsizeque.size();size--;while(size--){// 将队列头部的元素除了最后一个元素外 重新添加到队列尾部que.push(que.front());que.pop();}intresultque.front();// 此时获得的元素就是栈顶的元素了que.push(que.front());// 将获取完的元素也重新添加到队列尾部保证数据结构没有变化que.pop();returnresult;}boolempty(){returnque.empty();}};今天欠了两道题 leetcode20. 有效的括号 和 1047. 删除字符串中的所有相邻重复项抽空再补上吧。