首页 > 其他分享 >栈与循环队列

栈与循环队列

时间:2023-07-29 11:01:48浏览次数:26  
标签:return 队列 self 栈顶 queue 循环 stack

1.栈(Stack)是一种具有后进先出(LIFO)特性的线性数据结构。在栈中,元素的插入和删除操作只能在栈的一端进行,通常称为栈顶。栈不支持在任意位置的元素访问,只能访问栈顶的元素。栈的常见操作包括入栈(push)将元素放入栈顶、出栈(pop)将栈顶元素移除,以及获取栈顶元素(peek)等。

下面是一个使用Python列表实现栈的示例代码:

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

    def push(self, item):
        self.stack.append(item)

    def pop(self):
        if self.is_empty():
            return None
        return self.stack.pop()

    def peek(self):
        if self.is_empty():
            return None
        return self.stack[-1]

    def is_empty(self):
        return len(self.stack) == 0

在上述代码中,我们定义了一个Stack类,使用Python列表作为内部存储结构。push方法将元素添加到栈顶,pop方法将栈顶元素移除并返回它,peek方法返回栈顶元素而不移除它,is_empty方法用于判断栈是否为空。 以下是对栈的一些操作示例:

stack = Stack()
stack.push(10)  # 入栈: 10
stack.push(20)  # 入栈: 20
print(stack.peek())  # 获取栈顶元素: 20
stack.pop()  # 出栈: 20
print(stack.peek())  # 获取栈顶元素: 10

2.循环队列(Circular Queue)是一种通过循环方式实现的队列。与普通队列不同的是,在循环队列中,当队列满时,新的元素可以覆盖队列的起始位置。这种设计在一定程度上提高了存储空间的利用率。循环队列有两个关键指针,一个指向队列的起始位置(front),一个指向队列的末尾位置的下一个位置(rear)。常见操作包括入队(enqueue)将元素添加到队列末尾,出队(dequeue)将队列起始位置的元素移除,并且可以判断队列是否为空或已满。

下面是一个使用Python列表实现循环队列的示例代码:

class CircularQueue:
    def __init__(self, k):
        self.queue = [None] * k
        self.front = 0
        self.rear = 0
        self.size = 0
        self.capacity = k

    def enqueue(self, item):
        if self.is_full():
            return False
        self.queue[self.rear] = item
        self.rear = (self.rear + 1) % self.capacity
        self.size += 1
        return True

    def dequeue(self):
        if self.is_empty():
            return None
        item = self.queue[self.front]
        self.queue[self.front] = None
        self.front = (self.front + 1) % self.capacity
        self.size -= 1
        return item

    def is_empty(self):
        return self.size == 0

    def is_full(self):
        return self.size == self.capacity

在上述代码中,我们定义了一个CircularQueue类,使用Python列表作为循环队列的内部存储结构。enqueue方法将元素添加到队列末尾,dequeue方法将队列起始位置的元素移除并返回它,is_empty方法用于判断队列是否为空,is_full方法判断队列是否已满。 以下是对循环队列的一些操作示例:

queue = CircularQueue(3)
queue.enqueue(10)  # 入队: 10
queue.enqueue(20)  # 入队: 20
queue.enqueue(30)  # 入队: 30
print(queue.dequeue())  # 出队: 10
print(queue.dequeue())  # 出队: 20
queue.enqueue(40)  # 入队: 40
print(queue.dequeue())  # 出队: 30
print(queue.is_empty())  # 判断队列是否为空: True

以上是栈和循环队列的简单介绍和示例代码。它们都是常见的数据结构,用于解决各种问题。

标签:return,队列,self,栈顶,queue,循环,stack
From: https://blog.51cto.com/u_16176603/6890989

相关文章

  • Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准
    全文下载链接:http://tecdat.cn/?p=26562最近我们被客户要求撰写关于循环神经网络的研究报告,包括一些图形和统计输出。自2000年 1月以来的股票价格数据。我们使用的是Microsoft股票。该项目包括:将时间序列数据转换为分类问题。使用TensorFlow的LSTM模型由MSE衡......
  • LeetCode 239. Sliding Window Maximum 单调队列
    Youaregivenanarrayofintegersnums,thereisaslidingwindowofsizekwhichismovingfromtheveryleftofthearraytotheveryright.Youcanonlyseetheknumbersinthewindow.Eachtimetheslidingwindowmovesrightbyoneposition.Return......
  • 链表/栈/队列/KMP
    链表用数组模拟,不同于结构体加指针调用new关键字开上万级别的节点非常慢,基本会超时单链表来构造邻接表用于存图与树基本结构:head表示头结点的下标e[i]表示节点i的值ne[i]表示节点i的下一个节点的下标idx存储当前已经用到了哪个节点,表示新节点基本操作:......
  • 数据结构中队列的存储和应用
    队列:只有两个口进出数据,一个专门进入数据,另一个专门出数据,先进先出,FIFO表 一、顺序队列:存储元素的连续内存的首地址容量队头位置(出队)队尾位置(入队)[元素数量]运算:创建、销毁、清空、出队、入队、队空、队满、队头、队尾、元素数量#inclu......
  • 三个线程循环打印ABC10次的几种解决方法
    有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕上循环打印10次ABCABC… 这是一个比较常用的关于线程的考题,一般出现在应届生的校园招聘试卷上。本文给出如下四种解决方法:使用synchronized,wait和notifyAll使用Lock和Condition使用Semaphore使用AtomicInteger使用synchro......
  • Unity3D_拯救死循环
    当我们无意间写了死循环,此时只能调出任务管理器重新打开Unity工程一个偶然的机会我得知了一个不用结束任务,就可以挽救死循环的方法,整理如下总体思路:首先,创建一个Cube,让它沿Y轴旋转,通过它是否旋转来判断程序是否进入了死循环;其次,创建一个bool类型的变量,默认值为false,通过按......
  • shell循环:for循环 | while循环
    摘要介绍shellfor循环的语法,主要有两种forinfori=0;i<n;i++这样的语法介绍shell的while循环shell的判断条件看这篇博客一、for循环1.基本语法有两种形式for变量in值1值2值3do 程序donefor((初始值;循环控制条件;变量变化))do 程序done2.应......
  • uni-app写微信小程序,data字段循环引用
    在写程序过程中,需要使用到globalData里的内容,而这个全局变量,在uni-app上需要通过:varapp=getApp();app.globalData.xxx=xxx来使用。我觉得每次都要获取app对象,嫌麻烦,就在data数据段里定义一个app字段,之后就通过this.app.globalData来使用,问题就出现在这。我用hbuilderX运行......
  • 剑指 Offer 09. 用两个栈实现队列(简单)
    题目:classCQueue{public:stack<int>st1;stack<int>st2;CQueue(){}voidappendTail(intvalue){st1.push(value);}intdeleteHead(){if(st1.empty()&&st2.empty())return-1;......
  • Java 本地队列
    实现Java本地队列1.理解本地队列在开始实现Java本地队列之前,首先需要明确什么是队列。队列是一种先进先出(FIFO)的数据结构,类似于我们平常排队的场景。在编程中,队列常常被用来存储需要按照一定顺序处理的数据。Java提供了一个Queue接口,它是Collection接口的子接口,定义了......