- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构基础什么是数据结构?算法基础简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。N.Wirth: “程序=数据结构+算法”列表算法基础列表:在其他编程语言中称为“数组”,是一种基本的数据结构类型。关于列表的问题:列表中元素使如何存储的?列表提供了哪些基本的操作?这些操作的时间复杂度是多少?栈栈(Stack)是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表。栈的特点:后进先出(last-in, first-out)栈的概念:栈顶栈底栈的基本操作:进栈(压栈):push出栈:pop取栈顶:gettop算法基础栈的Python实现算法基础不需要自己定义,使用列表结构即可。进栈函数:append出栈函数:pop查看栈顶函数:li[-1]栈的应用——括号匹配问题算法基础括号匹配问题:给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配。例如:()()[]{} 匹配([{()}]) 匹配[]( 不匹配[(]) 不匹配括号匹配问题——实现算法基础def check_kuohao(s): stack = [] for char in s: if char in {(, [, {}: stack.append(char) elif char == ): if len(stack) 0 and stack[-1] == (: stack.pop() else: return False elif char == ]: if len(stack) 0 and stack[-1] == [: stack.pop() else: return False elif char == }: if len(stack) 0 and stack[-1] == {: stack.pop() else: return False if len(stack) == 0: return True else: return False栈的应用——迷宫问题给一个二维列表,表示迷宫(0表示通道,1表示围墙)。给出算法,求一条走出迷宫的路径。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,0,1,0,0,1], [1,0,1,1,1,0,1,1,0,1], [1,1,0,0,0,0,0,0,0,1], [1,1,1,1,1,1,1,1,1,1]]起点终点算法基础解决思路算法基础在一个迷宫节点(x,y)上,可以进行四个方向的探查:maze[x-1][y], maze[x+1][y], maze[x][y-1], maze[x][y+1]思路:从一个节点开始,任意找下一个能走的点,当找不到能走的点时,退回上一个点寻找是否有其他方向的点。方法:创建一个空栈,首先将入口位置进栈。当栈不空时循环:获取栈顶元素,寻找下一个可走的相邻方块,如果找不到可走的相邻方块,说明当前位置是死胡同,进行回溯(就是讲当前位置出栈,看前面的点是否还有别的出路)迷宫问题——栈实现算法基础dirs = [lambda x, y: (x + 1, y), lambda x, y: (x - 1, y), lambda x, y: (x, y - 1), lambda x, y: (x, y + 1)]def mgpath(x1, y1, x2, y2): stack = [] stack.append((x1, y1)) while len(stack) 0: # 栈不空时循环 curNode = stack[-1] # 查看栈顶元素 if curNode[0] == x2 and curNode[1]: # 到达终点 for p in stack: print(p) break for dir in dirs: nextNode = dir(*curNode) if mg[nextNode[0]][nextNode[1]] == 0: # 找到了下一个方块 stack.append(nextNode) mg[nextNode[0]][nextNode[1]] = -1 # 标记为已经走过,防止死循环 break else: mg[curNode[0]][curNode[1]] = -1 # 死路一条 stack.pop() return False队列算法基础队列(Queue)是一个数据集合,仅允许在列表的一端进行插入,另一端进行
您可能关注的文档
- 浙江电信综合业务展示厅设计规划(沟通方案).ppt
- 压缩机全系列产品介绍.ppt
- 电能计量装置技术管理规程.ppt
- 第十四课 感情贯穿法.ppt
- 第五课 联想拓展法.ppt
- 自行车体育旅游产业发展概念规划及近期行动计划.ppt
- 电机第一讲 电机与拖动基础.ppt
- 罗格朗集成吊顶产品培训.ppt
- 电能表现场校验培训课件.ppt
- 第五次课 古典诗歌鉴赏.ppt
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (915).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (1092).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (1171).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (927).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (971).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (1101).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (1083).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (1097).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (1090).docx
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (1087).docx
文档评论(0)