数据结构-栈&队列

bash shell数组模拟队列queue和shell数组使用技巧 该篇文章也是我在网上找的,现在我在努力学习数组,所以就想多了解一下,现在先收藏了,等有时间了就好好的消化一下,O(∩_∩)O哈哈~ 一 shell数组操作模拟队列queue或者栈stack http://www.tech-recipes.com/rx/911/queue-a 阅读详情

栈

后进者先出,先进者后出,这就是典型的“栈”结构。
在这里插入图片描述

栈的操作

  • Stack() 创建一个新的空栈
  • push(item) 添加一个新的元素item到栈顶
  • pop() 弹出栈顶元素
  • peek() 返回栈顶元素
  • is_empty() 判断栈是否为空
  • size() 返回栈的元素个数
class stack(object):
    def __init__(self):
        self.item = []
    
    def is_empty(self):
        '''判断栈是否为空'''
        return self.item == []

    def push(self, item):
        '''入栈'''
        self.item.append(item)

    def travel(self):
        '''遍历栈元素并打印'''
        print(self.item)
    
    def pop(self):
        '''出栈'''
        return self.item.pop()

    def peek(self):
        '''返回栈顶元素'''
        if self.is_empty():
            return None
        else:
            return self.item[-1]
    
    def size(self):
        '''打印栈元素的个数'''
        print(len(self.item))


s = stack()
print(s.is_empty())
s.push(0)
s.push(2)
s.push(5)
s.push(1)
s.pop()
s.travel()
print(s.peek())
s.size()

# True
# [0, 2, 5]
# 5
# 3

栈的应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jk7StrTo-1574007113175)(02500A0353B34FEDAF6680D5AC40C2B8)]

浏览器的前进、后退功能,我想你肯定很熟悉吧?

当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a。当你后退到页面 a,点击前进按钮,就可以重新查看页面 b 和 c。但是,如果你后退到页面 b 后,点击了新的页面 d,那就无法再通过前进、后退功能查看页面 c 了。

队列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMreDaYd-1574007113176)(76320119DF1B47DAAAADFBDD1F12ED0D)]
作为一种非常基础的数据结构,队列的应用也非常广泛,特别是一些具有某些额外特性的队列,比如循环队列、阻塞队列、并发队列。它们在很多偏底层系统、框架、中间件的开发中,起着关键性的作用。

队列的实现

  • Queue() 创建一个空的队列
  • enqueue(item) 往队列中添加一个item元素
  • dequeue() 从队列头部删除一个元素
  • is_empty() 判断一个队列是否为空
  • size() 返回队列的大小
class MyQueue(object):
    def __init__(self):
        self.item = []

    def EnQueun(self, item):
        return self.item.append(item)

    def DeQueue(self):
        return self.item.pop(0)

    def is_empty(self):
        return self.item == []

    def size(self):
        print(len(self.item))

    def travel(self):
        for i in self.item:
            print(i, end=' ')

if __name__ == '__main__':

    q = MyQueue()
    print(q.is_empty())
    q.EnQueun(1)
    q.EnQueun(5)
    q.EnQueun(2)
    q.EnQueun(0)
    q.DeQueue()
    q.travel()

双端队列

在这里插入图片描述

双端队列(dequeue,double-ended queue),是一种具有队列和栈的性质的数据结构

双端队列中的元素可以从两端弹出,其限定入队和出队的操作在两端进行。双端队里可以在任意一端入队和出队。

操作
Deque() 创建一个空的双端队列

  • add_front(item) 从队头加入一个item元素
  • add_rear(item) 从队尾加入一个item元素
  • remove_front() 从队头删除一个item元素
  • remove_rear() 从队尾删除一个item元素
  • is_empty() 判断双端队列是否为空
  • size() 返回队列的大小
class QueueOpertion(object):
    def __init__(self):
        self.item = []

    def EnQueue(self, item):
        return self.item.append(item)

    def DeQueue(self):
        return self.item.pop(0)

    def is_empty(self):
        return self.item == []

    def size(self):
        return len(self.item)

    def travel(self):
        for i in self.item:
            print(i, end=' ')

class DoubleQ(QueueOpertion):
    def add_front(self, item):
        self.item.insert(0, item)

    def remove_rear(self):
        self.item.pop()


if __name__ == '__main__':
    d = DoubleQ()
    print(d.is_empty())

    d.EnQueue(6)
    d.EnQueue(9)
    d.EnQueue(7)
    d.add_front("r")
    d.add_front("y")
    d.add_front("h")
    d.DeQueue()
    d.remove_rear()

    print(d.size())
    d.travel()

阻塞队列

