python数据结构学习第一章——栈
在这片文章中,我们使用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数据结构学习第一章——栈的更多相关文章
- Python爬虫学习==>第一章:Python3+Pip环境配置
前置操作 软件名:anaconda 版本:Anaconda3-5.0.1-Windows-x86_64清华镜像 下载链接:https://mirrors.tuna.tsinghua.edu.cn/ ...
- web学习第一章
web学习第一章 我是大概9月10日开始走上IT之路的,一开始学习了小段时间的自动化办公软件, 昨天我开始学习客户端网页编程,我了解什么是WEB,一些比较老古董的计算模式和发展历史,印象最让我深刻 ...
- oracle学习 第一章 简单的查询语句 ——03
1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...
- 路飞学城-Python爬虫集训-第一章
自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第一章
Asp.Net MVC4 + Oracle + EasyUI 第一章 --操作数据和验证 本文链接:http://www.cnblogs.com/likeli/p/4234238.html 文章集合 ...
- Java基础知识二次学习-- 第一章 java基础
基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...
- 《零压力学Python》 之 第一章知识点归纳
第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...
- Python爬虫学习第一记 (翻译小助手)
1 # Python爬虫学习第一记 8.24 (代码有点小,请放大看吧) 2 3 #实现有道翻译,模块一: $fanyi.py 4 5 import urllib.request 6 import u ...
- Intel汇编语言程序设计学习-第一章 基本概念
第一章基本概念 1.1 简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...
- swift系统学习第一章
第一节:变量,常量,类型推断,字符,字符串 //swift学习第一节 /* 变量 常量 类型推断 字符 字符串 */ import UIKit //变量 var str = "swift&q ...
随机推荐
- 从.net开发做到云原生运维(四)——.net core的微服务开发
1. .net 6.0项目模板变更 在.net 5和.net 3.1的时候,asp.net core项目模板里有个Program类和Startup类,在.net 6中引入了一个最小api的项目模板,在 ...
- gym.ObservationWrapper使用时的注意点——reset和step函数可以覆盖observation函数
记录一个刚学习到的gym使用的点,就是gym.ObservationWrapper使用时的注意点--reset和step函数可以覆盖observation函数. 给出代码: import gym cl ...
- java多线程之-CAS无锁
1.背景 加锁确实能解决线程并发的的问题,但是会造成线程阻塞等待等问题 那么有没有一种方法,既可以线程安全,又不会造成线程阻塞呢? 答案是肯定的......请看如下案例 注意:重要的文字说明,写在了代 ...
- 如何将一个模块文件编译到Linux内核中?
很多粉丝在群里提问,如何把一个模块文件编译到内核中或者独立变异成ko文件.本文给大家详解讲解. 1. 内核目录 Linux内核源代码非常庞大,随着版本的发展不断增加.它使用目录树结构,并且使用Make ...
- JAVA SDK防反编译处理(原创)
一.前言 网上找的资料是加密Jar包,运行时需要输入密码才能运行,这种方式的加密仅仅能于有main函数入口的加密,而不能满足对外提供SDK.我们的需求是对class文件加密防反编译,但又不影响别人二次 ...
- 十五张图带你快速入门 shardingsphere-proxy
Apache ShardingSphere 是一款分布式的数据库生态系统,它包含两大产品: ShardingSphere-Proxy ShardingSphere-JDBC 很多同学对于 Shardi ...
- Spring Boot 框架中配置文件 application.properties 当中的所有配置大全
Spring Boot 框架中配置文件 application.properties 当中的所有配置大全 #SPRING CONFIG(ConfigFileApplicationListener) s ...
- [postgres]使用pgbench进行基准测试
前言 pgbench是一种在postgres上进行基准测试的简单程序,一般安装后就会自带.pgbench可以再并发的数据库绘画中一遍遍地进行相同序列的SQL语句,并且计算平均事务率. 测试准备 既然要 ...
- seata 下载及安装
分布式事务 参考文章: 分布式事务实战方案汇总 https://www.cnblogs.com/yizhiamumu/p/16625677.html 分布式事务原理及解决方案案例https://www ...
- FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
GSYVideoPlayer是一个国产的移动端视频播放器,它采用了IJKPlayer.Media3(EXOPlayer).MediaPlayer.AliPlayer等四种播放器内核,支持弹幕.滤镜. ...