栈与队列

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

  先进先出

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

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]))

 

posted @ 2021-07-30 14:45  小小鱼鱼儿  阅读(30)  评论(0编辑  收藏  举报