python实现堆栈、队列
一、利用python列表实现堆栈和队列
堆栈:
堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出。
我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的append()和pop()方法可以实现栈的出栈pop和入栈push的操作,list.append(obj)意思是向列表添加一个对象obj,list.pop(index=-1)意思是删除指定位置的对象,默认是最后一个对象,也就是说list.pop(),是删除列表中下标最大的元素。
# 后进先出
class Stack():
def __init__(self,size):
self.size=size
self.stack=[]
self.top=-1 def push(self,x): # 入栈之前检查栈是否已满
if self.isfull():
raise exception("stack is full")
else:
self.stack.append(x)
self.top=self.top+1 def pop(self): # 出栈之前检查栈是否为空
if self.isempty():
raise exception("stack is empty")
else:
self.top=self.top-1
self.stack.pop() def isfull(self):
return self.top+1 == self.size
def isempty(self):
return self.top == '-1'
def showStack(self):
print(self.stack) s=Stack(10)
for i in range(6):
s.push(i)
s.showStack()
for i in range(3):
s.pop()
s.showStack() """
类中有top属性,用来指示栈的存储情况,初始值为1,一旦插入一个元素,其值加1,利用top的值乐意判定栈是空还是满。
执行时先将0,1,2,3,4,5依次入栈,然后删除栈顶的前三个元素
"""
队列:
队列是一种先进先出的数据类型,它的跟踪原理类似于在超市收银处排队,队列里的的第一个人首先接受服务,
新的元素通过入队的方式添加到队列的末尾,而出队就是将队列的头元素删除。
我们可以设置一个类,用列表来存放栈中元素的信息,利用列表的append()和pop()方法可以实现队列的入队enqueue和出队dequeue的操作,
上面栈一个元素每次出去是列表的最后一个,直接用list.pop()出栈,而出队列每次是第一个,所以要用list.pop(0)出队列
# 先进先出
class Queue(): def __init__(self,size):
self.size=size
self.front=-1
self.rear=-1
self.queue=[] def enqueue(self,ele): # 入队操作
if self.isfull():
raise exception("queue is full")
else:
self.queue.append(ele)
self.rear=self.rear+1 def dequeue(self): # 出队操作
if self.isempty():
raise exception("queue is empty")
else:
self.queue.pop(0)
self.front=self.front+1 def isfull(self):
return self.rear-self.front+1 == self.size
def isempty(self):
return self.front == self.rear
def showQueue(self):
print(self.queue) q=Queue(10)
for i in range(6):
q.enqueue(i)
q.showQueue()
for i in range(3):
q.dequeue()
q.showQueue()
print(q.isempty()) """
类中设置两个属性分别为front和rear来模拟队列的头尾指针,通过它们值的关系可以判定队列是空还是满
"""
python实现堆栈、队列的更多相关文章
- python实现堆栈与队列的方法
python实现堆栈与队列的方法 本文实例讲述了python实现堆栈与队列的方法.分享给大家供大家参考.具体分析如下: 1.python实现堆栈,可先将Stack类写入文件stack.py,在其它程序 ...
- python之消息队列
引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题.消息服务擅 ...
- 013实现使用两个堆栈队列(keep it up)
实现使用两个堆栈队列 FIFO队列是一种数据结构(FIFO),后堆叠前进出的数据结构的(FILO). 两个栈实现的最简单的方法就是排队:队列中的第一个推栈, 队列将数据顺序的第一个堆栈推入第二堆叠 ...
- Python RabbitMQ消息队列
python内的队列queue 线程 queue:不同线程交互,不能夸进程 进程 queue:只能用于父进程与子进程,或者同一父进程下的多个子进程,进行交互 注:不同的两个独立进程是不能交互的. ...
- python 两个队列进行对比
python 两个队列进行对比 list01 = [1,2,3,4] list02 = [1,3,5] for i01 in list01: is_in_02 = False for i02 in l ...
- Python有堆栈/堆,如何管理内存?
Python有堆栈/堆,如何管理内存? - 代码日志 https://codeday.me/bug/20171016/86264.html
- python中利用队列asyncio.Queue进行通讯详解
python中利用队列asyncio.Queue进行通讯详解 本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细 ...
- 堆”,"栈","堆栈","队列"以及它们的区别
如果你学过数据结构,就一定会遇到“堆”,"栈","堆栈","队列",而最关键的是这些到底是什么意思?最关键的是即使你去面试,这些都还会问到, ...
- Python 多线程同步队列模型
Python 多线程同步队列模型 我面临的问题是有个非常慢的处理逻辑(比如分词.句法),有大量的语料,想用多线程来处理. 这一个过程可以抽象成一个叫“同步队列”的模型. 具体来讲,有一个生产者(Dis ...
- python实现堆栈和队列
利用python列表实现堆栈和队列 堆栈: 堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出. 我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的app ...
随机推荐
- Python中的Numeric
整型Integer 在Python2.X中,Integer有两种类型,一种是32bit的普通类型,一种是精度无限制的long类型,在数字后面标识l或者L来标识long类型,并且,当32bit发生ove ...
- 最短路径——floyd(多源最短路径)
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...
- 直接管理内存——new和delete
一.运算符new 1. 使用new动态分配对象 在自由空间分配的内存是无名的,故new无法为其分配的对象命名,而是返回一个指向该对象的指针 int *pi = new int; //pi指向一个动态分 ...
- java连接数据库的两种方法总结
方法一:使用jdbc-odbc桥连接sql server,作为中间媒介连接数据库 1.配置数据源:打开控制面版->管理工具->数据源(ODBC)->选用户DSN,按下添加按钮-> ...
- 【OpenGL】无法启动此程序,因为计算机中丢失 glut32.dll。尝试重新安装该程序以解决此问题。
运行OpenGL程序的时候报错,如图: 解决方法:把glut32.dll复制到C:\Windows\SysWOW64目录下,而不是像网上教程那样复制到C:\Windows\System32目录下. 原 ...
- dede5.7文章模型(非软件模型)添加下载附件的方法
添加字段 ---- > 字段类型为 附件 --- - > templets/system/channel_addon.htm 代码清空,只保留 ~link~ -+---> 保存. & ...
- 普通用户如何启动WCF服务
做Winform项目时,部署到客户机上有两个应用程序,Host和Client,在Host上运行着WCF服务供Client调用.平时现在在测试的时候都没发现有问题,但是当安装到客户的正式环境时发现服务启 ...
- 调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
- POJ1228:Grandpa's Estate——题解
http://poj.org/problem?id=1228 题目大意:给一个凸包,问是否为稳定凸包. ———————————————————————— 稳定凸包的概念为:我任意添加一个点都不能使这个 ...
- BZOJ5324 & 洛谷4563 & LOJ2545:[JXOI2018]守卫——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5324 https://www.luogu.org/problemnew/show/P4563 ht ...