在这片文章中,我们使用python3.8自制一个具有基本功能的栈结构,它的功能只有push,pop,peek这三个功能

` #!/usr/bin/env python

# * coding: utf-8 *

# @Time : 2024/9/15 19:26

# @Author : Huzhaojun

# @Version:V 1.0

# @File : test.py

# @desc :

# 数据结构复习第一章, 栈结构的实现与运用

class Node:
"""创建节点""" def __init__(self, data=None):
self.data = data
self.next = None class stack: def __init__(self):
self._n = 0 # 记录元素个数
self.top = None # 这是一个永远指向栈顶的指针
self.next = None # 指向下一个元素 def push(self, data): # push 压入函数
node = Node(data) # 新建一个节点,并将其添加入栈中
if self.top: # 如果栈内有元素,就更新top指针的指向内容
node.next = self.top
self.top = node
else: # 否则直接指向新节点
self.top = node self._n += 1 def pop(self): # pop 弹出函数
if self.top: # 判断栈顶是否存在元素,如果存在则执行下一步操作,否则直接返回None
data = self.top.data # 获取栈顶的值
self._n -= 1 if self.top.next: # 如果栈顶之下还存在其他元素,则替换指向指针的值
self.top = self.top.next else: # 否则直接定义为None
self.top = None return data return None def peek(self): # 查看栈顶值
if self.top:
return self.top.data return None

`

使用过程:

x = stack()

x.push(1)

x.push(2)

print(x.peek())

print(x.pop())

print(x.peek())

输出结果:

2

2

1

实战一下

bracket-matching应用程序是一个常用的匹配括号的验证程序,验证包括(),{},【】符号是否平衡,及左右括号数量是否匹配,它还将确保一对括号确实包含在另一对括号中。

我们试着来验证一段xml文件,看看结果如何,注意,我在stack中新添了一个__len__函数:

`

#!/usr/bin/env python

# * coding: utf-8 *

# @Time : 2024/9/15 19:26

# @Author : Huzhaojun

# @Version:V 1.0

# @File : test.py

# @desc :

# 数据结构复习第一章, 栈结构的实现与运用

class Node:
"""创建节点""" def __init__(self, data=None):
self.data = data
self.next = None class stack: def __init__(self):
self._n = 0 # 记录元素个数
self.top = None # 这是一个永远指向栈顶的指针
self.next = None # 指向下一个元素 def __len__(self): # 定义 len 事件
return self._n def push(self, data): # push 压入函数
node = Node(data) # 新建一个节点,并将其添加入栈中
if self.top: # 如果栈内有元素,就更新top指针的指向内容
node.next = self.top
self.top = node
else: # 否则直接指向新节点
self.top = node self._n += 1 def pop(self): # pop 弹出函数
if self.top: # 判断栈顶是否存在元素,如果存在则执行下一步操作,否则直接返回None
data = self.top.data # 获取栈顶的值
self._n -= 1 if self.top.next: # 如果栈顶之下还存在其他元素,则替换指向指针的值
self.top = self.top.next else: # 否则直接定义为None
self.top = None return data return None def peek(self): # 查看栈顶值
if self.top:
return self.top.data return None def check_brackets(statement):
Stack = stack()
for ch in statement:
if ch in "({[<":
Stack.push(ch) if ch in ")}]>":
last = Stack.peek()
if last + ch in ("()", "[]", "{}", "<>"):
Stack.pop()
else:
return False if len(Stack) > 0:
return False return True text = """
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindos</class>
<widget class="QDialog" name="MainWindos">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>402</width>
<height>575</height>
</rect>
</property>
<property name="windowTitle">
<string>music</string>
</property>
</widget>
<resources/>
<connections/>
</ui>""" print(check_brackets(text))

`

运行结果:

True

自建的数据结构可以因需求而添加任意想要实现的方法,虽然内置的方法已经可以解决绝大部分问题了,但是在这过程中我们可以学习到更多。OVER

