数据结构小记【Python/C++版】——队列篇

一步一步学python之(23)队列-deque双端队列 Python队列操作指南:介绍了队列的基本概念和Python中实现队列的多种方式。文章首先讲解使用列表模拟队列的操作方法,包括创建、入队、出队等基本操作。重点介绍了collections模块中的deque双端队列,详细说明其创建方法、添加/移除元素、查找元素、扩展队列、旋转队列和清空队列等操作,并提供了丰富的代码示例和运行结果。文章强调在Python中使用专门的队列模块比单纯使用列表更高效,尤其适合多线程环境。 阅读详情

一,基础概念

队列是由同一种数据元素组成的线性表结构。使用单向队列时,插入元素在一端进行而删除元素在另一端进行。

插入元素的一端在队列尾部(rear),删除元素的一端在队列头部(front)。新的数据元素不断从尾部进入队列,然后一直向前移动到头部。

队列与栈的结构相反,遵循的是先进先出(FIFO)原则。

队列结构在生活中的抽象模型有:售票口的排队队伍,打印机中一堆待打印的材料,它们都是先进先出的。

二,队列的图示结构

1.顺序队列,按照顺序结构进行存储,类似于数组

2.顺序队列的假溢出问题

对于顺序队列,不断的出队和入队操作,会让队列尾部的指针一直后移(rear=rear+1),直到超出队列的内存空间,此时,队列的存储空间还没被占满。队列的存储元素还没占满整个空间,队列的指针却发生了溢出,此现象被称为假溢出。为了避免假溢出问题,开发者更多时候使用特殊的顺序队列——循环队列。

3.特殊的顺序队列——循环队列

4.链式队列,按照链式结构进行存储,类似于链表

分别将元素12,24,36添加到队列,效果如图所示

三,队列的常见操作

Queue:初始化,创建一个空队列

enqueue:入队,在队列尾部添加一个元素

dequeue:出队,从队列头部移除一个元素,并返回

isEmpty:检查队列是否为空

size:返回队列中元素的数目

四,代码实现

注意,循环队列底层采用的是数组结构,链式队列底层采用的是单链表结构,因此,循环队列需要初始化队列的大小,即数组大小,而链式队列不需要。

1.循环队列的代码实现

循环队列在内存结构上还是一个普通数组,但是从抽象理解上,我们应该把它看作是一个头尾相连的环,通过取模运算来移动下标。

取模运算让队尾和队头的下标一直都在数组的地址空间以内移动,不会发生溢出。

假设循环队列的大小设置为maxSize

a.队尾下标往前移动一个单位:

rear = (rear + 1) % maxSize

b.队头下标往前移动一个单位:

front = (front + 1) % maxSize

c.判断队列是否为空:

front == rear(队尾和队头在同一个起点)

d.判断队列是否已满:

(rear + 1) % maxSize == front(队尾继续往前移动一个单位就可以和队头汇合)

Demo1.初始化

初始化时,顺序队列和循环队列的代码表示方式是一样的。主要初始化数组的大小、队头和队尾的初始值。

Python代码实现:

class CircularQueue():
    def __init__(self, k):
        self.k = k
        self.queue = [None] * k
        self.head = -1
        self.tail = -1

C++代码实现:

#define SIZE 6
class Queue {
private:
    int items[SIZE], front, rear;
public:
    Queue() {
        front = -1;
        rear = -1;
    }
}

Demo2.入队

Python代码实现:

def enqueue(self, data):
    if ((self.tail + 1) % self.k == self.head):
        print("The circular queue is full\n")
    elif (self.head == -1):
        self.head = 0
        self.tail = 0
        self.queue[self.tail] = data
    else:
        self.tail = (self.tail + 1) % self.k
        self.queue[self.tail] = data

C++代码实现:

void enQueue(int element) {
    if (isFull()) {
        cout << "Queue is full";
    }
    else {
        if (front == -1) front = 0;
        rear = (rear + 1) % SIZE;
        items[rear] = element;
        cout << endl << "Inserted " << element << endl;
    }
}

Demo3.出队

Python代码实现:

