本文实例讲述了Python实现栈和队列的简单操作方法。分享给大家供大家参考,具体如下:

先简单的了解一下数据结构里面的栈和堆:

栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于:

stack:后进先出

queue:先进先出

stack和queue是不能通过查询具体某一个位置的元素而进行操作的。但是他们的排列是按顺序的

对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。

stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作

class Stack(object):

def __init__(self):

self.stack = []

def push(self, value): # 进栈

self.stack.append(value)

def pop(self): #出栈

if self.stack:

self.stack.pop()

else:

raise LookupError('stack is empty!')

def is_empty(self): # 如果栈为空

return bool(self.stack)

def top(self):

#取出目前stack中最新的元素

return self.stack[-1]

我们定义如下的链表来实现队列数据结构:

定义一个头结点,左边指向队列的开头,右边指向队列的末尾,这样就可以保证我们插入一个元素和取出一个元素都是O(1)的操作,使用这种链表实现stack也是非常的方便。实现代码如下:

class Head(object):

def __init__(self):

self.left = None

self.right = None

class Node(object):

def __init__(self, value):

self.value = value

self.next = None

class Queue(object):

def __init__(self):

#初始化节点

self.head = Head()

def enqueue(self, value):

#插入一个元素

newnode = Node(value)

p = self.head

if p.right:

#如果head节点的右边不为None

#说明队列中已经有元素了

#就执行下列的操作

temp = p.right

p.right = newnode

temp.next = newnode

else:

#这说明队列为空,插入第一个元素

p.right = newnode

p.left = newnode

def dequeue(self):

#取出一个元素

p = self.head

if p.left and (p.left == p.right):

#说明队列中已经有元素

#但是这是最后一个元素

temp = p.left

p.left = p.right = None

return temp.value

elif p.left and (p.left != p.right):

#说明队列中有元素,而且不止一个

temp = p.left

p.left = temp.next

return temp.value

else:

#说明队列为空

#抛出查询错误

raise LookupError('queue is empty!')

def is_empty(self):

if self.head.left:

return False

else:

return True

def top(self):

#查询目前队列中最早入队的元素

if self.head.left:

return self.head.left.value

else:

raise LookupError('queue is empty!')

希望本文所述对大家Python程序设计有所帮助。

python 栈和队列_Python实现栈和队列的简单操作方法示例相关推荐

  1. python timer怎么用_python定时器(Timer)用法简单实例

    python定时器(Timer)用法简单实例 本文实例讲述了python定时器(Timer)用法.分享给大家供大家参考.具体如下: # encoding: UTF-8 import threading ...

  2. python环形队列_Python 实现数据结构-循环队列的操作方法

    今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...

  3. python画五角星代码_Python GUI 编程tkinter--画五角星和简单的动画制作

    1.利用Python的tkinter画一个五角星: 2.做一个简单的动画 分析五角心的五个顶点的坐标: 确立五角星的中心点和半径,再确立五角星的五个角的坐标信息,其中五角星的各个角读书为36度,具体的 ...

  4. python里try和except用法_Python中的错误和异常处理简单操作示例【try-except用法】...

    本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...

  5. python 栈和队列_python实现栈和队列

    栈(Stack),也叫做堆栈, 是一种容器, 可存入数据元素.访问元素.删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop ...

  6. python个人网站开发_python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

  7. python全栈开发优势_Python全栈开发多少钱?学Python价格贵吗?

    Python全栈开发培训多少钱?学习Python是大家进入编程世界的理想之选,而且Python也是一门非常受欢迎的编程,可以从事的领域有很多. 从目前市场上的行情来说,一般情况下Python培训的费用 ...

  8. python全栈开发下载_python全栈开发神器 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...

    将安卓手机打造成你的python全栈开发利器 超神利器- 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极.Q ...

  9. 用python画路飞代码_python 全栈开发,Day105(路飞其他数据库表结构,立即结算需求)...

    考试第三部分:Django 16.  列列举你熟悉的Http协议头以及作用.(1分) Accept-Charset: 用于告诉浏览器,客户机采用的编码 Host: 客户机通过这个头告诉服务器,想访问的 ...

最新文章

  1. 小余学调度:学习记录(2022.4)
  2. Spring MVC初始化参数绑定
  3. 【数据库】通用的存储过程
  4. 【H.264/AVC视频编解码技术】第一章【H264视频编码详细解析】
  5. Adobe FLASH CS3快捷键(时间轴常用)
  6. C# string类型转换为float精度问题
  7. android手机iPhone对比,安卓手机与苹果手机功能对比【详细介绍】
  8. 响铃:创业三年即IPO,拼多多不应该被质疑
  9. 【短视频音乐解析源码】在线解析抖音短视频音乐BGM源码+解析后自动播放mp3
  10. PaddlePaddle证件照换底换大小工具
  11. 如何解决浏览器音视频video/audio设置自动播放autoplay无效问题?
  12. WAIC | 阿里龙志勇:云游戏量变进行时,与元宇宙有什么关系?
  13. java程序报stream has already been operated upon or closed异常错误解决方案
  14. 基于STM32+华为云IOT设计的酒驾监控系统
  15. RK3399平台开发系列讲解(内核设备树篇)3.25、WIFI设备树的解析
  16. Git操作 【详细】【详细】
  17. 朴素贝叶斯、贝叶斯网络分类器
  18. react 和 vue(组件化) 实现两份数据的差异对比 合并及撤销
  19. 【sdp】抓包查看RTP头扩展id
  20. GG 单实例10g 到 11g RAC 搭建配置

热门文章

  1. java小程序死机_求解,刚写的小程序,一运行我机器就死机
  2. Androidstudio无法修改按钮颜色
  3. 手撕FSG2.0壳(有坑点)
  4. 【零基础】讲述网络安全介绍
  5. 软件调试学习笔记(六)—— 硬件断点
  6. android多屏幕适配资源生成,android – 多屏幕适配相关
  7. python tkinter button颜色变不了_更改函数中Tkinter按钮的颜色
  8. 转行做python现在怎么样_本人现在大三之前是学习网络的,现在想转行做python程序员,该如何学习?...
  9. iphonex价格_iPhone12成10年内最受期待的苹果手机,但价格会狂涨
  10. JAVAWEB项目--模拟考试系统数据库设计与实现(二)