阻塞队列实在队列的基础上加了阻塞操作。如果队列为空或是不满的情况下,从头部提取数据会被阻塞,因为此时没有数据可取,直到队列满了,才能返回。相同,当队列满的时候,入队时会被阻塞,直到队列中有空闲的位置时才能入队,然后返回。

阻塞有两种处理方式:

  1. 排队请求:当队列满的时候,无法入队,等待有空闲位置的时候执行
  2. 拒绝请求:当队列满的时候,无法入队,直接拒绝,直接中断。
使用Google Earth Engine下载JRC全球水体数据 通过Google Earth Engine平台和提供的源代码,研究人员和水资源管理者可以方便地获取和利用这一重要的水资源监测数据集,从而开展相关的研究和决策支持工作。要使用Google Earth Engine下载JRC全球水体数据,首先需要在Google Earth Engine平台上进行注册和登录。JRC全球水体数据是由欧洲联合研究中心开发的高分辨率全球水体分类数据集,覆盖了整个地球的陆地和水域。下载完成后,你可以使用各种遥感数据处理软件来打开和分析这些数据,以满足不同的研究和应用需求。 阅读详情

相关推荐

Claude Code与Vibe Coding:2026年AI编程实战指南

AI编程助手是基于大语言模型的智能代码生成工具,通过理解编程上下文提供精准的代码补全和重构建议。其核心原理是利用深度学习技术分析代码语义,将自然语言指令转化为可执行代码。这种技术能显著提升开发效率,减少重复性编码工作,特别适用于快速原型开发和复杂问题求解。在实际应用场景中,AI编程助手可与Vibe Coding方法论结合,建立流畅的人机协作工作流。Claude Code作为先进的AI编程工具,支持多语言开发和智能错误检测,而Vibe Coding则强调自然交互和迭代优化,两者协同为开发者提供完整的AI编程解

weixin_29057695的博客 341

实验6:shell编程

实验6:shell编程

m0_52147381的博客 920

[调参神器]使用VOFA+上位机进行PID调参(附下位机代码)

​ 简单地来说,VOFA+是一个超级串口助手,除了可以实现一般串口助手的串口数据收发,它还可以实现数据绘图(包括直方图、FFT图),控件编辑,图像显示等功能。​ 如果只是想要用VOFA+来进行数据绘图,直接使用一个波形图控件就行,但是如果想要把VOFA+当作一个长期使用的调参助手,我们最好设置一下控件。VOFA+简洁好用,但是又有点太简洁了,部分体验并不是很好(比如不能调整控件大小,保存文件不太方便等),所以如果学有余力,推荐自己用QT/PyQT写上位机。接下来,我们要将指令中的数据提取出来。

qq_56089182的博客 4万+

实验三 栈和队列的操作

1.验证性实验2.(1)编程实现栈的以下基本操作:建栈,取栈顶元素,入栈,出栈。(2)编程实现队列的以下基本操作:建队列,取队头元素,入队,出队。3.(1)掌握栈的顺序存储结构、链式存储结构及其基本操作;(2)掌握队列的顺序存储结构、链式存储结构及其基本操作。

Stonesaul的博客 2457

一致性总线CMN600AE-ARM系列

主要介绍一致性总线CMN600AE,根据arm官网的spec来概述其模块。提示:以下是本篇文章正文内容,下面案例可供参考CMN600ae是基于Mesh拓扑结构,对外支持AMBA CHI/ACE-LITE等接口,内部改用路由结构转发数据,并提供硬件一致性和系统缓存,还支持多芯片互联。CMN600在T16FFC上可以做到2Ghz,另外AE版本增加了车轨芯片的安全功能,总线内部采用EDC检查,接口采用的奇校验。

tujiuguo3994的博客 6296

【CubeMX】STM32G474 HRTIM 互补PWM与死区时间配置实战

本文详细介绍了如何使用STM32CubeMX配置STM32G474的高分辨率定时器HRTIM生成互补PWM波形并精确设置死区时间。通过实战步骤讲解时钟配置、死区计算与高级功能,帮助工程师在电机驱动和电源应用中实现精准控制,避免上下桥臂直通风险。

grpc6streamer的博客 727

linux shell 数组建立及使用技巧

linux shell在编程方面比windows 批处理强大太多,无论是在循环、运算。已经数据类型方面都是不能比较的。 下面是个人在使用时候,对它在数组方面一些操作进行的总结。 1.数组定义 [chengmo@centos5 ~]$ a=(1 2 3 4 5)[chengmo@centos5 ~]$ echo $a1 一对括号表示是数组,数组元素用“空格”符号分割开。 ...

weixin_30646505的博客 331

MaxDEA如何计算超效率DEA

