rust实现循环队列

struct CircularQueue<T> {

data: Vec<Option<T>>,

head: usize,

tail: usize,

capacity: usize,

}

impl<T> CircularQueue<T> {

fn new(capacity: usize) -> Self {

let mut data = Vec::with_capacity(capacity);

for _ in 0..capacity {

data.push(None);

}

CircularQueue {

data,

head: 0,

tail: 0,

capacity,

}

}

fn enqueue(&mut self, value: T) -> bool {

if self.is_full() {

return false;

}

self.data[self.tail] = Some(value);

self.tail = (self.tail + 1) % self.capacity;

true

}

fn dequeue(&mut self) -> Option<T> {

if self.is_empty() {

return None;

}

let value = self.data[self.head].take();

self.head = (self.head + 1) % self.capacity;

value

}

fn is_empty(&self) -> bool {

if self.head == self.tail {

self.data[self.head].is_none()

} else {

false

}

}

fn is_full(&self) -> bool {

((self.tail + 1) % self.capacity) == self.head

}

}

fn main() {

let mut queue: CircularQueue<i32> = CircularQueue::new(3);

assert!(queue.enqueue(1));

assert!(queue.enqueue(2));

assert!(queue.enqueue(3));

assert!(!queue.enqueue(4)); // 队列满了,返回false

assert_eq!(queue.dequeue(), Some(1));

assert_eq!(queue.dequeue(), Some(2));

assert_eq!(queue.dequeue(), Some(3));

assert!(queue.is_empty());

}

相关推荐
2401_876221344 分钟前
Tasks and Deadlines(Sorting and Searching)
c++·算法
jie*21 分钟前
小杰数据结构——题库——拂衣便欲沧海去,但许明月随吾身
数据结构·windows·python
我要学习别拦我~1 小时前
逻辑回归建模核心知识点梳理:原理、假设、评估指标与实战建议
算法·机器学习·逻辑回归
KotlinKUG贵州1 小时前
贪心算法:从“瞎蒙”到稳赚
算法·kotlin
重生之我是Java开发战士1 小时前
【C语言】动态内存管理详解
c语言·开发语言·算法
墨染点香2 小时前
LeetCode 刷题【31. 下一个排列】
算法·leetcode·职场和发展
wrynhyxa2 小时前
力扣热题100——子串
算法·leetcode·哈希算法
Hello.Reader2 小时前
Rust ⽣成 .wasm 的极致瘦⾝之道
开发语言·rust·wasm
Moonbit2 小时前
MoonBit Pearls Vol.03:01背包问题
后端·算法·编程语言
啊阿狸不会拉杆3 小时前
《算法导论》第 2 章 - 算法基础
数据结构·c++·算法·排序算法