def dequeue(self):
    if (self.head == -1):
        print("The circular queue is empty\n")
    elif (self.head == self.tail):
        temp = self.queue[self.head]
        self.head = -1
        self.tail = -1
        return temp
    else:
        temp = self.queue[self.head]
        self.head = (self.head + 1) % self.k
        return temp

C++代码实现:

int deQueue() {
    int element;
    if (isEmpty()) {
        cout << "Queue is empty" << endl;
        return (-1);
    }
    else {
        element = items[front];
        if (front == rear) {
            front = -1;
            rear = -1;
        }
        else {
            front = (front + 1) % SIZE;
        }
        return (element);
    }
}

Demo4.完整代码实现

Python代码实现:

class CircularQueue():
    def __init__(self, k):
        self.k = k //定义循环队列的固定大小
        self.queue = [None] * k
        self.head = -1
        self.tail = -1

    def enqueue(self, data):
        if ((self.tail + 1) % self.k == self.head):
            print("The circular queue is full\n")
        elif (self.head == -1):
            self.head = 0
            self.tail = 0
            self.queue[self.tail] = data
        else:
            self.tail = (self.tail + 1) % self.k
            self.queue[self.tail] = data

    def dequeue(self):
        if (self.head == -1):
            print("The circular queue is empty\n")
        elif (self.head == self.tail):
            temp = self.queue[self.head]
            self.head = -1
            self.tail = -1
            return temp
        else:
            temp = self.queue[self.head]
            self.head = (self.head + 1) % self.k
            return temp

    def printCQueue(self):
        if (self.head == -1):
            print("No element in the circular queue")
        elif (self.tail >= self.head):
            for i in range(self.head, self.tail + 1):
                print(self.queue[i], end=" ")
            print()
        else:
            for i in range(self.head, self.k):
                print(self.queue[i], end=" ")
            for i in range(0, self.tail + 1):
                print(self.queue[i], end=" ")
            print()

if __name__ == '__main__':
    obj = CircularQueue(5)
    obj.enqueue(1)
    obj.enqueue(2)
    obj.enqueue(3)
    obj.enqueue(4)
    obj.enqueue(5)
    obj.enqueue(6)
    print("Initial queue")
    obj.printCQueue()

    obj.dequeue()
    print("After removing an element from the queue")
    obj.printCQueue()

运行结果:

The circular queue is full
Initial queue
1 2 3 4 5
After removing an element from the queue
2 3 4 5

C++代码实现:

#include <iostream>
#define SIZE 6  //定义循环队列的固定大小
using namespace std;
class Queue {
private:
    int items[SIZE], front, rear;
public:
    Queue() {
        front = -1;
        rear = -1;
    }
    bool isFull() {
        if (front == (rear + 1) % SIZE) {
            return true;
        }
        if (front == 0 && rear == SIZE - 1) {
            return true;
        }
        if (front == rear + 1) {
            return true;
        }
        return false;
    }
    bool isEmpty() {
        if (front == -1)
            return true;
        else
            return false;
    }
    void enQueue(int element) {
        if (isFull()) {
            cout << "Queue is full";
        }
        else {
            if (front == -1) front = 0;
            rear = (rear + 1) % SIZE;
            items[rear] = element;
            cout << endl << "Inserted " << element << endl;
        }
    }
    int deQueue() {
        int element;
        if (isEmpty()) {
            cout << "Queue is empty" << endl;
            return (-1);
        }
        else {
            element = items[front];
            if (front == rear) {
                front = -1;
                rear = -1;
            }
            else {
                front = (front + 1) % SIZE;
            }
            return (element);
        }
    }
    void display() {
        int i;
        if (isEmpty()) {
            cout << endl << "Empty Queue" << endl;
        }
        else {
            cout << endl << "Queue Items -> ";
            for (i = front; i != rear; i = (i + 1) % SIZE)
                cout << items[i];
            cout << items[i] << endl;
        }
    }
};
int main() {
    Queue q;
    q.enQueue(1);
    q.enQueue(2);
    q.enQueue(3);
    q.enQueue(4);
    q.enQueue(5);
    q.enQueue(6);
    q.enQueue(7);
    q.display();
    int elem = q.deQueue();
    if (elem != -1)
        cout << endl << "Deleted Element is " << elem;
    q.display();
    return 0;
}

