栈和队列OJ刷题

制作不易,三连支持一下呗!!!

文章目录

  • 一.有效的括号
  • 二.用队列实现栈
  • 三.用栈实现队列
  • 四.设计循环队列


前言

上两篇博客介绍了栈和队列的结构与实现,这篇博客我们将用栈和队列的结构与思想来解决一些oj题目


一、有效的括号

题目链接:. - 力扣(LeetCode)

题目描述:

思路:遍历字符串,遇到左括号就入栈,遇到右括号就取栈顶元素,看是否是相匹配的左右括号,如果不是就直接返回false,如果是就pop出栈,继续进行上述操作

代码实现如下:

二、用队列实现栈

题目链接:. - 力扣(LeetCode)

题目描述:

 

思路:创建两个队列,插入数据时向其中不为空的队列插入数据,删除数据时,将不为空的队列中的数据倒入空队列中,直到不为空的队列只剩下一个数据,就是栈顶的元素,将这个元素删除即可。

代码如下:

三.用栈实现队列 

题目链接:. - 力扣(LeetCode)

题目描述:

思路: 创建一个栈pushst用来入数据,一个栈popst用来出数据,当popst为空时就将pushst中的数据全部倒入到popst中。

 

 

四.设计循环队列 

题目描述:. - 力扣(LeetCode)

题目描述:

可能大家看到循环队列首先想到的应该是用循环链表来实现,但是如果用链表会有一个比较麻烦的问题:假溢出(分不清空和满)

想要解决这个问题有两个方式:

1.用size来辅助判断

2.特殊判断,但是这样会有很多地方需要特殊判断

而且rear(队尾数据)不好取。

 

因此,使用链表来实现循环队列也可以,但是会十分麻烦,所以我们使用数组来实现循环队列

为了解决假溢出的问题,在数组实现时我们多开一个空间来避免这个问题。 

数组循环是通过下标的回绕来实现,具体操作我们是通过取模来实现下标的回绕。

代码实现如下:

 


 

总结

通过上面几道经典题目的练习,相信我们对栈和队列的结构更加熟悉!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值