首页 > 其他分享 >栈和队列

栈和队列

时间:2023-01-04 23:33:27浏览次数:37  
标签:return 队列 self stack def size

1. 栈:后进先出

  

 

 

2. 栈的实现  

class Stack:
    def __init__(self):
        self.stack = []

    def push(self, ele):        # 进栈
        self.stack.append(ele)

    def pop(self):                # 出栈
        self.stack.pop()

    def get_top(self):            # 取栈顶
        if len(self.stack) > 0:
            return self.stack[-1]

    def is_empty(self):        # 判断栈为空
        return len(self.stack) == 0    

 

 

3. 栈的应用:括号匹配问题

def brace_match(str):
    stack = Stack()    # 调用栈对象
    match = {'}':'{',']':'[',')':'('}   # 字典中的键值对为正确括号匹配
    for i in str:
        if i in {'(','[','{'}:  # 如果是左括号,则入栈
            stack.push(i)
        else:   # 右括号的三种情况
            if stack.is_empty():    # 栈为空直接判断False
                return False
            elif stack.get_top() == match[i]:   # 栈不为空时栈顶匹配字典,匹配上为一对则出栈
                stack.pop()
            else:   # 匹配不上判断False
                return False
    if stack.is_empty():    # 直到匹配所有字符后栈为空,则说明括号匹配成功
        return True
    else:
        return False

 

 

4. 队列:先进先出

 

 

 

    

 

 

 

 

5. 环形队列:首尾相连的队列

   

 

 

 

6. 队列的实现

# 环形队列
class Queue:
    def __init__(self, size):
        self.queue = [None for _ in range(size)]
        self.size = size
        self.rear = 0   # 队尾指针
        self.front = 0  # 队首指针
    # 队尾队列
    def push(self, ele):
        if not self.is_filled():
            self.rear = (self.rear + 1) % self.size
            self.queue[self.rear] = ele
        else:
            raise IndexError("Queue is filled")
    # 队首指针
    def pop(self):
        if not self.is_empty():
            self.front = (self.front + 1) % self.size
            return self.queue[self.front]
        else:
            raise IndexError("Queue is empty")
    # 队空判断
    def is_empty(self):
        return self.rear == self.front
    # 堆满判断
    def is_filled(self):
        return (self.rear + 1) % self.size == self.front

 

标签:return,队列,self,stack,def,size
From: https://www.cnblogs.com/chf333/p/17026257.html

相关文章

  • 消息队列:第三章:在Java中使用消息队列
    在项目中导入依赖坐标<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId>......
  • 消息队列和事件循环
    消息队列和事件循环系统来驱动浏览器页面浏览器页面是由消息队列和事件循环系统来驱动的。渲染进程专门有一个IO线程用来接收其他进程传进来的消息,接收到消息之后,会......
  • 消息队列:第四章:延迟检查队列
    分布式事务的异步通信问题使用分布式事务异步通信的结构,一个很大的问题就是不确定性。一个消息发送过去了,不管结果如何发送端都不会原地等待接收端。直到接收端再推送回来......
  • 【队列】LeetCode 232. 用栈实现队列
    题目链接232.用栈实现队列思路设置一个主栈mainStack和一个辅助栈assistantStack,在进行入队的时候,将mainStack中的元素全部放入assistantStack中,再将x入队,然......
  • 【队列】LeetCode 225. 用队列实现栈
    题目链接225.用队列实现栈思路设置一个主队列mainQueue和一个辅助队列assistantQueue,在进行压栈的时候,将mainQueue中的元素全部放入assistantQueue中,再将x压......
  • 消息队列:第五章:RabbitMQ的使用
    第一步:使用之前先安装好RabbitMQ,建议安装在linux系统下安装配置RabbitMQ:https://blog.csdn.net/qq_33450681/article/details/85339315第二步:在配置文件下配置rabbitmq:......
  • Redis实现消息队列
    异步消息队列说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。如果你对消息队列没那......
  • kafka学习笔记03消息队列的两种模式
     ①点对点模式  该种模式就是消费者会自动消费消息,消息收到之后会向消息队列进行确认收到消息,然后将该数据进行删除。 ②发布/订阅模式  可以有多个的topic,topic......
  • Codeforces 1373 D. Maximum Sum on Even Positions 做题记录(单调队列)
    因为只能转一个子数组,很显然转长度为奇数的子数组,对最大化答案是没有意义的(偶数位的数字之和不会变化)。因此只考虑转偶长度的子数组。转动偶数长度的子数组,相当于......
  • netcore下RabbitMQ队列、死信队列、延时队列及小应用
    关于安装rabbitmq这里一笔掠过了。下面进入正题:1.新建aspnetcorewebapi空项目,NormalQueue,删除controllers文件夹已经无关的文件,这里为了偷懒不用console控制台:public......