运行结果: 

Inserted 1
Inserted 2
Inserted 3
Inserted 4
Inserted 5
Inserted 6
Queue is full
Queue Items -> 123456
Deleted Element is 1
Queue Items -> 23456

2.链式队列的代码实现

链式队列的实现方式类似于一个单链表,需要先初始化一个节点类Node。

Demo1.初始化

Python代码实现:

class Node:  //链表节点的初始化
    def __init__(self,data):
        self.data=data
        self.next=None

class Queue:  //链式队列的初始化
    def __init__(self):
        self.front=None
        self.queueSize=0

C++代码实现:

struct node //链表节点的初始化
{
       int value;
       node* next;
};

class Queue //链式队列的初始化
{
private:
       node* front;
       node* rear;
public:
       Queue()
       {
          front = NULL;
          rear = NULL;
       }
}

Demo2.入队

Python代码实现:

def enqueue(self, data):
    temp = Node(data)
    if self.front is None:  
        self.front = temp
        self.queueSize = self.queueSize + 1
    else:
        curr = self.front
        while curr.next != None:
            curr = curr.next
        curr.next = temp
        self.queueSize = self.queueSize + 1

C++代码实现:

void EnQueue(int n)
{
    node* temp = new node();
    temp->value = n;
    temp->next = NULL;
    if (front == NULL && rear == NULL)
    {
        front = rear = temp;
        return;
    }
    rear->next = temp;
    rear = temp;
}

Demo3.出队

Python代码实现:

def dequeue(self):
    try:
        if self.front == None:
            raise Exception("Queue is Empty")
        else:
            temp = self.front
            self.front = self.front.next
            tempdata = temp.data
            self.queueSize = self.queueSize - 1
            del temp
            return tempdata
    except Exception as e:
        print(str(e))

C++代码实现:

void Dequeue()
{
    node* temp = front;
    if (front == NULL)
    {
        cout << "Queue is empty!\n";
        return;
    }
    else if (front == rear)
    {
        front = rear = NULL;
    }
    else
    {
        front = front->next;
    }

    delete temp;
}

Demo4.完整代码实现

Python代码实现:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Queue:
    def __init__(self):
        self.front = None
        self.queueSize = 0

    def enqueue(self, data):
        newNode= Node(data)
        if self.front is None:
            self.front = newNode
            self.queueSize = self.queueSize + 1
        else:
            curr = self.front
            while curr.next != None:
                curr = curr.next
            curr.next = newNode
            self.queueSize = self.queueSize + 1

    def dequeue(self):
        try:
            if self.front == None:
                raise Exception("Queue is Empty")
            else:
                temp = self.front
                self.front = self.front.next
                tempdata = temp.data
                self.queueSize = self.queueSize - 1
                del temp
                return tempdata
        except Exception as e:
            print(str(e))

    def size(self):
        return self.queueSize

    def isEmpty(self):
        if self.queueSize == 0:
            return True
        else:
            return False

if __name__ == '__main__':
    Queue_obj = Queue()
    Queue_obj.enqueue("a")
    Queue_obj.enqueue("b")
    Queue_obj.enqueue("c")
    print("deque the elem: ", Queue_obj.dequeue())
    print("deque the elem: ", Queue_obj.dequeue())
    print("now the size is: ", Queue_obj.size())

运行结果:

deque the elem:  a
deque the elem:  b
now the size is:  1

C++代码实现:

