队列

  1. #[derive(Debug)]
  2. pub struct Queue<T> {
  3. elements: Vec<T>,
  4. }
  5. impl<T: Clone> Queue<T> {
  6. pub fn new() -> Queue<T> {
  7. Queue {
  8. elements: Vec::new(),
  9. }
  10. }
  11. pub fn enqueue(&mut self, value: T) {
  12. self.elements.push(value)
  13. }
  14. pub fn dequeue(&mut self) -> Result<T, &str> {
  15. if !self.elements.is_empty() {
  16. Ok(self.elements.remove(0usize))
  17. } else {
  18. Err("Queue is empty")
  19. }
  20. }
  21. pub fn peek(&self) -> Result<&T, &str> {
  22. match self.elements.first() {
  23. Some(value) => Ok(value),
  24. None => Err("Queue is empty"),
  25. }
  26. }
  27. pub fn size(&self) -> usize {
  28. self.elements.len()
  29. }
  30. pub fn is_empty(&self) -> bool {
  31. self.elements.is_empty()
  32. }
  33. }
  34. impl<T> Default for Queue<T> {
  35. fn default() -> Queue<T> {
  36. Queue {
  37. elements: Vec::new(),
  38. }
  39. }
  40. }
  41. #[cfg(test)]
  42. mod tests {
  43. use super::Queue;
  44. #[test]
  45. fn test_enqueue() {
  46. let mut queue: Queue<u8> = Queue::new();
  47. queue.enqueue(64);
  48. assert_eq!(queue.is_empty(), false);
  49. }
  50. #[test]
  51. fn test_dequeue() {
  52. let mut queue: Queue<u8> = Queue::new();
  53. queue.enqueue(32);
  54. queue.enqueue(64);
  55. let retrieved_dequeue = queue.dequeue();
  56. assert!(retrieved_dequeue.is_ok());
  57. assert_eq!(32, retrieved_dequeue.unwrap());
  58. }
  59. #[test]
  60. fn test_peek() {
  61. let mut queue: Queue<u8> = Queue::new();
  62. queue.enqueue(8);
  63. queue.enqueue(16);
  64. let retrieved_peek = queue.peek();
  65. assert!(retrieved_peek.is_ok());
  66. assert_eq!(8, *retrieved_peek.unwrap());
  67. }
  68. #[test]
  69. fn test_size() {
  70. let mut queue: Queue<u8> = Queue::new();
  71. queue.enqueue(8);
  72. queue.enqueue(16);
  73. assert_eq!(2, queue.size());
  74. }
  75. }