4 个稳定版本

1.1.0 2019 年 1 月 16 日
1.0.2 2018 年 4 月 14 日
1.0.1 2017 年 9 月 26 日
1.0.0 2017 年 9 月 22 日

#501数据结构

Download history 3545/week @ 2023-12-11 4279/week @ 2023-12-18 1838/week @ 2023-12-25 3191/week @ 2024-01-01 2971/week @ 2024-01-08 3753/week @ 2024-01-15 3131/week @ 2024-01-22 5062/week @ 2024-01-29 3935/week @ 2024-02-05 4947/week @ 2024-02-12 3942/week @ 2024-02-19 4810/week @ 2024-02-26 4483/week @ 2024-03-04 5423/week @ 2024-03-11 4142/week @ 2024-03-18 5951/week @ 2024-03-25

20,143 每月下载量
20 个 crate (16 直接) 中使用

MIT/Apache

25KB
154

队列

queues 提供了多个高效的 FIFO 队列数据结构,可用于您的库。这些结构都是基于 rust 的 Vector 类型实现的。

队列是一种线性数据结构,通常定义了三种方法

  1. add:也称为 queuepush,向队列中添加元素。
  2. remove:也称为 dequepop,从队列中移除最 旧的 元素。
  3. peek:显示队列中计划移除的下一个元素。

队列有多种变体。在这个 crate 中,可用的变体包括

  • Queue<T>:一个简单的可增长大小且容量无限制的 FIFO 队列。
  • Buffer<T>:一个有限容量的 FIFO 队列。缓冲区可以有可增长的大小(最多到定义的容量),或者可以以容量初始化,空槽默认占用默认值。
  • CircularBuffer<T>:类似于上面的缓冲区,但允许溢出。任何超出环形缓冲区容量的添加都会导致其最旧的元素被推出。

快速入门

快速入门指南

安装

库使用

要在项目中使用此库,请确保已将 queues crate 添加到您的 Cargo.toml 文件中的依赖项中。

[dependencies]
queues = "1.0.2"

在您的文件中,导入 crate 并使用其成员

# #[macro_use]
extern crate queues;
use queues::*;
# fn main() { }

源代码

要启动项目

> cd ${WORKING_DIR}
> git clone <this_repo>
> cargo build

测试

使用 cargo 运行测试套件

> cd ${PROJECT_FOLDER}
> cargo test

示例

项目包含一些示例,您可以运行这些示例来查看库成员的工作方式。

示例名称是

  • queue 队列示例
  • buf 缓冲区示例
  • cbuf 环形缓冲区示例
  • cbuf_def 带默认值的循环缓冲区示例
> cd ${PROJECT_FOLDER}
> cargo run --example ${EXAMPLE_NAME}

用法

以下描述了简单用法

#[macro_use]
extern crate queues;

use queues::*;

fn main() {
    // Create a simple Queue
    let mut q: Queue<isize> = queue![];

    // Add some elements to it
    q.add(1);
    q.add(-2);
    q.add(3);

    // Check the Queue's size
    q.size();  // 3

    // Remove an element
    q.remove();  // Ok(1)

    // Check the Queue's size
    q.size();  // 2

    // Peek at the next element scheduled for removal
    q.peek();  // Ok(-2)

    // Confirm that the Queue size hasn't changed
    q.size();  // 2

    // Remove the remaining elements
    q.remove();  // Ok(-2)
    q.remove();  // Ok(3)

    // Peek into an empty Queue
    q.peek();  // Raises an error

    // Attempt to remove an element from an empty Queue
    q.remove();  // Raises an error
}

示例中包含有关 BufferCircularBuffer 用法的更多信息

无运行时依赖