zoukankan      html  css  js  c++  java
  • 栈与队列

    一、队列:常应用于按顺序操作元素

      先进先出

      队列的实现(可使用数组和指向队列头部的索引实现)

    class queue():
        def _init_(self):
            self._list = []
    
        def enqueue(self, item): #入队
            self._list.append(item)
    
        def dequeue(self): #删除
            if self._list:
                return(self._list.pop())
            else:
                return None
        def is_empty(self): 
            return self._list == []
    
        def size(self):
            return len(self._list)

    随着入队等操作越多,浪费许多空间,尤其对于有空间限制时,例:只能分配一个长度为5的列表(数组)

      循环队列:使用固定大小的数组和两个指针指示起始位置和结束位置

    # 循环队列(设计一个容量为k的循环队列)
    class circularqueue():
        def __init__(self,k):
            """
            :type k: int
            """
            self.queue = [0] * k # 定义实现储存队列长度为k的列表(队列)
            self.count = 0  # 定义列表目前的元素数
            self.headindex = 0  # 定义列表的头部索引
            self.capacity = k  # 定义列表的容量大小
    
        def enqueue(self, value):  # 向循环队列插入元素
            if self.count == self.capacity:
                return False
            else:
                self.queue[(self.count+self.headindex)%self.capacity] = value
                self.count +=1
    
        def dequeue(self):  # 向循环队列删除元素
            if self.count == 0:
                return False
            else:
                self.headindex = (self.headindex+1)%self.capacity
                self.count -=1
    
        def front(self):  # 返回队首元素
            if self.count == 0:
                return -1
            else:
                return self.queue[(self.headindex)]
    
        def rear(self): # 获取队尾元素
            if self.count == 0:
                return -1
            else:
                return self.queue[(self.headindex+self.count-1)%self.capacity]
    
        def isEmpty(self):  #判断队是否为空
            return self.count == 0
    
        def isFull(self):   #判断队是否满队
            return self.count == self.capacity

    二、栈: 常应用反转,例:反转链表

    先进后出

    import math
    
    # 实现一个栈,以及返回栈中最小的元素 `
    class stack():
        def __init__(self):
            self.stack = []
            self.min = [math.inf] #math.inf代表浮点正无穷大
    
        def push(self,item):
            self.stack.append(item)
            self.min.append(min(item, self.min[-1]))
    
        def pop(self):
            self.stack.pop()  # pop默认最后一个
            self.min.pop()
    
        def gettop(self):
            return self.stack[-1]
    
        def getmin(self):
            return self.min[-1]end(item)
            self.min.append(min(item, self.min[-1]))
  • 相关阅读:
    轮播插件unsilder 源码解析(二)
    轮播插件unsilder 源码解析(一)---源码解析
    轮播插件unsilder 源码解析(一)---使用
    jquery插件扩展的学习
    基于canvas的陈列订货的分析
    grunt安装和使用教程
    2016订货会项目总结2
    2016工作项目完成总结
    不使用递归法求值
    easy bootstrap模板
  • 原文地址:https://www.cnblogs.com/byy521/p/15063424.html
Copyright © 2011-2022 走看看