forked from AdaGold/stacks-queues
-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy pathqueue.rb
More file actions
69 lines (59 loc) · 1.17 KB
/
queue.rb
File metadata and controls
69 lines (59 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
class Queue
def initialize
@store = Array.new()
@max = 20
@front = 0
@back = 0
end
def enqueue(element)
if @back == @front-1 || (@front == 0 && @back == @max - 1)
# account for full Queue
return raise ArgumentError.new("Queue is full")
elsif self.empty?
@front = 0
@back = 0
elsif @back == @max-1
@back = 0 # if last then circles around
else
@back = @back + 1 # incr by 1
end
@store[@back] = element
end
def dequeue
if self.empty?
raise ArgumentError.new("Queue's Empty")
end
value = @store[@front]
@store[@front] = nil
if @front == @max - 1 # circle
@front = 0
else
@front = @front + 1
end
return value
end
def front
return @store[@front]
end
def size
return 0 if @front == -1
if @front < @back
@back - @front + 1
else
@max - (@back - @front)
end
end
def empty?
# return @front == -1
return @store.all?{ |e| e.nil? }
end
def to_s
list = []
index = @front
until index == @back + 1
list << @store[index]
index = (index + 1) % @max
end
return list.to_s
end
end