MaxDEA如何计算超效率DEA第一步,导入数据,设置输出和输出,点击OK;第二步,运行模型; 本文计算的是超效率DEA-BCC。 第一步,导入数据,设置输出和输出,点击OK; 第二步,运行模型; 在distance选项框中选择Radial:CCR(1978);BCC(1984)。 在Orientation中选择Non-oriented。其中,Input-oriented是投入最小;Outp...

王樰沫 1万+

Linux数据结构——队列(顺序表实现)

首先我们要理解队列所遵循的规则就是“先进先出”。我们可以看到生活中排队的例子(如:排队买票、排队打饭)其实就是一个队列。如同栈一样,为了保证队列的安全性,我们对队列的操作也只有三种:入队列、出队列、取队首元素。这篇文章主要是用数组来实现一个队列,为了使队列的空间能充分利用,所以用线性队列来模拟环形队列来实现。#define SeqQueueMaxSize 1000 typedef char Seq...

晴时有风阴有雨的博客 658

用友U8库龄分析避坑指南:物料出入库日期计算的5个常见错误

本文深入剖析了在用友U8系统中进行库龄分析时,物料出入库日期计算的五个常见陷阱。从数据源选择、业务类型过滤、计价方式逻辑、期初数据处理到查询性能优化,逐一解析错误根源并提供避坑指南,帮助企业获得准确的库龄数据,有效管理库存与资金风险。

weixin_29209801的博客 454

基于互相关(NCC)模板匹配——find_ncc_model_defocused.hdev

相关性原理:仅在NCC(r,c) = ±1时,模板与图像完全匹配; NCC绝对值越大,表示模板与正在检测部分图像越接近; NCC绝对值越接近于零,表示模板与图像越不一致。 线性光照变化不会影响NCC计算结果。 重要函数一: 创建模板:create_ncc_model( Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID) 参数列表: Template(in):单通道灰度图像,它的区域可被创建为模板。 Num

m0_51271525的博客 3412

【数据结构】栈实现队列 & 队列实现栈

🏷️力扣地址:🌈232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作 实现 类:示例1: 💫关键思路:1️⃣pop接口🌠动图解析:👇🏻2️⃣peek接口🌠动图解析:👇🏻3️⃣push接口🌠动图解析:👇🏻4️⃣empty接口💡代码实现: 🏷️力扣地址:🌈225. 用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(、、 和 )。实现 类:示例1 🌍解题关键:💫关键思路:那到底是如何实......

qq_42996461的博客 1838

零停机更新黑科技:Spring Boot应用实现无缝升级的实战指南

本文介绍了基于Spring Boot和Tomcat实现零停机更新的技术方案,通过动态端口切换和优雅关闭机制,确保服务更新过程中业务不中断。文章详细解析了核心原理,包括内嵌Tomcat的工作机制、零停机更新的三大技术基石(端口动态切换、优雅关闭和进程接管)。同时提供了完整的Java实现代码,重点展示了端口动态检查、参数动态调整、旧进程优雅终止等关键逻辑。该方案适用于高可用系统升级场景,能够有效避免传统部署方式导致的服务中断问题,实现100%无感知的应用更新。

墨夶的博客 818

【数据结构】 - 队列 & 栈

一定要多思考,如果人永远待在舒适圈的话,人永远不会成长。共勉。觉得作者写的不错的,值得你们借鉴的话,就请点一个免费的赞吧!这个对我来说真的很重要。

qq_43571809的博客 1210

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数据结构——栈&队列

数据结构、栈、队列、优先级队列的实现、ES5/ES6封装栈结构和队列结构

qq_56668869的博客 344

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数据结构-栈&队列OJ题

MyStack的成员不是队列指针,而是队列结构体变量,所以在myStackCreake中为MyStack动态开辟的空间大小是为两个队列结构体变量开辟的,这样做的好处是可以取q1和q2的地址,方便我们直接可以修改队列q1和q2。此时再入数据就要从rear的位置入,问题是入了数据后,rear+1就出了数组的下标范围,我们应该让rear回到0下标的位置才能真正实现循环队列:(注意:k是题目要求存储的元素个数)这道题是要用队列来实现栈,首先我们要了解到队列的性质是先进先出,而栈的性质是后进先出。

m0_62183318的博客 2778

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构-用栈模拟队列&用队列模拟栈

利用两个栈S1、S2来模拟一个队列。 利用两个栈S1和S2来模拟一个队列,当需要向队列中插入一个元素时,用s1来存放已输入的元素,即s1执行入栈操作。当需要出队时,则对s2执行出栈操作。由于从栈中取出元素的顺序是原顺序的逆序,所以必须先将S1中的所有元素全部出栈并入栈到S2中,再在S2中执行出栈操作,即可实现出队操作,而在执行此操作前必须判断S2是否为空,否则会导致顺序混乱。当栈S1和S2都为空时队列为空。 总结如下: 对S2的出栈操作用作出队,若S2为空,则先将S1中的所有元素送入S2。 对S1的

