python每日算法 | 数据结构基础:栈与队列以及经典的迷宫问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 创作不易,来了的客官点点关注,收藏,订阅一键三连❤😜        



前言

程序=数据结构+算法,算法是数学理论和工程实现的杂糅,是一个十分有趣神奇的学问。搞懂算法用另一种视角看编程,又会是一种全新的感受,如果你也在学习算法,不妨跟主任萌新超差一起学习,拿下算法!


系列文章目录

python每日算法 | 基数排序PK快速排序,手撕基数排序算法!

python每日算法 | 图文+生动实例详解桶排序

python每日算法 | 揭开计数排序的秘密


概述

本期的内容将介绍数据结构基础知识(一):栈与队列以及最经典的迷宫问题。


目录

前言

系列文章目录

概述

超超python每日算法思维导图

数据结构基础知识

数据结构是什么?

数据结构的逻辑结构

线性结构

列表

栈是什么

栈的基本操作

用python实现栈

栈的应用:括号匹配问题

队列

队列是什么

双向队列

队列的实现方式:环形队列

用python实现队列

python队列内置模块:deque

队列的应用:使用deque实现Linux的tail命令

迷宫问题

栈:深度优先搜索

代码实现

队列:广度优先搜索

代码实现


超超python每日算法思维导图

数据结构基础知识

数据结构是什么?

数据结构是指相互之间存在着一种或多种关系的数据元素的集合该集合中数据元素之间的关系组成。简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中

比如:列表、集合与字典等都是一种数据结构。

N.Wirth说过: “程序=数据结构+算法”

数据结构的逻辑结构

数据结构按照其逻辑结构可分为线性结构、树结构、图结构。

线性结构

线性结构:数据结构中的元素存在一对一的相互关系,例如列表。

树结构:数据结构中的元素存在一对多的相互关系,例如堆。

图结构:数据结构中的元素存在多对多的相互关系

列表

列表(python中叫列表,其他语言称数组)是一种基本数据类型。

关于列表的问题:

列表中的元素是如何存储的?

32位机器上一个整数占4个字节,一个地址占4个字节,64位一个地址占8个字节。

现有如下列表:

1

2

3

4

5

以32位机器为例,数组的存储是这样的:

若元素1的内存地址位100,则元素2的内存地址为104,以此类推,那么a[2]=100+2*4=108。

而对于列表,若1的地址为200,2-->300,3--88,列表是现通过查找地址,然后通过一个地址查找对应一个元素。

200

300

88

数组和列表的区别:

1.数组的元素类型需要一致,列表的元素类型不需要一致;

2.数组的长度是固定的,python的列表可以无限长

列表的基本操作:插入元素、删除元素……这些操作的时间复杂度是多少?

插入(insert):O(n),每次插入都将把前后的元素移动

删除(pop):O(n),每次删除之后会把后面的地址往前移

栈是什么

栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表

栈的特点:后进先出LIFO(last-in, first-out)

例如图中的一摞书,最后一本数是最先进来的,同时也是最先出去的。

栈的概念:栈顶、栈底

栈的基本操作

进栈(压栈):push,(在一摞书上再放一本书)

出栈:pop(将一摞书最上面的书拿走)

取栈顶:gettop(我只看最上面的书是什么)

用python实现栈

栈的实现:使用一般的列表结构即可实现栈

进栈:lst.append()

出栈:lst.pop()

取栈顶:lst[-1]

class stack:

    def __init__(self):

        self.stack = []

 

    def push(self,element):

        self.stack.append(element)  # 进栈操作

 

    def pop(self):

        return self.stack.pop()  # 删除栈顶

 

    def get_top(self):

        if len(self.stack) > 0:  # 确保栈内有元素

&nb
NISQ时代量子-经典混合计算落地实战指南 量子计算并非替代经典计算机的‘超级CPU’,而是一种面向特定数学结构(如QUBO、哈密顿量期望值)的加速范式。其核心原理在于利用量子叠加干涉,在组合优化、分子模拟等存在维度诅咒的问题上实现指数或多项式级加速。技术价值体现在NISQ设备有限资源下,通过问题编码、三明治架构噪声鲁棒性校准,达成可测量的生产级提速。典型应用场景包括物流路径优化、药物分子能量计算、金融风险建模等需高精度求解的工业瓶颈环节。本文聚焦QUBO转化VQE应用两大热词,详解从现实问题到量子线路的工程化映射链条。 阅读详情

