9.5作业

栈与队列实现及括号匹配解析

代码解释:__init__:初始化两个空列表,分别作为输入栈in_stack和输出栈out_stack。 push:直接将元素 x 追加到输入栈 in_stack 。 pop:若输出栈 out_stack 为空,调用 _transfer 方法将输入栈元素转移到输出栈;然后弹出输出栈顶元素。 peek:若输出栈为空则先转移元素,再返回输出栈顶元素 。 empty:判断输入栈和输出栈是否都为空。  _transfer:循环弹出输入栈的元素,并压入输出栈,实现元素的逆序转移。

代码解释

 __init__ 方法:初始化两个双端队列 queue1 和 queue2,queue1 用于主要存储栈的元素queue2 用于辅助转移元素。 push 方法:直接将元素添加到 queue1 末尾。pop 方法:把 queue1 中除最后一个元素外的所有元素,依次转移到 queue2。此时 queue1 中剩下的最后一个元素就是栈顶元素,将其取出作为返回值。交换 queue1 和 queue2。top 方法:先调用 pop 方法取出栈顶元素,再通过 push 方法将该元素重新压入栈。 empty 方法:判断 queue1 是否为空,若为空则栈为空,返回 True;否则返回 False。

课堂笔记:

栈(stack)是一种只能在同一端进行插入或删除操作的线性表。 表中允许进行插入、删除操作的一
端称为栈顶(top),表的另一端 称为栈底(bottom)。
栈的插入操作通常称为进栈或入栈(push),栈的删除操作通常称为 退栈或出栈(pop)。

栈的主要特点:
1.后进先出,即后进栈的元素先出栈。
2.每次进栈的元素都作为新栈顶元素,每次出栈的元素只能是当前栈顶元素。
3.栈也称为后进先出表或者先进后出表。

有效的括号:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
    有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.每个右括号都有一个对应的相同类型的左括号。

判断一个只包含 (、)、[、]、{、} 的字符串是否符合括号的有效规则,即左括号必须用相同类型的右括号闭合,且要以正确的顺序闭合。

 栈:一种后进先出的数据结构。因为左括号需要等待对应的右括号来闭合,后遇到的左括号要先被闭合,符合栈的特性。

括号匹配规则:每一个右括号都必须有一个对应的相同类型的左括号。 左括号必须以正确的顺序闭合,比如 ({}) 是有效的,而 {(}) 是无效的。

解题思路:

 1.遍历字符串中的每个字符: 当遇到左括号((、[、{)时,将其压入栈中。

 当遇到右括号时,检查栈顶元素:  如果栈不为空且栈顶的左括号与当前右括号类型匹配(如栈顶是 ( 对应 ),[ 对应 ],{ 对应 }),则弹出栈顶的左括号,表示成功匹配一对。 如果栈为空,或者栈顶左括号与当前右括号类型不匹配,说明括号无效,直接返回 False。

2.遍历结束后,如果栈为空,说明所有左括号都被成功匹配,返回 True;如果栈不为空,说明有左括号没有被匹配,返回 False。

队列基本知识:

队列(queue)是一种只能在不同端进行插入或删除操作的线性表。 进行插入的一端称做队尾(rear),进行删除的一端称做队头或队首 (front)。
队列的插入操作通常称为进队或入队(push),队列的删除操作通常 称为出队或离队(pop)。

队列的主要特点:
先进先出,即先进队的元素先出队。
每次进队的元素作为新队尾元素,每次出队的元素只能是队头的 元素。
队列也称为先进先出表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值