在这片文章中,我们使用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. 从.net开发做到云原生运维(四)——.net core的微服务开发

    1. .net 6.0项目模板变更 在.net 5和.net 3.1的时候,asp.net core项目模板里有个Program类和Startup类,在.net 6中引入了一个最小api的项目模板,在 ...

  2. gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数

    记录一个刚学习到的gym使用的点,就是gym.ObservationWrapper使用时的注意点--reset和step函数可以覆盖observation函数. 给出代码: import gym cl ...

  3. java多线程之-CAS无锁

    1.背景 加锁确实能解决线程并发的的问题,但是会造成线程阻塞等待等问题 那么有没有一种方法,既可以线程安全,又不会造成线程阻塞呢? 答案是肯定的......请看如下案例 注意:重要的文字说明,写在了代 ...

  4. 如何将一个模块文件编译到Linux内核中?

    很多粉丝在群里提问,如何把一个模块文件编译到内核中或者独立变异成ko文件.本文给大家详解讲解. 1. 内核目录 Linux内核源代码非常庞大,随着版本的发展不断增加.它使用目录树结构,并且使用Make ...

  5. JAVA SDK防反编译处理(原创)

    一.前言 网上找的资料是加密Jar包,运行时需要输入密码才能运行,这种方式的加密仅仅能于有main函数入口的加密,而不能满足对外提供SDK.我们的需求是对class文件加密防反编译,但又不影响别人二次 ...

  6. 十五张图带你快速入门 shardingsphere-proxy

    Apache ShardingSphere 是一款分布式的数据库生态系统,它包含两大产品: ShardingSphere-Proxy ShardingSphere-JDBC 很多同学对于 Shardi ...

  7. Spring Boot 框架中配置文件 application.properties 当中的所有配置大全

    Spring Boot 框架中配置文件 application.properties 当中的所有配置大全 #SPRING CONFIG(ConfigFileApplicationListener) s ...

  8. [postgres]使用pgbench进行基准测试

    前言 pgbench是一种在postgres上进行基准测试的简单程序,一般安装后就会自带.pgbench可以再并发的数据库绘画中一遍遍地进行相同序列的SQL语句,并且计算平均事务率. 测试准备 既然要 ...

  9. seata 下载及安装

    分布式事务 参考文章: 分布式事务实战方案汇总 https://www.cnblogs.com/yizhiamumu/p/16625677.html 分布式事务原理及解决方案案例https://www ...

  10. FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer

    ​GSYVideoPlayer是一个国产的移动端视频播放器,它采用了IJKPlayer.Media3(EXOPlayer).MediaPlayer.AliPlayer等四种播放器内核,支持弹幕.滤镜. ...