python数据结构学习第一章——栈的更多相关文章

  1. Python爬虫学习==>第一章:Python3+Pip环境配置

    前置操作 软件名:anaconda  版本:Anaconda3-5.0.1-Windows-x86_64清华镜像  下载链接:https://mirrors.tuna.tsinghua.edu.cn/ ...

  2. web学习第一章

    web学习第一章   我是大概9月10日开始走上IT之路的,一开始学习了小段时间的自动化办公软件, 昨天我开始学习客户端网页编程,我了解什么是WEB,一些比较老古董的计算模式和发展历史,印象最让我深刻 ...

  3. oracle学习 第一章 简单的查询语句 ——03

    1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...

  4. 路飞学城-Python爬虫集训-第一章

    自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...

  5. Asp.Net MVC4 + Oracle + EasyUI 学习 第一章

    Asp.Net MVC4 + Oracle + EasyUI  第一章 --操作数据和验证 本文链接:http://www.cnblogs.com/likeli/p/4234238.html 文章集合 ...

  6. Java基础知识二次学习-- 第一章 java基础

    基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...

  7. 《零压力学Python》 之 第一章知识点归纳

    第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...

  8. Python爬虫学习第一记 (翻译小助手)

    1 # Python爬虫学习第一记 8.24 (代码有点小,请放大看吧) 2 3 #实现有道翻译,模块一: $fanyi.py 4 5 import urllib.request 6 import u ...

  9. Intel汇编语言程序设计学习-第一章 基本概念

    第一章基本概念 1.1  简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...

  10. swift系统学习第一章

    第一节:变量,常量,类型推断,字符,字符串 //swift学习第一节 /* 变量 常量 类型推断 字符 字符串 */ import UIKit //变量 var str = "swift&q ...

随机推荐

  1. 【郝斌C ST】 指针入门

    #include <stdio.h> int main() { printf("Hello, World!\n"); int i = 3; int * p = & ...

  2. 【Windows】搭建FTP服务器

    1.开启FTP服务和IIS服务 2.设置IIS服务 添加FTP站点[右键] 设置站点名称和物理路径 绑定IP地址和FTP端口号 可以自定义虚拟主机名称 下面勾选[无SSL]即可 身份验证和授权设置 在 ...

  3. Java 文件 I/O流详解

    文件 文件操作是Java开发中一个重要的组成部分,它允许开发者对文件进行读取,写入,创建,删除和修改等操作,文件操作的主要通过java.io包中的类来实现的,其中的File类更是文件操作的核心类 Fi ...

  4. 目前国内全地形能力最强的双足机器人 —— 逐际动力 —— 提出迭代式预训练(Iterative Pre-training)方法的强化学习算法

    相关: https://weibo.com/1255595687/O5k4Aj8l2 该公司对其产品的强化学习训练算法给出了较少的描述: 提出迭代式预训练(Iterative Pre-training ...

  5. 深度学习框架 MindSpore —— 华为出品的AI计算框架, docker 安装

    深度学习框架  MindSpore  --   华为出品的AI计算框架 官网地址: https://www.mindspore.cn/ 源代码地址: https://gitee.com/devilma ...

  6. fatal error: GL/osmesa.h: No such file or directory

    安装mujoco报错: fatal error: GL/osmesa.h: No such file or directory 解决方法: sudo apt install libosmesa6-de ...

  7. plupload附件上传插件IE8问题

    前段时间遇到一个plupload上传插件问题,在其他浏览器上面运行很正常,但是就是在IE8上面第一次点击上传按钮无反应,后面再连续点击才ok.我的初始化代码如下 _this.uploader = ne ...

  8. C#自己封装数据库操作类BaseADO

    这几天学习数据库操作,就自己封装了一个数据库操作类,下面是代码展示 下面的例子是Access数据库 也可能用在Sql数据库中,只在在第一行代码上修改标识符即可 #define OLEDB_ using ...

  9. webpack笔记-webpack之模块module、路径解析、resolve 配置(三)

    module webpack 的初衷是让 js 支持模块化管理,并且将前端中的各种资源都纳入到对应的模块管理中来,所以在 webpack 的设计中,最重要的部分就是管理模块和模块之间的关系. 在 we ...

  10. AI假图检测:Deepfake层出不穷,怎么才能“有图有真相”?

    随着AIGC技术的迅猛发展,互联网上涌现出各种逼真的篡改照片和视频."有图有真相"已经成为历史.而证件.票据.账单.流水等文件P图这些更为常见的伪造活动,也在AI技术的加持下如虎添 ...