相关推荐

数据结构基础:邻接矩阵邻接表的C语言实现核心操作

图是数据结构中用于表示多对多复杂关系的重要模型,由顶点和边构成,其核心在于如何高效地表示和操作实体间的连接。图的两种基本存储结构——邻接矩阵和邻接表,分别以二维数组和数组加链表的形式实现,前者适合稠密图且查询快,后者适合稀疏图且更省空间。理解这两种表示方法是实现图算法基础,具有极高的技术价值,广泛应用于社交网络的好友推荐、物流路径规划等场景。本文以C语言为例,详细剖析了图的创建、顶点边的增删查改、以及深度优先搜索(DFS)和广度优先搜索(BFS)这两种基础遍历算法的实现,其中BFS在无权图中是求解最短路

chulilang8944的博客 384

[python算法基础数据结构]利用解决迷宫问题+networkx可视化

注意这里对不同的点进行了标记,方便后面进行可视化'''返回上,下,左,右的坐标'''stack.push((start_x,start_y)) #添加起始位置current_node=stack.peek() #当前节点if current_node==(end_x,end_y):#如果是终点self.maze[start_x][start_y]='S' #标记起点self.maze[end_x][end_y]='E' #标记终点#搜索上下左右四个方向,看能不能走。

usamimeri的博客 1277

从零到蓝桥杯:如何为不同编程语言选择最佳备赛策略

本文深入解析了蓝桥杯竞赛中C++、Java和Python三大编程语言的优劣势,提供了针对不同题型的备赛策略和实战技巧。从执行效率、内存消耗到标准库应用,帮助选手根据自身优势选择最佳语言,并给出具体的训练方案和资源推荐,助力参赛者在蓝桥杯中取得优异成绩。

weixin_29008691的博客 447

[Python]迷宫问题

代码: # 迷宫 maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 0, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 1, 0, 0, 0, 0, 1], [1, 0, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 1, 0, 0, .

qq_41604569的博客 1940

python 迷宫问题

