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());

}

相关推荐
葵花日记6 分钟前
数据结构——单链表
数据结构
前端 贾公子27 分钟前
LeetCode - 739.每日温度问题单调栈解法
数据结构·算法
你好我是咯咯咯35 分钟前
代码随想录算法训练营Day20
算法
mmz120738 分钟前
高精度算法
c++·算法
沙雕村民小王1 小时前
代码随想录算法训练营第五十二天|图论专题: 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
数据结构·算法·go·深度优先·图论
杉之1 小时前
快速排序笔记
数据结构·算法·排序算法
百渡ovO2 小时前
【蓝桥杯】十五届省赛B组c++
数据结构·c++·算法
梭七y2 小时前
【力扣hot100题】(072)柱状图中的最大矩阵
算法·leetcode·职场和发展
Dovis(誓平步青云)2 小时前
【数据结构】排序算法(下篇·开端)·深剖数据难点
c语言·数据结构·学习·算法·排序算法·推荐算法
浪漫血液&2 小时前
OJ--第N个泰波那契数列
算法·动态规划