#include<iostream>
using namespace std;
struct node
{
       int value;
       node* next;
};
class Queue
{
private:
       node* front;
       node* rear;
public:
       Queue()
       {
              front = NULL;
              rear = NULL;
       }
       void EnQueue(int n)
       {
              node* temp = new node();
              temp->value = n;
              temp->next = NULL;
              if (front == NULL && rear == NULL)
              {
                      front = rear = temp;
                      return;
              }
              rear->next = temp;
              rear = temp;
       }
       void Dequeue()
       {
              node* temp = front;
              if (front == NULL)
              {
                      cout << "Queue is empty!\n";
                      return;
              }
              else if (front == rear)
              {
                      front = rear = NULL;
              }
              else
              {
                      front = front->next;
              }
              delete temp;
       }
       void Display()
       {
              node* temp = front;
              cout << "Queue Item: ";
              while (temp != NULL)
              {
                      cout << temp->value << " ";
                      temp = temp->next;
              }
              cout << "\n";
       }
};
int main()
{
       Queue q;
       q.EnQueue(1);
       q.EnQueue(2);
       q.EnQueue(3);
       q.EnQueue(4);
       q.Display();
       q.Dequeue();  
       q.Dequeue();  
       q.Display();  
       return 0;
}

运行结果:

Queue Item: 1 2 3 4
Queue Item: 3 4

3. 内置数据类型实现

C++内置数据类型:STL标准库中的std::queue

Python内置数据类型:Queue模块

Demo1:

#include <iostream>
#include <queue>
using namespace std;
void showq(queue<int> gq)
{
    queue<int> g = gq;
    while (!g.empty()) {
        cout << '\t' << g.front();
        g.pop();
    }
    cout << '\n';
}
int main()
{
    queue<int> queObj;
    queObj.push(10);
    queObj.push(20);
    queObj.push(30);
    cout << "The queue queObj is : ";
    showq(queObj);
    cout << "queObj.size() : " << queObj.size() << endl;
    cout << "queObj.front() : " << queObj.front() << endl;
    cout << "queObj.back() : " << queObj.back() << endl;
    cout << "queObj.pop() : " << endl;
    queObj.pop();
    showq(queObj);
    return 0;
}

Demo2:

from queue import Queue

q = Queue(maxsize=6)
print(q.qsize())

q.put('a')
q.put('b')
q.put('c')

print("\nElements dequeued from the queue")
print(q.get())
print(q.get())
print(q.get())

print("\nEmpty: ", q.empty())

五,参考阅读

《Problem Solving with Algorithms and Data Structures Using Python, Second Edition》

https://www.programiz.com/dsa/circular-queue

https://prepinsta.com/c-program/implementation-of-queues-using-linked-list/

Proteus一体化安装STC15库添加 Proteus一体化安装与STC15库添加指南 本文详细介绍了Proteus 8.9 SP2专业版的一体化安装流程和STC15系列单片机库文件的添加方法。安装过程简单快捷,无需破解,稳定性好。通过将两个库文件(Lib和LIB)复制到Proteus安装目录的DATA/LIBRARY文件夹中,即可实现STC15W4K32S4芯片的仿真功能。文中还提供了新建工程和器件放置的步骤说明,特别指出STC15W4K32S4芯片可兼容仿真其他STC15系列芯片,并附带下载链接获取资源。该教程适用于电子设计初学者和开发者。 阅读详情

相关推荐

从零到一:基于Esp32与LVGL的ST7789屏幕驱动全流程实战

本文详细介绍了基于Esp32与LVGL的ST7789屏幕驱动全流程实战,包括环境准备、驱动文件改造、硬件接口配置、LVGL集成与优化等关键步骤。通过VSCode+ESP-IDF开发环境,读者可以快速掌握SPI模式下的屏幕驱动开发,解决常见问题如颜色错乱、画面撕裂等,并实现LVGL的高效集成与性能优化。

weixin_33725722的博客 711

Python 队列

Queue.qsize() 返回队列的大小Queue.empty() 如果队列为空,返回True,反之FalseQueue.full() 如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应Queue.get([block[, timeout]])获取队列,timeout等待时间Queue.get_nowait() 相当于Queue.get(False),非阻塞方法Queue.put(item) 写入队列,timeout等待时间。

cliffordl的专栏 1万+

SAP后台JOB保姆级教程:从SM36创建到SM37监控,手把手教你搞定ABAP程序定时任务

本文详细解析SAP后台JOB从创建到监控的全流程,重点介绍SM36创建和SM37监控的操作步骤与最佳实践。通过真实案例演示如何配置定时任务、处理常见故障及实施企业级管理策略,帮助ABAP开发者高效管理后台程序执行。

weixin_30838873的博客 431

python操作队列

python操作队列

