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

python数据结构算法_python数据结构和算法

栈-先进后出

classStack():

def __init__(self):

self.items=[]

def push(self,item):

self.items.append(item)

def pop(self):returnself.items.pop()

def peek(self):return len(self.items)-1def isEmpty(self):return self.items ==[]

def size(self):returnlen(self.items)

stack=Stack()

stack.push(1)

stack.push(2)

stack.push(3)

print('栈顶元素下标:',stack.peek())

print(stack.isEmpty())

print(stack.pop())

print(stack.pop())

print(stack.pop())

2045584-20200630223302523-1423749429.png

队列-先进先出

classQueue():

def __init__(self):

self.items=[]

def enqueue(self,item):

self.items.insert(0,item)

def dequeue(self):returnself.items.pop()

def isEmpty(self):return self.items ==[]

def size(self):returnlen(self.items)

q=Queue()

q.enqueue(1)

q.enqueue(2)

q.enqueue(3)

print(q.dequeue())

print(q.dequeue())

print(q.dequeue())

2045584-20200630223339288-48837708.png

双向队列-头尾都能进出-实现判断回文

2045584-20200630230029233-903137533.png

2045584-20200630223439382-444565529.png

2045584-20200630223522365-1102206884.png

单链表-从头部插入节点

该数据结构主要是依靠head的不停改变,

2045584-20200630225304994-1086682056.png

classNode():

def __init__(self,item):

self.item=item

self.next=NoneclassLink():

def __init__(self):

#构造出一个空的链表

self._head=None

def add(self,item):

node=Node(item) #先创建一个节点,在内存中,再考虑怎样操作

node.next=self. _head

self._head=node

def travel(self):

cur=self._headwhilecur:

print(cur.item)

cur=cur.next

link=Link()

link.add(3)

link.add(4)

link.travel()

2045584-20200630225806704-1957410815.png

两个队列实现栈

队列是先进先出,栈是先进后出,所以只要把数据一个一个先进的后出即可

主要思想就是利用另一个队列来放主要数据队列的n-1个,然后主要数据队列就只剩下最后一个,取出即可,然后重复,就把最后的先出了

2045584-20200630230751352-1108694732.png

链表倒置

2045584-20200630231744273-391910770.png

2045584-20200630231948936-676269285.png

二叉树

classNode():

def __init__(self,item):

self.item=item

self.left=None

self.right=NoneclassTree():

def __init__(self):

self.root=None

def addNode(self,item):

node=Node(item)if self.root ==None:

self.root=nodereturncur=self.root

q=[cur] #用列表来进行遍历节点whileq:

nd= q.pop(0) #先把根结点取出if nd.left ==None:

nd.left=nodereturn

else:

q.append(nd.left)if nd.right ==None:

nd.right=nodereturn

else:

q.append(nd.right)

def travel(self):

cur=self.root

q=[cur]whileq:

nd= q.pop(0)

print(nd.item)ifnd.left:

q.append(nd.left)ifnd.right:

q.append(nd.right)

tree=Tree()

tree.addNode(1)

tree.addNode(2)

tree.addNode(3)

tree.addNode(4)

tree.addNode(5)

tree.addNode(6)

tree.addNode(7)

tree.travel()

2045584-20200630234523967-1906769607.png

排序二叉树

2045584-20200630234741870-1173552382.png

classNode():

def __init__(self,item):

self.item=item

self.left=None

self.right=NoneclassSortTree():

def __init__(self):

self.root=None

def addNode(self,item):

node=Node(item)

cur=self.rootif self.root ==None:

self.root=nodereturn

whilecur:

#向右插入if item>cur.item:if cur.right ==None:

cur.right=nodebreak

else:

cur=cur.right

#向左插入else:if cur.left ==None:

cur.left=nodebreak

else:

cur=cur.left

tree=SortTree()

alist= [3,8,5,7,6,2,9,4,1]fori in alist:

tree.addNode(i)

二分查找

2045584-20200701101250458-740318906.png

排序

1 冒泡排序

2045584-20200701101650348-751037072.png

2 快速排序

2045584-20200701102149289-1044843918.png

def sort(alist):

#基数

mid= alist[0]

low= 0high=len(alist)while low

#偏移highwhile lowmid:

high-=1

else:

alist[low]=alist[high]break#偏移lowwhile low

low+=1

else:

alist[high]=alist[low]break

if low==high:

alist[low]=midbreak

returnalist

alist=[6,1,24,5,3,7,4]

print(sort(alist))

BFS(广度优先搜索)

2045584-20200701105217954-721606211.png

由谁先展开就需要把它的子节点先遍历出来,然后接子节点的遍历,当然节点也是不唯一的,如第一个的CB当然可以换,不过换了后面也要需要注意前面的子节点遍历

2045584-20200701110441705-369797514.png

DFS(深度优先搜索)

一条路走到底,从头到尾的探索,结果也是不唯一的

2045584-20200701105500882-1928385134.png

2045584-20200701110516498-153713885.png

相关文章:

  • pythonfor循环语句例子_Python中的for循环语句
  • 乔布斯斯坦福大学演讲pdf_史蒂芬·保罗·乔布斯:2005斯坦福大学演讲【双语字幕】...
  • lua 去除小数点有效数字后面的0_Lua设计与实现--字符串篇
  • python贪吃蛇毕业设计_如何用Python写一个贪吃蛇AI
  • active mq topic消费后删除_面试官杠上消息队列?高可用、重复消费、丢失、顺序消息你懂吗?...
  • 天气预报c是什么意思_昨天“大雪”天气,对明年气候有什么影响?
  • 当退出python时是否释放全部内存_Python跑循环时内存泄露的解决方法
  • 为什么parsefloat加出来还是字符串_为什么股票资金流出了1000万,却还是封住了涨停板?知道套路的我眼泪都掉出来了...
  • java web项目github_3月份Github上“最热门”的十大开源项目,竟被Java承包了!
  • python协程实现一万并发_求你别再花大价钱学 Python 之协程高并发爬虫
  • 什么是python编程例子_什么是Python编程的逻辑判断?
  • python读取odb_python - 从.odb文件中提取von mises应力值 - 堆栈内存溢出
  • sqlserver union执行后变慢_Zabbix如何监控SQL Server服务状态
  • 事件总线第一次点击_干货Spring Cloud Bus 消息总线介绍
  • cgi web 调用多次启动_漏洞预警|Web系统管理工具Webmin远程命令执行高危漏洞分析(CVE201915107)...
  • php的引用
  • 2019.2.20 c++ 知识梳理
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Docker容器管理
  • ES2017异步函数现已正式可用
  • js作用域和this的理解
  • KMP算法及优化
  • Webpack 4 学习01(基础配置)
  • Windows Containers 大冒险: 容器网络
  • 初识 webpack
  • 多线程事务回滚
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 使用SAX解析XML
  • 说说动画卡顿的解决方案
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #### go map 底层结构 ####
  • #、%和$符号在OGNL表达式中经常出现
  • %check_box% in rails :coditions={:has_many , :through}
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)基于IDEA的JAVA基础1
  • **CI中自动类加载的用法总结
  • .Mobi域名介绍
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net对接阿里云CSB服务
  • .NET开源项目介绍及资源推荐:数据持久层
  • /bin/rm: 参数列表过长"的解决办法
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [ C++ ] STL---string类的模拟实现
  • [20150904]exp slow.txt
  • [Angular 基础] - 指令(directives)
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [bzoj1324]Exca王者之剑_最小割
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [LeetCode]—Copy List with Random Pointer 深度复制带“任意指针”的链表