基于PyQt5的图形化界面开发——堆栈动画演示
目录
- 0. 前言
- 1. 了解堆栈
- 2.代码实现
- 3. 演示效果
- 其他PyQt5文章
0. 前言
本文使用 PyQt5制作图形化界面演示数据结构中的堆栈操作
操作系统:Windows10 专业版
开发环境:Pycahrm Comunity 2022.3
Python解释器版本:Python3.8
第三方库:PyQt5
1. 了解堆栈
在计算机科学中,堆栈(Stack),也常被称为栈,是一种抽象的数据结构,它是一种只能从一个端添加元素和删除元素的线性数据结构。这一端被称为“栈顶”,相对地,把另一端称为“栈底”。根据这个定义,可以推断出后进先出(LIFO,Last In First Out)这个特性。
堆栈有以下几个基本操作:
- push: 将一个元素添加到栈顶
- pop: 从栈顶移除一个元素,并返回这个元素的值
- peek/top: 返回栈顶的元素值,但不将其移除
- is_empty: 返回栈是否为空
堆栈通常使用数组或链表实现。如果使用数组实现,需要考虑动态扩容的情况。如果使用链表实现,需要注意在链表头进行操作,否则操作的时间复杂度将变为O(n)。
堆栈通常用作典型的临时存储(例如在递归函数中存储函数的返回地址),或者是需要逆序输出元素的应用程序那么在这样的应用中,堆栈的弹出顺序就可以实现逆序的要求。
例如:
假设你要洗堆满了碗,你会把碗一层一层地往上堆放。当你洗完一个碗放入放碗柜时,你把刚才放在最上层的碗取下来,这就是一个栈的操作过程。
当你需要使用碗时,你从栈顶拿下一个碗。如果你拿下的碗与你想要使用的碗不一样,你就把拿下的碗再放回去,这样使用的就是最后一个放上去的碗。这个过程叫做“后进先出”,或者LIFO(Last In, First Out)
2.代码实现
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sysclass Node:def __init__(self, data):self.data = dataself.next = Noneclass Queue:def __init__(self):self.head = Noneself.tail = Nonedef enqueue(self, data):new_node = Node(data)if self.tail is None:self.head = new_nodeself.tail = new_nodeelse:self.tail.next = new_nodeself.tail = new_nodedef dequeue(self):if self.head is not None:data = self.head.dataself.head = self.head.nextif self.head is None:self.tail = Nonereturn dataelse:return Nonedef front(self):if self.head is not None:return self.head.dataelse:return Nonedef is_empty(self):return self.head is Nonedef display(self, scene):pen = QPen(QColor(0, 255, 0))font = QFont("Arial", 10)y = 100current_node = self.headwhile current_node is not None:# Draw node rectanglescene.addRect(50, y, 50, 50, pen)# Draw node texttext = scene.addText(str(current_node.data), font)text.setDefaultTextColor(QColor(255, 255, 255))text.setPos(70, y + 10)current_node = current_node.nexty += 70class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Queue Demo")self.setFixedSize(500, 500)self.scene = QGraphicsScene(self)self.view = QGraphicsView(self.scene, self)self.view.setGeometry(0, 0, 500, 500)self.queue = Queue()self.queue.enqueue(10)self.queue.enqueue(20)self.queue.enqueue(30)self.queue.display(self.scene)# Add UI elementsenqueue_button = QPushButton("Enqueue", self)enqueue_button.move(10, 10)enqueue_button.clicked.connect(self.handle_enqueue)dequeue_button = QPushButton("Dequeue", self)dequeue_button.move(10, 40)dequeue_button.clicked.connect(self.handle_dequeue)front_button = QPushButton("Front", self)front_button.move(10, 70)front_button.clicked.connect(self.handle_front)clear_button = QPushButton("Clear", self)clear_button.move(10, 100)clear_button.clicked.connect(self.handle_clear)self.data_edit = QLineEdit(self)self.data_edit.move(100, 10)def handle_enqueue(self):data = self.data_edit.text()if data != "":self.queue.enqueue(data)self.scene.clear()self.queue.display(self.scene)def handle_dequeue(self):data = self.queue.dequeue()if data is not None:QMessageBox.information(self, "Dequeue", "Dequeued value: " + str(data))self.scene.clear()self.queue.display(self.scene)else:QMessageBox.warning(self, "Dequeue", "Queue is empty")def handle_front(self):data = self.queue.front()if data is not None:QMessageBox.information(self, "Front", "Front value: " + str(data))else:QMessageBox.warning(self, "Front", "Queue is empty")def handle_clear(self):self.queue = Queue()self.scene.clear()if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())
3. 演示效果
提供了四个操作:
- 入栈
- 出栈
- 栈顶元素查询
- 堆栈初始化(清空)
运行代码可以看到堆栈中是有三个元素(绿色框框)在其中,这是我们在代码中提前预设的三个值

