当前位置: 首页 > wzjs >正文

青岛胶东建设国际机场网站手机版谷歌浏览器入口

青岛胶东建设国际机场网站,手机版谷歌浏览器入口,广州市建筑业联合会,企业网站建设项目描述Python数据结构进阶:栈与队列的实现与应用 一、栈(Stack) 1.1 定义与特性 后进先出(LIFO)原则: 最后添加的元素最先被移除 类比场景:网页浏览器的返回按钮、餐厅盘子叠放1.2 核心操作 操作时…

Python数据结构进阶:栈与队列的实现与应用


一、栈(Stack)

1.1 定义与特性

后进先出(LIFO)原则:
最后添加的元素最先被移除
类比场景:网页浏览器的返回按钮、餐厅盘子叠放

1.2 核心操作

操作时间复杂度功能说明
push()O(1)元素入栈
pop()O(1)移除栈顶元素
peek()O(1)查看栈顶元素
is_empty()O(1)判断栈是否为空

1.3 典型应用场景

案例1:括号匹配验证

输入示例:"([{}])" → 有效

错误示例:"({[)]}" → 无效

案例2:逆波兰表达式求值

表达式:["4", "13", "5", "/", "+"] → 等价于 4 + (13 / 5)


二、队列(Queue)

2.1 定义与特性

先进先出(FIFO)原则:
最先添加的元素最先被移除
类比场景:超市结账排队、打印机任务队列

2.2 核心操作

操作时间复杂度功能说明
enqueue()O(1)元素入队
dequeue()O(1)移除队首元素
front()O(1)查看队首元素
is_empty()O(1)判断队列是否为空

2.3 典型应用场景

案例1:任务调度系统

处理顺序:请求1 → 请求2 → 请求3

案例2:广度优先搜索(BFS)

遍历顺序:层级1 → 层级2 → 层级3


三、Python实现代码

3.1 栈的实现(三种方式)

# 方式1:使用列表实现
class ListStack:def __init__(self):self.items = []def push(self, item):self.items.append(item)def pop(self):return self.items.pop()def peek(self):return self.items[-1] if not self.is_empty() else Nonedef is_empty(self):return len(self.items) == 0# 方式2:使用collections.deque
from collections import deque
class DequeStack:def __init__(self):self.container = deque()def push(self, val):self.container.append(val)def pop(self):return self.container.pop()def peek(self):return self.container[-1] if self.container else None# 方式3:自定义链表实现
class Node:def __init__(self, value):self.value = valueself.next = Noneclass LinkedListStack:def __init__(self):self.top = Nonedef push(self, item):new_node = Node(item)new_node.next = self.topself.top = new_nodedef pop(self):if self.top is None:raise Exception("Stack is empty")value = self.top.valueself.top = self.top.nextreturn value

3.2 队列的实现(两种方式)

# 方式1:使用deque双端队列
from collections import deque
class ListQueue:def __init__(self):self.items = deque()def enqueue(self, item):self.items.append(item)def dequeue(self):return self.items.popleft() if self.items else Nonedef front(self):return self.items[0] if self.items else None# 方式2:循环数组实现
class CircularQueue:def __init__(self, capacity):self.capacity = capacityself.queue = [None]*capacityself.head = 0self.tail = 0self.size = 0def enqueue(self, item):if self.size == self.capacity:raise Exception("Queue is full")self.queue[self.tail] = itemself.tail = (self.tail + 1) % self.capacityself.size += 1def dequeue(self):if self.size == 0:return Noneitem = self.queue[self.head]self.head = (self.head + 1) % self.capacityself.size -= 1return item

四、每日挑战:括号匹配验证

4.1 问题描述

实现函数 is_valid_parentheses(s)

输入示例: 
"()[]{}" → 返回True
"([)]"   → 返回False
"({[]})" → 返回True

4.2 实现思路

  1. 创建空栈和映射表 {')': '(', ']': '[', '}': '{'}
  2. 遍历每个字符:
    • 左括号:入栈
    • 右括号:检查栈顶是否匹配
  3. 最后检查栈是否为空

4.3 参考答案

def is_valid_parentheses(s: str) -> bool:stack = []mapping = {')': '(', ']': '[', '}': '{'}for char in s:if char in mapping.values():stack.append(char)elif char in mapping.keys():if not stack or stack[-1] != mapping[char]:return Falsestack.pop()return not stack

五、扩展练习

  1. 实现支持最小值查询的栈(要求所有操作O(1)时间复杂度)
  2. 用队列实现栈的push/pop/top操作
  3. 设计循环队列实现(参考Leetcode 622题)
  4. 实现逆波兰表达式计算器(参考Leetcode 150题)

通过这个结构化的教程,学习者可以系统掌握栈和队列的核心概念,并通过代码实践和挑战题目深化理解。建议按照以下学习路径:

  1. 理解基本概念 → 2. 手写实现代码 → 3. 完成每日挑战 → 4. 尝试扩展练习
http://www.dtcms.com/wzjs/216964.html

相关文章:

  • 湖南张家界建设局网站网站链接分析工具
  • 个人可以建设头条网站吗seo排名优化价格
  • 学校网站建设多少钱百度推广一天烧多少钱
  • 工信部网站备案的需要幕布下载百度免费
  • 35公司做的网站漏洞短链接在线生成免费
  • 设计教育教学活动的注意事项google seo
  • 福建省网络公司排名企业站seo案例分析
  • 深圳网站制作的公司有哪些品牌网络推广方案
  • 做网站价格中国今天最新军事新闻
  • 注册个网站要多少钱网络广告发布
  • 南昌seo关键词排名苏州seo整站优化
  • 图片网站建设色盲测试图片
  • wordpress建站环境北京网站建设公司优势
  • 怎么创建网站免费的网络运营怎么学
  • 涛飞网站建设干净无广告的搜索引擎
  • 有什么好看的网站资源网站关键字优化公司
  • 科技设计网站微信群发软件
  • 宝安营销型网站设计惠州seo按天付费
  • 福州网站建设哪家公司好什么是网络营销平台
  • 做家政服务类网站的要求百度排行榜明星
  • 淄博网站制作设计公司网络推广一般都干啥
  • 用word制作网页网站排名seo教程
  • 做防腐木花架的网站佛山网站开发公司
  • 怎样做网站发布信息万能的搜索引擎
  • 网站开发企业互联网舆情
  • 单页面网站建设哪个杭州seo好
  • 杭州网站建设哪个好sem数据分析
  • 编程培训机构需要什么资质连云港seo优化公司
  • 小金县建设局网站网络服务有限公司
  • 怎么做自己的cms导购网站深圳外贸网络推广