首页 > 其他分享 >DAY10 栈与队列part01

DAY10 栈与队列part01

时间:2024-07-26 20:29:01浏览次数:15  
标签:part01 pop 队列 int que E7% push DAY10 empty

 

理论基础

文章讲解:https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

232.用栈实现队列

 注意为什么要用两个栈

题目链接/文章讲解/视频讲解:https://programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97.html

 1 class MyQueue {
 2 public:
 3     stack<int> stIn;
 4     stack<int> stOut;
 5     MyQueue() {
 6     }
 7     
 8     void push(int x) {
 9         stIn.push(x);
10     }
11     
12     int pop() {
13         int result;
14         if(stOut.empty())
15         {
16             while(!stIn.empty())
17             {
18                 stOut.push(stIn.top());
19                 stIn.pop();
20             }
21         }
22         result=stOut.top();
23         stOut.pop();
24         return result;
25     }
26     
27     int peek() {
28         int result=this->pop();
29         stOut.push(result);
30         return result;
31     }
32     
33     bool empty() {
34         return (stIn.empty()&&stOut.empty());
35     }
36 };
37 
38 /**
39  * Your MyQueue object will be instantiated and called as such:
40  * MyQueue* obj = new MyQueue();
41  * obj->push(x);
42  * int param_2 = obj->pop();
43  * int param_3 = obj->peek();
44  * bool param_4 = obj->empty();
45  */

 

225. 用队列实现栈

题目链接/文章讲解/视频讲解:https://programmercarl.com/0225.%E7%94%A8%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0%E6%A0%88.html

 

 1 class MyStack {
 2 public:
 3     queue<int> que;
 4 
 5     /** Initialize your data structure here. */
 6     MyStack() {
 7 
 8     }
 9 
10     /** Push element x onto stack. */
11     void push(int x) {
12         que.push(x);
13     }
14 
15     /** Removes the element on top of the stack and returns that element. */
16     int pop() {
17         int size = que.size();
18         size--;
19         while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
20             que.push(que.front());
21             que.pop();
22         }
23         int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了
24         que.pop();
25         return result;
26     }
27 
28     /** Get the top element.
29      ** Can not use back() direactly.
30      */
31     int top(){
32         int size = que.size();
33         size--;
34         while (size--){
35             // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
36             que.push(que.front());
37             que.pop();
38         }
39         int result = que.front(); // 此时获得的元素就是栈顶的元素了
40         que.push(que.front());    // 将获取完的元素也重新添加到队列尾部,保证数据结构没有变化
41         que.pop();
42         return result;
43     }
44 
45     /** Returns whether the stack is empty. */
46     bool empty() {
47         return que.empty();
48     }
49 };

20. 有效的括号

题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html

 三种不匹配的情况:

左括号多——遍历结束栈不为空

右括号多——遍历未结束栈即为空

左右括号不匹配——右括号与栈顶部不匹配(技巧:遍历左括号时压栈元素为对应的右括号)

 1 class Solution {
 2 public:
 3     bool isValid(string s) {
 4         stack<int> sta;
 5         for(char c : s)
 6         {
 7             if(c=='(') sta.push(')');
 8             else if(c=='{') sta.push('}');
 9             else if(c=='[') sta.push(']');
10             else 
11             {
12                 if(sta.empty()||c!=sta.top()) return false;
13                 else sta.pop();
14             }
15         }
16         if(!sta.empty()) return false;
17         else return true;
18     }
19 };

1047. 删除字符串中的所有相邻重复项

 用字符串模拟栈即可 注意pop_back() push_back() string.back();

题目链接/文章讲解/视频讲解:https://programmercarl.com/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.html

 1 class Solution {
 2 public:
 3     string removeDuplicates(string s) {
 4         string res;
 5         for(char c : s)
 6         {
 7             if(res.empty()||c!=res.back()) res.push_back(c);
 8             else res.pop_back();
 9         }
10         return res;
11     }
12 };

 

标签:part01,pop,队列,int,que,E7%,push,DAY10,empty
From: https://www.cnblogs.com/xzdmzrc221202/p/18326193

相关文章

  • C++优先队列 涵盖各种易错,技巧,应用和原理(附手写代码)
    当然也可以不看==> 阅读我的文章前请务必先阅读此文章! 都是废话这个文章里有视频,不知道为什么一点开文章就会播放,可以先翻到最后暂停一下再回来看目录阅读文章须知引言优先队列的概念优先队列的创建优先队列的操作*还有一些不常用的:优先队列的技巧如果类型是结构......
  • 软考-软件设计师(3)-数据结构与算法:树、图、队列、查找算法、排序算法、霍夫曼编码/
    场景软考-软件设计师-数据结构与算法模块高频考点整理。以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。注:博客:霸道流氓气质-CSDN博客实现知识点树:节点的度、树的度、深度、高度、满二叉树、完全二叉树、平衡二叉树、B树、二叉排序树节点......
  • 代码随想录day10 || 232 栈实现队列, 225 队列实现栈,20 删除有效括号,1047 删除字符串相
    232实现队列//go本身并不支持原生的栈和队列结构,都是通过切片实现的//leetcodesubmitregionbegin(Prohibitmodificationanddeletion)typeMyQueuestruct{ Data[]int Sizeint}funcConstructor()MyQueue{ returnMyQueue{}}func(this*MyQueue)Push(......
  • Day10 栈和队列Part1
    任务232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)思路算是一个模拟类的题目,用py中,用列表加上限制条件表示栈(只能用pop表示对栈顶元素出栈处理)push:用stackIn保存入队元素pop:出队时,分三种情况,如果队列......
  • 算法入门篇(四)之栈和队列
    目录一、顺序栈、链栈1、顺序栈1.定义与存储结构2.特点3.适用场景2、链栈1.定义与存储结构2.特点3.适用场景3、总结二、顺序队列、链式队列1、顺序队列1.定义与存储结构2.特点3.循环队列4.适用场景2、链式队列1.定义与存储结构2.特点3.适用......
  • 数据结构之队列详解
    1.队列的概念以及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFo(FristinFristout)的特性入队列:进行插入才操作的一端称为队尾出队列:进行删除操作的一端称为队头2.队列的实现队列也可以使用数组和链表的结构实现,使用......
  • Java笔记day10
    一,不同方式创建多个线程并打印(1)定义了一个RunA实现Runnable接口,定义list存储数据,并重写了run方法 ,在run方法里定义循环向list中添加数据a;在main方法中创建a,b两个线程并引用该run方法,输出run对象的list和长度publicstaticvoidmainB(String[]args){RunAru......
  • Day10--mybatis多表连接查询学习(一对一、一对多、多对多)
    MyBatis是一个优秀的持久层框架,支持将SQL语句、存储过程以及高级映射转换成Java对象。下面是MyBatis处理一对一、一对多、多对多关系的方式及相应的代码示例。数据库表假设有四个表:user、orders、role、user_role---->创建代码(占位较长)放在文章末尾···首先先了解对应......
  • 栈,队列,链表
     栈堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈......
  • 嵌入式学习--DAY10:函数的调用
    一、函数参数和函数的值1.在定义函数中指定的形参,在未出现函数调用时,它们并不占用内存中的存储单元,只有在发生函数调用时,函数中的形参才会被分配内存单元。在调用结束后,形参所占的内存单元也会被释放。2.实参可以是常量、变量或表达式。在被定义的函数中,必须指定形参的类型,实......