现在输入13,然后将它Push到栈中,可以看到 多了一个元素:

然后取其Peek(顶端)的值,看看是否如愿:

如我们压入栈中的一样,就是13,但是并不会将它从栈中取出
现在我们将其Pop,看看会是怎样的情形:


执行完Pop操作后,将栈顶元素13取出,并且栈中也少了一个元素
其他PyQt5文章
基于PyQt5的图形化界面开发——自制MQTT客户端
基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]
基于PyQt5的图形化界面开发——模拟医院管理系统
基于PyQt5的图形化界面开发——自制ssh工具
基于PyQt5的图形化界面开发——PyQt示例_计算器
基于PyQt5的图形化界面开发——PyQt示例_扫雷
基于PyQt5的图形化界面开发——自制Redis图形化客户端(文末附源码)
基于PyQt5的图形化界面开发——堆栈动画演示
基于PyQt5的图形化界面开发——队列动画演示
相关文章:
基于PyQt5的图形化界面开发——堆栈动画演示
目录 0. 前言1. 了解堆栈2.代码实现3. 演示效果其他PyQt5文章 0. 前言 本文使用 PyQt5制作图形化界面演示数据结构中的堆栈操作 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 Python解释器版本:Python3.8 第三方库&…...
2023 年第三届长三角高校数学建模竞赛赛题浅析
为了更好地让大家本次长三角比赛选题,我将对本次比赛的题目进行简要浅析。数模模型通常分为优化、预测、评价三类,而本次数学题目就正好对应着A、B、C分别为优化、预测、评价。整体难度不大,主要难点在于A题的优化以及B、C的数据收集。稍后&a…...
sqlite3免费加密开源项目sqlcipher简单使用
一、概述 使用sqlite3的免费版本是不支持加密的。为了能使用上加密sqlite3,有一个免费的开源项目sqlcipher提供了免费和付费的加密sqlite功能。我们当然选择免费的版本啦。 官方网站: https://www.zetetic.net/sqlcipher/open-source/ 文档目录&#…...
SOLIDWORKS PDM Professional中的Add-ins
实现COM接口IEdmAddIn5的DLLs:IEdmAddIn5 Interface - 2019 - SOLIDWORKS API Help。通过“Add-in特性”对话框添加到文件库中:Administrate Add-ins Dialog Box - 2019 - SOLIDWORKS API Help通知SOLIDWORKS PDM Professional 用户操作: 将Add-in添加到…...
干货 | 郭晓雷:数智安全监管机制研究与思考
作者:郭晓雷本文约4300字,建议阅读8分钟 本文报告的主要内容关于数据安全,从学术或者技术的角度,更多地认为人工智能是数据处理的新技术,其应用会产生更加丰富的数据处理活动场景。 郭晓雷:今天报告的主要内…...
感应雷电浪涌的防线,SPD浪涌保护器
SPD - Surge Protective Device SPD 是防止雷击导致故障的避雷器,代表浪涌保护设备。一般指浪涌保护器,浪涌保护器,也叫防雷器,是一种为各种电子设备、仪器仪表、通讯线路提供安全防护的电子装置。 IEC/ EN61643-11 (…...
ThreeJS教程:屏幕坐标转标准设备坐标
推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 屏幕坐标转标准设备坐标 在讲解下节课鼠标点击选中模型之前,先给大家讲解下坐标系的问题。 获取鼠标事件坐标 先来了解一些,普通的web前端相关知识。 鼠…...
[elasticsearch 实现插入查询小demo ]
目录 前言: 。以下是Java语言实现Elasticsearch数据插入和批量插入的示例代码: 我们需要定义一个ElasticsearchUtil类来封装Elasticsearch操作。在本示例中,我们实现了以下方法: 下面是一个Java代码示例,演示了如何使用Elast…...
因为计算机中丢失VCRUNTIME140怎么办?为什么会丢失VCRUNTIME140.dll
vcruntime140.dll是一个Windows动态链接库,其主要功能是为C/C编译的程序提供运行时支持。这个库在Microsoft Visual Studio 2015中被引入,其名称中的“140”代表版本号。在我们打开运行软件或者游戏程序的时候,电脑提示因为计算机中丢失VCRUN…...
【满分】【华为OD机试真题2023B卷 JAVAJS】数字游戏
华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 数字游戏 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 小明玩一个游戏。系统发1+n张牌,每张牌上有一个整数。第一张给小明,后n张按照发牌顺序排成连续的一行。需要小明判断,后n张牌中,是否存在连续的若干张…...
NLP常用的三种中文分词工具对比
本文将对三种中文分词工具进行使用尝试,这三种工具分别为:哈工大的LTP,结巴分词以及北大的pkuseg。 1、准备 首先我们先准备好环境,即需要安装三个模块: pyltpjiebapkusegLTP的分词模型文件cws.model 在用户字典中…...
Visual C++ 6.0环境开发PACS影像系统的技术指标和精准算法
一、技术指标 •图像文件格式:DCM、JPG、BMP、TIF等 •可支持显示属性设置:24/32位真彩;256位色(黑白) •可支持监视器分辨率:1024﹡768;1280﹡1024;1600&…...
接口测试介绍以及用例编写
6.1 接口 6.1.1 接口概述 定义: 接口就是API(Application Programming Interface,应用程序接口),是一个软件或服务对外提供的接口,别人只要调用这接口,而内部如何实现,不需要关心。…...
MATLAB迭代的三种方式以及相关案例举例
系列文章目录 MATLAB矩阵的分解函数与案例举例 MATLAB当中线性方程组、不定方程组、奇异方程组、超定方程组的介绍 MATLAB语句实现方阵性质的验证 MATLAB绘图函数的相关介绍——海底测量、二维与三维图形绘制 MATLAB求函数极限的简单介绍 文章目录 系列文章目录 前言 …...
测试替身Test Doubles的5类型(Mockito)
测试替身Test Doubles的5类型(Mockito) 我们有一个名为 BankAccount 的类。 数据库用于存储和检索银行帐户信息。 我们想测试 BankAccount 中的逻辑,而不必担心它使用的底层数据库.由此类实现——它将 SQL 查询发送到数据库并返回其中包含的值。 测试替身Test Dou…...
【C++】链表
链表是一种常见的数据结构,用于存储和组织数据。它的每个元素被称为结点(Node),结点是链表的基本单位,链表由一系列结点(Node)组成,每个结点包含两个部分:数据部分&#…...
day42_jsp
今日内容 零、 复习昨日 一、JSP 二、EL 三、JSTL 四、MVC 零、 复习昨日 一、JSP 1.0 引言 现有问题 在之前学习Servlet时,服务端通过Servlet响应客户端页面,有什么不足之处? 开发方式麻烦:继承父类、覆盖方法、配置Web.xml或注…...
JAVA面试八股整理——基础部分
JAVA 基础 JVM JDK JRE JVM java虚拟机,针对不同的系统,使用相同的字节码会给出相同结果。一次编译,随处可运行 JDK Java SDK 提供给开发者使用,创建和编译Java程序。包含了JRE,同时包含了其它工具(jav…...
【JavaSE】Java基础语法(二十八):HashSet集合
文章目录 1. HashSet集合概述和特点2. HashSet集合的基本应用3. 哈希值4. HashSet集合存储学生对象并遍历【应用】 1. HashSet集合概述和特点 底层数据结构是哈希表存取无序不可以存储重复元素没有索引,不能使用普通for循环遍历 2. HashSet集合的基本应用 存储字符串并遍历 …...
压缩感知重构之匹配追踪算法
算法的重构是压缩感知中重要的一步,是压缩感知的关键之处。因为重构算法关系着信号能否精确重建,国内外的研究学者致力于压缩感知的信号重建,并且取得了很大的进展,提出了很多的重构算法,每种算法都各有自己的优缺点&a…...
知识管理革命:OpenClaw+ollama-QwQ-32B构建个人第二大脑
知识管理革命:OpenClawollama-QwQ-32B构建个人第二大脑 1. 为什么我们需要"第二大脑"? 作为一个长期被信息过载困扰的技术写作者,我每天要处理几十篇技术文档、研究论文和行业动态。最痛苦的不是获取信息,而是如何有效…...
CAD 如何实现序号标注与明细表序号联动?
条件1、准备;如图,多重引线标注了5处件;明细表用表格录入表示;设置值2、设置序号值时,右键选择 “插入字段”;3、字段设置;依次选择:字段类别,选择 对象;字段…...
为什么你的视觉检测准确率卡在92.7%?(揭秘工业现场3类未标注异常数据导致的模型过拟合代码根源)
第一章:视觉检测准确率瓶颈的工业现场真相在实际产线部署中,视觉检测模型在实验室达到99.2%的mAP,落地后却频繁出现漏检与误报——这不是算法缺陷,而是工业现场多维干扰叠加的真实映射。光照波动、工件表面反光、传送带抖动、镜头…...
数据恢复与Python环境重建指南
数据恢复前的准备工作确认Anaconda安装路径及删除方式(如回收站清理、命令行删除等),避免覆盖原始数据。列出常用存储位置:C:\Users\<用户名>\Anaconda3(Windows)或/home/<用户名>/anaconda3&a…...
Dify工作流HTTP请求配置全攻略:从基础到进阶的系统优化指南
Dify工作流HTTP请求配置全攻略:从基础到进阶的系统优化指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-…...
停止健身房“赎罪”:把动作揉进日常,比发狠管用
健身房的惩罚 vs 生活中的律动 专栏:清醒日常 | 重新认识这副皮囊 (02) 老哥,今天咱们聊聊一个挺普遍,但很少有人愿意戳破的现象。 你有没有过这种经历:白天在公司极其憋屈地坐了十个小时,改了八遍PPT,晚…...
避坑指南:在Ubuntu 20.04上搞定XTDrone+ORB-SLAM2,我踩过的那些依赖版本坑
避坑指南:在Ubuntu 20.04上搞定XTDroneORB-SLAM2,我踩过的那些依赖版本坑 当你在Ubuntu 20.04上尝试搭建XTDrone与ORB-SLAM2的开发环境时,可能会遇到各种令人抓狂的依赖版本冲突问题。作为一个经历过无数次失败后终于成功配置的开发老手&…...
保姆级教程:YOLOv8鹰眼目标检测镜像使用全流程解析
保姆级教程:YOLOv8鹰眼目标检测镜像使用全流程解析 1. 引言:为什么选择YOLOv8鹰眼目标检测? 在智能安防、工业质检、智慧零售等领域,高效准确的目标检测技术正发挥着越来越重要的作用。传统目标检测方案往往面临部署复杂、性能不…...
从‘分式规划’到‘加减法’:二次变换如何成为通信优化工程师的‘瑞士军刀’
从‘分式规划’到‘加减法’:二次变换如何成为通信优化工程师的‘瑞士军刀’ 通信系统优化中,工程师常遇到一类令人头疼的问题:目标函数是分式形式,且分子分母都包含待优化变量。这类问题在能效优化、频谱效率提升等场景中尤为常见…...
5分钟精通网页内容转化:AnythingLLM浏览器扩展全攻略
5分钟精通网页内容转化:AnythingLLM浏览器扩展全攻略 【免费下载链接】anything-llm 这是一个全栈应用程序,可以将任何文档、资源(如网址链接、音频、视频)或内容片段转换为上下文,以便任何大语言模型(LLM&…...
