dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
pub struct Queue<T> {
    st_front: Vec<T>,
    st_back: Vec<T>,
}

impl<T> Queue<T> {
    pub fn new() -> Self {
        Self { st_front: vec![], st_back: vec![] }
    }

    pub fn size(&self) -> usize {
        self.st_front.len() + self.st_back.len()
    }

    pub fn push(
        &mut self,
        x: T,
    ) {
        self.st_back.push(x);
    }

    pub fn pop(&mut self) -> Option<T> {
        if !self.st_front.is_empty() {
            return self.st_front.pop();
        }

        while let Some(x) = self.st_back.pop() {
            self.st_front.push(x);
        }

        self.st_front.pop()
    }
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        let mut que = Queue::new();

        que.push(2);

        que.push(1);

        assert_eq!(que.pop(), Some(2));

        que.push(3);

        assert_eq!(que.pop(), Some(1));

        assert_eq!(que.pop(), Some(3));

        assert_eq!(que.pop(), None);
    }
}