0910:
1.有效的括号--对应LeedCode20
解答:
测试结果:
2.用栈实现队列--对应LeedCode232
解答:
测试结果:
3.用队列实现栈--对应LeedCode225
思路:
为了满足栈的特性,我们可以使用两个队列实现栈的操作,其中queue1用于存储栈内的元素,queue2作 为入栈操作的辅助队列。
入栈操作时,首先将元素入队到queue2,然后将 queue1的全部元素依次出队并入队到queue2,此时queue2的前端的元素即为新入栈的元素,再将queue1和queue2互换,则queue1的元素即为栈内的元素,queue1的前端和后端分别对应栈顶和栈底。
由于每次入栈操作都确保queue1的前端元素为栈顶元素,因此出栈操作和获得栈顶元素操作都可以简单实现 出栈操作只需要移除queue1的前端元素并返回即可,获得栈顶元素操作只需要获得queue1的前端元素并返回即可(不移除元素)。
代码:
测试结果:
0911:
1.栈和队列的基础知识
1.1栈(Stack),也称为堆栈,它是一种特殊的线性表,只允许在表的一端进行插入和删除操作。允许在表操作的一端称为栈顶(Top),另一端称为栈底(Bottom)。栈顶是动态变化的,它由一个称为栈顶指针的变量指示。当表中没有元素时,称为空栈。栈的插入操作称为入栈或进栈,删除操作称为出栈或退栈。
1.2队列(queue)是一种只能在不同端进行插入或删除操作的线性表。 进行插入的一端称做队尾(rear),进行删除的一端称做队头或队首 (front)。队列的插入操作通常称为进队或入队(push),队列的删除操作通常 称为出队或离队(pop)。
2.删除字符串中的所有相邻重复项 --对应LeetCode 1047
解答:
3.逆波兰表达式求值--对应 LeetCode 150
思路:
计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式,如果遇到操作数,则将操作数入栈;如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。
解答:
测试结果: