Queue/Definition: Difference between revisions

Content added Content deleted
(→‎{{header|Picat}}: Split into subsections.)
Line 6,221: Line 6,221:
=={{header|Vlang}}==
=={{header|Vlang}}==
Updated to Vlang version 0.2.2
Updated to Vlang version 0.2.2
<lang go>const max_depth = 256
<lang vlang>const max_tail = 256

struct Queue {
struct Queue<T> {
mut:
mut:
data []f32 = [f32(0)].repeat(max_depth)
data []T
depth int
tail int
head int
head int
}
}

fn (mut queue Queue) enqueue(value f32) {
fn (mut queue Queue<T>) push(value T) {
if queue.depth >= max_depth || queue.depth < queue.head {
if queue.tail >= max_tail || queue.tail < queue.head {
return
return
}
}
println('Enqueue: ${value:3.2f}')
println('push: $value')
queue.data[queue.depth] = value
queue.data << value
queue.depth++
queue.tail++
}
}

fn (mut queue Queue) dequeue() ?f32 {
fn (mut queue Queue<T>) pop() !T {
if queue.depth > 0 && queue.head < queue.depth {
if queue.tail > 0 && queue.head < queue.tail {
result := queue.data[queue.head]
result := queue.data[queue.head]
queue.head++
queue.head++
println('Dequeue: top of Queue was ${result:3.2f}')
println('Dequeue: top of Queue was $result')
return result
return result
}
}
return error('Queue Underflow!!')
return error('Queue Underflow!!')
}
}

fn (queue Queue) peek() ?f32 {
fn (queue Queue<T>) peek() !T {
if queue.depth > 0 && queue.head < queue.depth {
if queue.tail > 0 && queue.head < queue.tail {
result := queue.data[queue.head]
result := queue.data[queue.head]
println('Peek: top of Queue is ${result:3.2f}')
println('Peek: top of Queue is $result')
return result
return result
}
}
return error('Out of Bounds...')
return error('Out of Bounds...')
}
}

fn (queue Queue) empty() bool {
fn (queue Queue<T>) empty() bool {
return queue.depth == 0
return queue.tail == 0
}
}

fn main() {
fn main() {
mut queue := Queue{}
mut queue := Queue<f64>{}
println('Queue is empty? ' + if queue.empty() { 'Yes' } else { 'No' })
println('Queue is empty? ' + if queue.empty() { 'Yes' } else { 'No' })
queue.enqueue(5.0)
queue.push(5.0)
queue.enqueue(4.2)
queue.push(4.2)
println('Queue is empty? ' + if queue.empty() { 'Yes' } else { 'No' })
println('Queue is empty? ' + if queue.empty() { 'Yes' } else { 'No' })
queue.peek() or { return }
queue.peek() or { return }
queue.dequeue() or { return }
queue.pop() or { return }
queue.dequeue() or { return }
queue.pop() or { return }
queue.enqueue(1.2)
queue.push(1.2)
}</lang>
}

</lang>
{{out}}
{{out}}
<pre>Queue is empty? Yes
<pre>Queue is empty? Yes