Miss Z的博客 1078

数据结构--栈&队列

要实现浏览器的回退与前进这个功能只需要两个栈,其中一个栈为前进栈而另一个栈为后退栈,假设依次访问了1、2、3、4个页面,我们就需要将1、2、3、4个页面依次压入前进栈,如果要回头看2这个页面,当点击回退按钮时,首先会从前进栈中弹出4、3页面然后压入后退栈中,假设又需要访问3页面,则在点击前进按钮,这时后退栈中首先会弹出3页面然后压入前进栈,以此规律来实现浏览器的回退与前进功能。队列的数据结构可以由数组或者链表实现,用数组实现的队列叫顺序队列,用链表实现的队列叫链式队列。播放歌曲时,从队头取出。

w259149的博客 1049

【数据结构】栈&队列

队列与栈不一样的地方在于队列支持的是FIFO操作,因此我们要不断变化队首的元素,如此一来,用数组实现的话,每次操作都会调动整个数组,严重影响效率,但是链表可以支持头插头删,这样一来,FIFO的问题便可迎刃而解。如果用链的话,每次出栈都需要找到尾结点的前一个,会造成许多不必要的麻烦,当然双向链表可以解决这个问题,但是仔细想想,似乎用数组来的更方便一些。由于栈是由数组模拟实现的,入栈和出栈其实也就是对数组进行插入删除,但要特别注意的是,top指向的是栈顶元素的下一个位置。越努力,越幸运,加油!

hehelm的博客 196

数据结构&栈&队列&链表&数组

目录: 数据结构 栈(stack) 队列 链表 数组 数据结构 数据结构是什么 简单来说,数据结果就是设计数据以何种方式存储在计算机中 比如:列表,集合,与字典等都是一种数据结构 程序 = 数据结构 + 算法 数据结构与数据类型 数据类型: 说明:数据类型是一个值的集合和定义在此集合上一组操作(通常是增删改查或者操作读写的方法)的总称 数据类型:int、str、boolean、by...

小宝儿的学习之路 303

【学习点滴-数据结构-栈&队列】 用两个队列模拟一个栈

题目描述:用两个队列模拟一个栈。栈和队列的实现源码已经给出。 本文系转载。 原文地址:http://blog.youkuaiyun.com/wangyangkobe/article/details/5910362 @wangyangkobe #include #include #include #include using namespace std; /*两个队列模拟一个堆栈*/ /

专注、专心 1223

数据结构 | 队列&栈

学习目标 了解 FIFO 和 LIFO 处理顺序的原理; 实现这两个数据结构; 熟系内置的队列和栈结构; 解决基本的队列相关问题,尤其是 BFS;...

庭前云落的博客 628

python数据结构——栈&队列

栈 先进后出 class Stack(object): """栈""" def __init__(self): self.__list=[] def push(self,item): """添加一个新的元素item到栈顶""" self.__list.append(item) def pop(self): ...

weixin_44740082的博客 168

数据结构:栈和队列(Stack & Queue)【详解】

栈和队列知识框架 栈 一、栈的基本概念 1、栈的定义 栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。 栈顶(Top):线性表允许进行插入删除的那一端。 栈底(Bottom):固定的,不允许进行插入和删除的另一端。 空栈:不含任何元素的空表。 栈又称为先进先出(Last In First Out)的线性表,简称LIFO结构 2、栈的基本操作 InitStack(&S):初始化一个空栈S。 StackEmpty(S):

UniqueUnit的博客 31万+

【数据结构】栈&队列OJ

我们使用两个队列,一个存放数据一个为空,当push数据是,我们就在q1处入队列,而当要出栈的时候,我们把q1的数据移到q2中即可,最后再将q1中仅剩的数据返回值并出队列。本题设置了front与rear结构,因此在取头尾的时候直接利用front和rear即可获取元素下标,但是要注意的是,因为是循环队列,在取队尾的时候要取队列长度的模。如何用栈实现队列呢?我们知道,栈和队列的首要区别就在于数据操作方式,栈是FILO,而队列则是FIFO,要想用两个栈实现队列,那就需要不断变换两个栈里的内容。

hehelm的博客 211

数据结构-栈&队列&链表&树

【代码】数据结构-栈&队列&链表&树。

wchg21131的博客 910
上一篇: 数据结构-双向链表
下一篇: 数据结构排序算法一
shell-x
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值