基于Python3的数据结构与算法 - 12 数据结构(列表和栈)

目录

一、引入

二、分类

三、列表

1. C语言中数组的存储方式

2. Python中列表的存储方式

四、栈

1. 栈的应用 -- 括号匹配问题


一、引入

  • 定义:数据结构是指相互之间存在着一种或多种关系的数据元素的集合该集合中数据元素之间的关系组成。
  • 简单来说,书记结果就是设计数据以何种方式组织并存储在计算机中。
  • 比如:列表、集合与字典等都是一种数据结构。
  • N.Wirth:‘“程序 = 数据结构 + 算法”

二、分类

数据结构按照其逻辑结构可分为线性结构、树结构、图结构。

  • 线性结构:数据结构中的元素存在一对一的相互关系(比如列表)。
  • 树结构:数据结构中的元素存在一对多的相互关系。(二叉树)
  • 图结构:数据结构中的元素存在多对多的相互关系。(地图)

三、列表

列表中的元素按照顺序存储

1. C语言中数组的存储方式

C语言中的数组需要指定数组的大小。

例如一个数组存整数,假如在32位机器上存放。

假如我们需要查找a[2],则a[2] : 100 +2 * 4 = 108 ,根据位置取出对应的元素。

数组与列表的区别:

  1. 数组元素类型要相同
  2. 数组长度固定

2. Python中列表的存储方式

Pyhton中列表存放的是对应的数据的地址

32位机器上,一个整数占4个字节,一个地址也占4个字节;64位机器上,一个整数占8个字节。

查找元素的复杂度为O(1)。

插入和删除对于列表来说都是O(n)的复杂度。

删除元素后,后面的数据所对应的地址会向前补;插入元素,后面的元素向后面挪动。

四、栈

定义:栈是一个数据集合,可以理解为只能在一端进行插入或删除操作的列表。

特点:后进后出LIFO(last-in, first-out)

栈的概念:栈顶、栈底

栈的基本操作

  • 进栈(压栈):push(相当于最上面再放一本书)
  • 出栈:pop(相当于取出最上面的一本书)
  • 取栈顶:gettop (查看最上面的元素的信息,但是不拿走)

我们可以创建一个class,来实现栈的功能,示例代码如下所示:

class Stack:
    def __init__(self):
        self.stack = []
        
    def push(self, element):   # 进栈存放元素
        self.stack.append(element)
        
    def pop(self):     # 出栈取元素
        return self.stack.pop()
    
    def get_top(self):   # 返回栈顶元素
        if len(self.stack) > 0:
            return self.stack[-1]
        else:
            return None

或者我们可以直接使用一般的列表结构即可实现栈:

  • 进栈: li.append
  • 出栈:li.pop
  • 取栈顶:li[-1] 

1. 栈的应用 -- 括号匹配问题

括号匹配问题:给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配。