Python热爱者的博客 3836

开源有限元dealii学习——step-1

#简介 dealii是一款开源的求解偏微分方程的有限元软件,它优点: 1.多种单元类型 2.可以自适应网格 3.文档和范例齐全 4.与其它库有良好的接口 5.使用c++编写 #安装 dealii可以在官网上或者github上下载源码,解压后进入源文件目录安装。 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/path/to/install...

weixin_42312251的博客 4385

国产谷歌地球,地形分析秒杀同款地图软件

咱们做地质、林业、水文、水利、电力、GIS、地图、水保、环境的,需要经常用到各种数据,比如影像、地形、矢量、模型等,但目前80%的规划大数据展示都离不开ArcGIS,令人头大的是很多朋友连ArcGIS软件安装起来都费劲。。。 那不会ArcGIS又装不了Google Earth怎么开展工作? 今天推荐大家一款国产免费专业地图浏览下载测量分析神器—图新地球 图新地球,国产三维gis软件。可以查看高清卫星影像地形以及其他很多常用电子地图,对地图需求的掌握远胜过Google Maps,而且上手比国外软件要简单

GISWorld3D的博客 3685

python队列操作

0。

vah101的专栏 1128

电荷灵敏前置放大器噪声优化策略:从理论到实践

本文深入探讨了电荷灵敏前置放大器的噪声优化策略,从理论分析到实践应用。文章系统解析了并联电流噪声与串联电压噪声的来源,并引入噪声等效原理与“冷电容”模型作为统一分析工具。通过详解a、b、c三类噪声的频谱特性,为实战优化提供了清晰指导。核心策略包括选用高跨导、低漏电流FET,优化静态工作点,采用共源-共基结构,精心设计反馈网络,以及实施严格的PCB布局、屏蔽与接地,旨在全面提升微弱信号检测系统的信噪比。

weixin_29292431的博客 467

python队列

队列

m0_75106254的博客 8765

【unity实战】Unity手搓脚本工具实现合并网格功能

本文介绍了在Unity中优化网格性能的方法,通过合并重复网格减少绘制调用。主要使用Mesh.CombineMeshes方法实现网格合并,支持统一材质和多材质处理。核心内容包括:1)基础合并脚本实现,将子网格合并到父对象并禁用原网格;2)统一材质设置,支持自定义或默认材质;3)多材质合并方案,通过设置mergeSubMeshes=false保留子网格材质索引。文章还提供了完整代码示例和操作演示,适用于实际项目中的网格优化需求。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 560

vue支付项目-APP支付宝支付功能

如果用户已安装支付宝客户端,商家 App 唤起支付宝完成支付,支付完后跳回到商家 App 内,最后展示支付结果。如果用户没有安装支付宝客户端,商家 App 内会调起支付宝网页支付收银台,用户登录支付宝账号,支付完后展示支付结果。1.点击按钮开通或者续费,会验证是否选择会员商品以及对协议是否查看选中(这里根据项目需要自行验证,可忽略),验证通过打开选择支付方式弹窗页面,选择微信支付或者支付宝支付;4.可取消支付,放弃支付会返回会员页面,页面提示支付取消;1.判断支付方式,如果是2,则是支付宝支付方式。

总结前端开发中遇到的问题,分享前端知识 1万+

数据结构与算法之Python实现——队列

用Python实现循环队列、链式队列,通俗易懂

weixin_62917800的博客 3142

使用Simulink来模拟多旋翼无人机在风扰动条件下的飞行情况,并分析其稳定性

本教程详细介绍了使用Simulink进行多旋翼无人机风扰动稳定性分析的完整流程。首先构建包含飞行器动力学模型、控制系统和环境模拟模块的系统框架,重点讲解简化动力学方程的实现方法。随后指导设计PID控制器来维持姿态稳定,并添加随机风扰动模型模拟环境干扰。通过设置输入信号和输出显示,最终实现对不同风速条件下无人机控制性能的评估。该实例为无人机控制系统设计提供了实用的仿真方法,强调利用MATLAB工具进行可视化分析和参数优化,以提高系统抗干扰能力和稳定性。

amy_mhd的博客 421

