Class: DSAVisualizer::DataStructures::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/dsa_visualizer/data_structures/queue.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeQueue

Returns a new instance of Queue.



4
5
6
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 4

def initialize
  @items = []
end

Class Method Details

.demoObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 44

def self.demo
  Visualizer.print_header("QUEUE - Core Level Visualization")
  
  Visualizer.print_section("1. Queue Concept (FIFO)")
  puts "\nFirst In, First Out - like a line at a store"
  puts "Operations: enqueue (add at rear), dequeue (remove from front)"
  
  Visualizer.print_section("2. Implementation Comparison")
  
  ruby_code = <<~RUBY
    class Queue
      def initialize
        @items = []
      end
      
      def enqueue(item)
        @items.push(item)  # O(1)
      end
      
      def dequeue
        @items.shift  # O(n) - shifts all elements!
      end
    end
  RUBY

  cpp_code = <<~CPP
    #include <queue>
    std::queue<int> q;
    
    q.push(10);   // O(1)
    q.pop();      // O(1)
    
    // Internally uses deque (double-ended queue)
    // Efficient operations at both ends
  CPP

  explanation = "Ruby's Array.shift is O(n) because it shifts all elements. C++'s std::queue uses deque internally for O(1) operations at both ends. For better Ruby performance, use a circular buffer or linked list."
  
  Visualizer.print_comparison(ruby_code, cpp_code, explanation)
  
  tracker = MemoryTracker.new
  queue = Queue.new
  
  Visualizer.print_step(1, "Enqueuing: 10, 20, 30")
  [10, 20, 30].each do |val|
    queue.enqueue(val)
    tracker.track_operation("Enqueue", "Added #{val}")
    puts queue.visualize
  end
  
  Visualizer.print_step(2, "Dequeuing")
  dequeued = queue.dequeue
  tracker.track_operation("Dequeue", "Removed #{dequeued}")
  puts "\nRemoved: #{dequeued}".colorize(:red)
  puts queue.visualize
  
  tracker.print_summary
  
  puts "\n\nšŸŽÆ Key Takeaways:".colorize(:green).bold
  puts "  1. Queue is FIFO - First In, First Out"
  puts "  2. Ruby Array.shift is O(n) - inefficient for large queues"
  puts "  3. C++ std::queue uses deque for O(1) operations"
  puts "  4. Use cases: task scheduling, BFS, buffering"
end

.learnObject



40
41
42
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 40

def self.learn
  demo
end

Instance Method Details

#dequeueObject



12
13
14
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 12

def dequeue
  @items.shift
end

#empty?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 20

def empty?
  @items.empty?
end

#enqueue(item) ⇒ Object



8
9
10
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 8

def enqueue(item)
  @items.push(item)
end

#frontObject



16
17
18
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 16

def front
  @items.first
end

#sizeObject



24
25
26
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 24

def size
  @items.size
end

#visualizeObject



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 28

def visualize
  return "Empty queue" if @items.empty?
  
  result = "\nFRONT → "
  @items.each_with_index do |item, idx|
    result += "[ #{item} ]"
    result += " → " unless idx == @items.size - 1
  end
  result += " ← REAR"
  result
end