例如:

  • ()()[][]   匹配
  • ([{()}])   匹配
  • [](   不匹配
  • [(])  不匹配

示例代码如下所示:

class Stack:
    def __init__(self):
        self.stack = []
        
    def push(self, element):   # 进栈存放元素
        self.stack.append(element)
        
    def pop(self):     # 出栈取元素
        return self.stack.pop()
    
    def get_top(self):   # 返回栈顶元素
        if len(self.stack) > 0:
            return self.stack[-1]
        else:
            return None
        
    def is_empty(self):
        return len(self.stack) == 0


def brace_match(s):
    stack = Stack()
    match = {'}':'{', ')':'(', ']':'['}
    for ch in s:
        if ch in {'(', '[', '{'}:   # ch是左括号
            stack.push(ch)
        else:   # ch为右括号
            if stack.is_empty(): # 如果此时栈为空,也就是第一个字符不是左括号
                return False
            elif stack.get_top() == match[ch]:   # 取出栈顶元素,是否与match匹配
                stack.pop()  #  取出最后面一个与之相对于的左括号的元素
            else:   #不匹配 
                return False
    if stack.is_empty():
        return True
    else:
        return False

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/441165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

防御保护 IPSEC VPPN实验

实验背景:FW1和FW2是双机热备 主备备份模式。 实验要求:在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 IPSEC VPPN实验配置(由于是双机热备状态,所以FW1和FW2只需要配置FW1主设…

Cloud-Nacos服务治理-Feign服务调用

构建Cloud 父工程依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.…

设计模式-行为型模式-职责链模式

在软件系统运行时&#xff0c;对象并不是孤立存在的&#xff0c;它们可以通过相互通信协作完成某些功能&#xff0c;一个对象在运行时也将影响到其他对象的运行。行为型模式&#xff08;Behavioral Pattern&#xff09;关注系统中对象之间的交互&#xff0c;研究系统在运行时对…

基于springboot的某大学外卖系统的实现(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 1 后台登录 2管理员界面 3员工信息管理 4客户信息管理 三、库表设计 四、论文 前言 如今&#xff0c;信息化不断的高速发展&#xff0c;社会也跟着不断进步&#xff0c;现今的社会&#xff0c;各种工作都离不开信息化技…

蓝桥杯每日一题:烤鸡dfs

这道题考察了dfs的应用&#xff0c;题干十分有趣&#xff0c;思考过程对以后类似题目也有很强的参考性&#xff0c;一起来学习吧&#xff01; 题目&#xff1a; # 烤鸡 ## 题目背景 猪猪 Hanke 得到了一只鸡。 ## 题目描述 猪猪 Hanke 特别喜欢吃烤鸡&#xff08;本是同畜…

图片速览 BitNet: 1-bit LLM

输入数据 模型使用absmax 量化方法进行b比特量化,将输入量化到 [ − Q b , Q b ] ( Q b 2 b − 1 ) \left[-Q_{b},Q_{b}\right](Q_{b}2^{b-1}) [−Qb​,Qb​](Qb​2b−1) x ~ Q u a n t ( x ) C l i p ( x Q b γ , − Q b ϵ , Q b − ϵ ) , Clip ⁡ ( x , a , b ) ma…

供应链管理系统(SCM):得供应链得天下不是空话。

2023-08-26 15:51贝格前端工场 Hi&#xff0c;我是贝格前端工场&#xff0c;优化升级各类管理系统的界面和体验&#xff0c;是我们核心业务之一&#xff0c;欢迎老铁们评论点赞互动&#xff0c;有需求可以私信我们 一、供应链对于企业的重要性 供应链对企业经营的重要性不可…

【ViT】Vision Transformer的实现01 patch embedding

对于224*224的图像&#xff0c;将它输入到Transformer里面&#xff0c;就需要将图像展开成一系列的token&#xff0c; 如果逐像素视为token进行注意力的计算&#xff0c;难免计算量太大&#xff0c;因此一个更加合理的想法是将图像划分为一个个的patch 将每个patch进行embeddin…

Vue3+element-plus复杂表单分组处理

一、为什么表单要分组处理&#xff1f; 方便表单字段的复用&#xff1a;例如&#xff0c;你的表单有十个字段会在很多的表单都会用到&#xff0c;那么表单则需要进行分组进行表单复用&#xff1b;实现不同角色的表单权限控制&#xff1a;例如一个表单有60个字段&#xff0c;角…

3DEXPERIENCE Works八大核心优势分析

云技术正在加速普及&#xff0c;助力各行各业数字化转型。根据IDC 2023年12月发布的报告&#xff0c;2023年全球云计算市场规模达到3329亿美元&#xff0c;同比增长19.4%。其中&#xff0c;公有云市场规模达到2587亿美元&#xff0c;同比增长21.5%;私有云市场规模达到742亿美元…

倒计时最后1天!AutoMQ x 阿里云云原生创新论坛精彩预告

3月9日&#xff08;本周六&#xff09;“AutoMQ x 阿里云云原生创新论坛”就要与大家见面了&#xff0c;让我们一起来看看本次论坛都有哪些精彩的议题&#xff01;文末附有参会交通指南和直播预约链接。 精彩剧透 01 AutoMQ&#xff1a;加速云原生创新&#xff0c;助力大数据…

Java集合面试题(day 02)

&#x1f4d1;前言 本文主要是【JAVA】——Java集合面试题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

支小蜜校园防欺凌系统听到声音之后会自动识别吗

在校园安全领域&#xff0c;特别是在预防和应对欺凌问题上&#xff0c;校园防欺凌系统作为新兴的技术应用&#xff0c;正在受到越来越多的关注和探索。那么当这样的系统听到声音之后&#xff0c;它是否能够自动识别并作出相应反应呢&#xff1f;本文将围绕这一问题展开探讨。 …

protobufjs使用教程,支持proto文件打包成typescript或javascript脚本

官方链接&#xff1a;https://docs.cocos.com/creator/manual/zh/scripting/modules/example.html 第一步&#xff0c;安装nodejs。&#xff08;自行安装&#xff09; 安装教程可参考 https://www.runoob.com/nodejs/nodejs-install-setup.html 第二步&#xff0c;创建cocos…

雷赛控制卡正负限位的信号灯不亮问题处理

雷赛控制卡正负限位的信号灯不亮问题处理 正负限位IO映射&#xff1a;这个映射要和轴号对映。 回零设置中的IO映射也是一样的设置。 如下图&#xff1a;3轴的IO映射都选3。1轴的IO映射都选1

c++的STL(2)-- vector容器

目录 1. 默认构造 代码: 相关知识点: 2. 有参构造函数 以及 使用{}初始化对象 代码: 相关知识点: 3. vector容器在尾部添加和删除元素 代码: 使用push_back()和pop_back()进行尾部元素的添加和删除 相关知识点: 代码: 使用emplace_back在尾部添…

机器学习——神经网络压缩

神经网络压缩 需要部署&#xff0c;设备内存和计算能力有限&#xff0c;需要进行模型压缩&#xff0c;在设备上运行的好处是低延迟&#xff0c;隐私性。 目录 不考虑硬件问题&#xff0c;只考虑通过软件算法优化。 修剪网络 参数过多或者没有用的参数&#xff0c;可以将其剪…

MRI基础--k空间

k空间定义 k空间是表示 MR 图像中空间频率的数字数组。 k空间物理意义 k 空间的单元通常显示在主轴 kx 和 ky 的矩形网格上。 k 空间的 kx 和 ky 轴对应于图像的水平 (x) 和垂直 (y) 轴。然而,k 轴表示 x 和 y 方向上的空间频率而不是位置。 k 空间中的各个点 (kx,ky) 与图像…

R语言 | 复数 相关函数

问题 大家好&#xff0c;我有一个问题&#xff0c;我看到一个函数如下&#xff1a; L2_distance <- function(A, B){rowA <- apply(A*A, 1, sum)matrixA <- matrix(rep(rowA, eachlength(rowA)), nrowlength(rowA), byrowT)rowB <- apply(B*B, 1, sum)matrixB &l…

【教程】Kotlin语言学习笔记(四)——方法(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 第三章 《数据容器》 第四章 《方法》 文章目录 【…