mias = [[1, 0, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 1, 0, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1], [1, 1, 1, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 1, 1, 1, 0, 1, 1], [1, 1, .

m0_56813803的博客 751

Python解决迷宫问题

搜索问题——

wangcheng_BI的博客 2532

Python-迷宫问题-递归非递归

本文使用递归,非递归,深度优先,广度优先,算法探索迷宫,且用Python turtle包绘制出迷宫,使迷宫过程可视化。

Legalliar的博客 1797

Python每日一题之迷宫队列实现BFS)

题目求字典序最小的最短路径 在每次扩散下一层(往BFS的队列中加入下一层的结点)时,按字典序“D

qq_65144447的博客 714

少儿Python每日一题(24):迷宫问题

本次的题目如下所示(题目来源:蓝桥杯):编程实现:两名宇航员在探索一个未知行星,行星上有一些障碍物,这些障碍物用数字1表示,没有障碍物用数字0表示。行星被表示成一个N*M的矩阵。探索过程中两名宇航员走散了。已知A宇航员的位置(x1,y1)和B宇航员的位置(x2,y2),请你帮助A宇航员找到一条最短路径到达B宇航员的位置,并输出最短路径的长度(不包括起点)。注意:1.x1、x2表示矩阵的行号,y1、y2表示矩阵的列号;2.左上角的位置为(0,0);3.A、B宇航员的位置只能在数字0上;

pollybird的专栏 981

蓝桥杯:迷宫————Python题解

题目 maze.txt文件内容如下: 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 01000000001010100011010000101000001010101011001011 0001111100000010100001001010001

Kinght_123的博客 574

突破算法迷宫:精选50道-算法刷题指南

本文为广大算法学习者提供了50道LeetCode经典算法题的详细解析和实战攻略。涵盖了二分查找、滑动窗口、数组、链表、二叉树、TopK、设计题、动态规划等多个重要领域。每个算法题都附有题目链接,算法原理,示例代码以及解题思路,旨在帮助读者深入理解算法核心概念,掌握解题技巧,提高编程能力。

记录我的学习历程 1088

7天掌握数据结构算法:LeetCode-Book高效学习完全指南

你是否曾经面对算法题目感到无从下手?是否在技术面试中因为算法问题而错失良机?LeetCode-Book开源项目正是为解决这一痛点而生,它为你提供了一个系统化、结构化的数据结构算法学习解决方案。这个项目汇集了《图解算法数据结构》、《剑指Offer》和《Krahets 笔面试精选88题》三大经典题库的完整题解,支持Python、Java、C++三种编程语言实现,是程序员提升算法能力的理想选择。 #

gitblog_01010的博客 667

【信息科学工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1159

推荐几本编程启蒙书籍

1、《啊哈编程星球:一本书入门Python和C++》 (2019.09) 适用年龄:小学一年级或初学计算机编程的一本启蒙教材,注意这本书的所用语言是2种:C++和python,建议选择其中一种语言来阅读和使用 这本书的另一个作用就是可以练习打字 编辑推荐 边看故事边玩 游戏,边闯关边学习新知识,让孩子轻松学本领!本书附赠超值游戏通关秘钥 丰富动画视频课程! 内容简介 欢迎来到“啊哈编程星球”。这本书是面向中小学生的编程入门书籍。在这里,你将使用循环结构解救被困的人工...

青少年趣味编程 9965

蓝桥杯国赛进阶:C++算法实战练习策略全解析

算法是计算机科学的核心基础,其本质是通过一系列指令高效解决特定问题的计算模型。从数据结构算法的基本原理出发,理解递归、分治、动态规划等经典思想,是构建高效程序的关键。掌握这些底层原理,不仅能提升代码性能,更能培养严密的计算思维,在工程实践中应对复杂逻辑挑战。在各类技术竞赛和实际开发场景中,算法能力直接决定了解决方案的优劣执行效率。本文聚焦于如何通过系统化练习,将算法知识转化为实战能力,特别探讨了C++标准模板库(STL)的应用快速幂等核心算法的实现,旨在帮助学习者在蓝桥杯等竞赛中有效提升编程问题解决

weixin_34245082的博客 449

N诺机试题解析:高频算法解题技巧实战

算法数据结构是编程能力的核心基础,其原理在于通过特定计算模型高效处理数据。在技术面试和工程实践中,掌握常见算法能显著提升问题解决效率,尤其在字符串处理、二叉树遍历等高频场景。以滑动窗口算法为例,它通过动态维护子串边界,将时间复杂度优化至O(n),广泛应用于最长无重复子串等问题。动态规划则通过状态转移方程解决最值问题,如经典的背包问题。本文基于N诺平台真题,详解双指针、DFS/BFS等算法的实战应用,并提供模块化代码模板调试技巧,帮助开发者系统提升机试通过率。

weixin_30924239的博客 395

上海市计算机学会乙组月赛题解合集(2020-2026):从“螺旋坐标”到“平衡二叉树”的保姆级刷题路线

本文提供上海市计算机学会乙组月赛(2020-2026)的系统化攻略,从螺旋坐标到平衡二叉树的进阶路线,涵盖竞赛认知、核心知识体系拆解、个性化训练方案及实战技巧。帮助参赛者高效刷题,掌握数据结构算法应用,提升竞赛成绩。

weixin_30580341的博客 532

2024年最适合小学生参加的Python编程比赛全攻略(含蓝桥杯/信奥赛报名指南)

本文详细解析2024年最适合小学生参加的Python编程比赛,包括蓝桥杯和信奥赛等热门赛事。提供从入门到夺冠的科学备赛路径,涵盖考级类竞技类赛事特点、备赛时间表及训练方法,助力家长和孩子高效规划编程学习路线。

weixin_30733003的博客 127

AI应用架构实战:从RAG、智能体到向量数据库的融合设计

在数字化转型浪潮中,人工智能(AI)软件工程的结合正催生新一代应用架构。其核心原理在于,通过大语言模型(LLM)等基础AI能力,赋予系统理解、推理和生成自然语言等认知功能。这一融合的技术价值在于,能够将非结构化数据转化为可操作的智能,从而驱动业务流程自动化决策智能化。典型的应用场景包括智能问答、文档分析自动报告生成等。本文聚焦于实现此类智能系统的关键技术路径,深入探讨了检索增强生成(RAG)技术如何结合向量数据库构建专属知识库,以及如何利用智能体(Agent)框架进行复杂任务编排,为构建可靠、高效的生

angou6476的博客 310
上一篇: Linux进阶 | Docker Swarm+Prometheus+Grafana实现web服务集群的监控
下一篇: 超说网络NO.5 | 超详细全方位介绍Web 与 HTTP(运维面试必考点)
chaochao️
博客等级 码龄5年 550粉丝 60原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaochao️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值