制作不易,三连支持一下呗!!!
文章目录
- 一.有效的括号
- 二.用队列实现栈
- 三.用栈实现队列
- 四.设计循环队列
前言
上两篇博客介绍了栈和队列的结构与实现,这篇博客我们将用栈和队列的结构与思想来解决一些oj题目
一、有效的括号
题目链接:. - 力扣(LeetCode)
题目描述:
思路:遍历字符串,遇到左括号就入栈,遇到右括号就取栈顶元素,看是否是相匹配的左右括号,如果不是就直接返回false,如果是就pop出栈,继续进行上述操作。
代码实现如下:
二、用队列实现栈
题目链接:. - 力扣(LeetCode)
题目描述:
思路:创建两个队列,插入数据时向其中不为空的队列插入数据,删除数据时,将不为空的队列中的数据倒入空队列中,直到不为空的队列只剩下一个数据,就是栈顶的元素,将这个元素删除即可。
代码如下:
三.用栈实现队列
题目链接:. - 力扣(LeetCode)
题目描述:
思路: 创建一个栈pushst用来入数据,一个栈popst用来出数据,当popst为空时就将pushst中的数据全部倒入到popst中。
四.设计循环队列
题目描述:. - 力扣(LeetCode)
题目描述:
可能大家看到循环队列首先想到的应该是用循环链表来实现,但是如果用链表会有一个比较麻烦的问题:假溢出(分不清空和满)
想要解决这个问题有两个方式:
1.用size来辅助判断
2.特殊判断,但是这样会有很多地方需要特殊判断
而且rear(队尾数据)不好取。
因此,使用链表来实现循环队列也可以,但是会十分麻烦,所以我们使用数组来实现循环队列
为了解决假溢出的问题,在数组实现时我们多开一个空间来避免这个问题。
数组循环是通过下标的回绕来实现,具体操作我们是通过取模来实现下标的回绕。
代码实现如下:
总结
通过上面几道经典题目的练习,相信我们对栈和队列的结构更加熟悉!!!