Class: DSAVisualizer::DataStructures::Queue
- Inherits:
-
Object
- Object
- DSAVisualizer::DataStructures::Queue
- Defined in:
- lib/dsa_visualizer/data_structures/queue.rb
Class Method Summary collapse
Instance Method Summary collapse
- #dequeue ⇒ Object
- #empty? ⇒ Boolean
- #enqueue(item) ⇒ Object
- #front ⇒ Object
-
#initialize ⇒ Queue
constructor
A new instance of Queue.
- #size ⇒ Object
- #visualize ⇒ Object
Constructor Details
#initialize ⇒ Queue
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
.demo ⇒ Object
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 |
.learn ⇒ Object
40 41 42 |
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 40 def self.learn demo end |
Instance Method Details
#dequeue ⇒ Object
12 13 14 |
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 12 def dequeue @items.shift end |
#empty? ⇒ 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 |
#front ⇒ Object
16 17 18 |
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 16 def front @items.first end |
#size ⇒ Object
24 25 26 |
# File 'lib/dsa_visualizer/data_structures/queue.rb', line 24 def size @items.size end |
#visualize ⇒ Object
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 |