数据结构小记【Python/C++版】——堆结构篇

数据结构基础

程序员与背包客_CoderZ 928

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

每周小记——JVM

本文剖析JVM核心机制:详述内存模型(堆、方法区、栈)及垃圾回收算法(标记-清除/复制/压缩)、分代策略与GC类型(Minor/Major/FullGC);解析类加载机制(双亲委派模型、加载/链接/初始化过程及三类加载器差异);阐述执行引擎(JIT编译、热点探测、逃逸分析);对比现代收集器(G1/ZGC/Shenandoah)及CMS优劣;探讨性能调优关键(吞吐量与延迟平衡、内存分配策略)。为Java性能优化提供理论支撑。

weixin_57655687的博客 1583

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Python算法笔记(2)-初识数据结构-数组、链表、栈、队列、哈希表

Python算法笔记(2)-初识数据结构-数组、链表、栈、队列、哈希表

入佛门六根不净,入商场狼性不足 803

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python实现队列

队列是一种先进先出(FIFO)的线性表数据结构。它像队伍一样,首先进入队列的元素最先出队列,就像排队买票,首先进来的人先买到票离开。队列通常需要设置最大长度来避免内存溢出。

闲人编程的博客 756

Python 队列(Queue)用法

一、队列(Queue) Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。 常用方法: Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返...

大魔王的博客 24万+

【数据结构与算法Python】栈与队列_双端队列

004数据结构与算法Python栈栈结构实现栈的操作代码实现(列表实现)队列队列的实现操作双端队列操作实现(顺序表实现) 栈 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。 由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, La

一梦 233

python-Queue队列的实现原理

队列(Queue)-简介 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作! 假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是...

顾鸢的博客 1358

python学习笔记(14)算法(7)队列

队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列尾部,而位于队列头部的人逐个离开。我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”,删除队首元素的操作称为“出队”。

m0_74370400的博客 747

Python中的队列使用

一、队列(Queue) Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。 常用方法: Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False,Queue.fu

codeinfo.top 2744

简短而有效的python queue队列解释

Queue.qsize() 返回队列的大小  Queue.empty() 如果队列为空,返回True,反之False  Queue.full() 如果队列满了,返回True,反之False Queue.full 与 maxsize 大小对应  Queue.get([block[, timeout]])获取队列,timeout等待时间  Queue.get_nowait() 相当Queue

神棍之路 7万+

Python-消息队列模块queue使用指南

常用的队列有 queue.Queue(FIFO)、queue.LifoQueue(LIFO)和 queue.PriorityQueue(优先级队列)。queue 模块是 Python 标准库中的一个重要模块,主要用于提供线程安全的队列类,适用于多线程编程中不同线程之间的数据交换。join():如果你在多线程中使用队列,确保每个任务完成后调用 task_done(),并在主线程中使用 join() 等待所有任务完成。queue.Queue 是最常用的队列类型,它实现了先进先出(FIFO)的队列行为。

网络风云的博客 1万+

数据结构 07-队列概念、分类、Python 中使用列表 list 实现

1. 队列简介 1.1 队列的概念 1.2 队列的类型 1.2.1 顺序队列 1.2.1 循环队列 1.2.2 双端队列 2. Python 中使用列表 list 实现队列 2.1 顺序队列的常规操作和代码实现 2.2 循环队列的常规操作和代码实现 2.3双端队列的常规操作和代码实现 ......

一分耕耘一分收获 1756

python队列用法

队列中的每个元素都是一个元组 (priority, data),其中 priority 是一个可以比较的值。注意:在多线程环境中,queue 模块的队列是线程安全的,因此经常被用作线程之间的通信工具。get(): 从队列中删除并返回一个元素。put_nowait(item): 等同于 put(item),但不阻塞。full(): 如果队列已满,返回 True,否则返回 False。这是一个后进先出 (LIFO) 的队列,也就是通常所说的栈。get_nowait(): 等同于 get(),但不阻塞。

小仙女的博客 694
上一篇: 数据结构小记【Python/C++版】——图结构篇
下一篇: 数据结构小记【Python/C++版】——BST树篇
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员与背包客_CoderZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值