package main
import (
"container/list"
"errors"
"fmt"
)
// Queue is a list data structure that follows First-In-First-Out (FIFO) methodology
type Queue struct {
size int // size of the queue
items list.List // holds the elements
}
// enqueue() method inserts new element at the back of the queue
func (queue *Queue) enqueue(str string) (bool, error) {
if queue.items.Len() >= queue.size {
return false, errors.New("Overflow")
}
queue.items.PushBack(str)
return true, nil
}
// dequeue() method removes element at the front of the queue
func (queue *Queue) dequeue() (string, error) {
if queue.items.Len() == 0 {
return "", errors.New("Empty")
}
ret := queue.items.Front().Value.(string)
queue.items.Remove(queue.items.Front())
return ret, nil
}
func main() {
queue := &Queue{size: 5}
fmt.Println(queue.enqueue("1"))
fmt.Println(queue.dequeue())
fmt.Println(queue.dequeue())
fmt.Println(queue.enqueue("1"))
fmt.Println(queue.enqueue("2"))
fmt.Println(queue.enqueue("3"))
fmt.Println(queue.enqueue("4"))
fmt.Println(queue.enqueue("5"))
fmt.Println(queue.enqueue("6"))
}