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
73 lines (59 loc) · 1.18 KB
/
queue.rb
File metadata and controls
73 lines (59 loc) · 1.18 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
70
71
72
73
class Queue
MAX_SIZE = 20
def initialize
@store = Array.new
@front = -1
@back = -1
end
def enqueue(element)
if @front == 0 && @back == MAX_SIZE - 1 || @back == @front - 1 % MAX_SIZE - 1
raise ArgumentError
elsif @store.empty?
@front = 0
@back = 0
elsif @back == MAX_SIZE - 1 && @front != 0
@back = 0
else
@back += 1
end
@store[@back] = element
end
def dequeue
if @store.empty?
raise ArgumentError
end
removed_num = @store[@front]
@store[@front] = nil
if @front == @back
@front = -1
@back = -1
elsif @front + 1 == MAX_SIZE
@front = 0
else
@front += 1
end
return removed_num
end
def front
return @store[@front]
end
def size
return 0 if @front == -1
return @front < @rear ? @rear - @front + 1 : MAX_SIZE - @front + @rear
end
def empty?
return @front == @back
end
def to_s
list = Array.new
@store[@front...MAX_SIZE].each do |item|
list.push(item) if item
end
if @back < @front
@store[0..@back].each do |item|
list.push(item) if item
end
end
return list.to_s
end
end